74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
from typing import Dict, Optional, Tuple
|
|
|
|
import multipart
|
|
|
|
|
|
def get_body_from_form_data(
|
|
body: bytes, boundary: str
|
|
) -> Tuple[Optional[bytes], Dict[str, str]]:
|
|
print("YO BYTES", body)
|
|
|
|
def on_part_begin():
|
|
print("YO PART BEGAN")
|
|
return
|
|
|
|
def on_part_data(b,s,e):
|
|
print("YO PART DATA", b, s, e)
|
|
return
|
|
|
|
def on_part_end(string: str):
|
|
print("YO PART ENDED")
|
|
return
|
|
|
|
def on_header_begin():
|
|
print("YO HEADER BEGIN")
|
|
return
|
|
|
|
def on_header_end():
|
|
print("YO HEADER END")
|
|
return
|
|
|
|
def on_header_field(b,s,e):
|
|
print("YO HEADER FIELD", b, s, e)
|
|
return
|
|
|
|
def on_header_value(b,s,e):
|
|
print("YO HEADER FIELD", b, s, e)
|
|
return
|
|
|
|
def on_headers_finished():
|
|
print("YO HEADER FINISHED")
|
|
return
|
|
|
|
def on_end():
|
|
print("YO END")
|
|
return
|
|
|
|
parser = multipart.MultipartParser(boundary=boundary,
|
|
callbacks={
|
|
"on_part_begin": on_part_begin,
|
|
"on_part_data": on_part_data,
|
|
"on_part_end": on_part_end,
|
|
"on_header_field": on_header_field,
|
|
"on_header_value": on_header_value,
|
|
"on_header_end": on_header_end,
|
|
"on_headers_finished": on_headers_finished,
|
|
"on_end": on_end,
|
|
}
|
|
)
|
|
parser.write(body)
|
|
parser.finalize(body)
|
|
data = None
|
|
headers: Dict[str, str] = {}
|
|
for prt in parser.parts():
|
|
if prt.name == "upload_file":
|
|
headers["key"] = prt.name
|
|
data = prt.file.read()
|
|
else:
|
|
val = prt.file.read()
|
|
if prt.name == "file":
|
|
data = val
|
|
else:
|
|
headers[prt.name] = val.decode("utf-8")
|
|
return data, headers
|