MyFSIO v0.4.0 Release #33
@@ -55,21 +55,44 @@ class _ChunkedTransferMiddleware:
|
|||||||
if environ.get("REQUEST_METHOD") not in ("PUT", "POST"):
|
if environ.get("REQUEST_METHOD") not in ("PUT", "POST"):
|
||||||
return self.app(environ, start_response)
|
return self.app(environ, start_response)
|
||||||
|
|
||||||
sha256 = environ.get("HTTP_X_AMZ_CONTENT_SHA256", "")
|
|
||||||
decoded_len = environ.get("HTTP_X_AMZ_DECODED_CONTENT_LENGTH", "")
|
|
||||||
content_encoding = environ.get("HTTP_CONTENT_ENCODING", "")
|
|
||||||
transfer_encoding = environ.get("HTTP_TRANSFER_ENCODING", "")
|
transfer_encoding = environ.get("HTTP_TRANSFER_ENCODING", "")
|
||||||
content_length = environ.get("CONTENT_LENGTH")
|
content_length = environ.get("CONTENT_LENGTH")
|
||||||
|
|
||||||
is_streaming = (
|
if "chunked" in transfer_encoding.lower():
|
||||||
"STREAMING" in sha256.upper()
|
if content_length:
|
||||||
or decoded_len
|
del environ["HTTP_TRANSFER_ENCODING"]
|
||||||
or "aws-chunked" in content_encoding.lower()
|
else:
|
||||||
or "chunked" in transfer_encoding.lower()
|
raw = environ.get("wsgi.input")
|
||||||
)
|
if raw:
|
||||||
|
try:
|
||||||
|
if hasattr(raw, "seek"):
|
||||||
|
raw.seek(0)
|
||||||
|
body = raw.read()
|
||||||
|
except Exception:
|
||||||
|
body = b""
|
||||||
|
if body:
|
||||||
|
environ["wsgi.input"] = io.BytesIO(body)
|
||||||
|
environ["CONTENT_LENGTH"] = str(len(body))
|
||||||
|
del environ["HTTP_TRANSFER_ENCODING"]
|
||||||
|
|
||||||
if not is_streaming:
|
content_length = environ.get("CONTENT_LENGTH")
|
||||||
return self.app(environ, start_response)
|
if not content_length or content_length == "0":
|
||||||
|
sha256 = environ.get("HTTP_X_AMZ_CONTENT_SHA256", "")
|
||||||
|
decoded_len = environ.get("HTTP_X_AMZ_DECODED_CONTENT_LENGTH", "")
|
||||||
|
content_encoding = environ.get("HTTP_CONTENT_ENCODING", "")
|
||||||
|
if ("STREAMING" in sha256.upper() or decoded_len
|
||||||
|
or "aws-chunked" in content_encoding.lower()):
|
||||||
|
raw = environ.get("wsgi.input")
|
||||||
|
if raw:
|
||||||
|
try:
|
||||||
|
if hasattr(raw, "seek"):
|
||||||
|
raw.seek(0)
|
||||||
|
body = raw.read()
|
||||||
|
except Exception:
|
||||||
|
body = b""
|
||||||
|
if body:
|
||||||
|
environ["wsgi.input"] = io.BytesIO(body)
|
||||||
|
environ["CONTENT_LENGTH"] = str(len(body))
|
||||||
|
|
||||||
raw = environ.get("wsgi.input")
|
raw = environ.get("wsgi.input")
|
||||||
if raw and hasattr(raw, "seek"):
|
if raw and hasattr(raw, "seek"):
|
||||||
@@ -78,21 +101,6 @@ class _ChunkedTransferMiddleware:
|
|||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
cl_int = 0
|
|
||||||
try:
|
|
||||||
cl_int = int(content_length) if content_length else 0
|
|
||||||
except (ValueError, TypeError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
if cl_int <= 0:
|
|
||||||
try:
|
|
||||||
body = raw.read() if raw else b""
|
|
||||||
except Exception:
|
|
||||||
body = b""
|
|
||||||
if body:
|
|
||||||
environ["wsgi.input"] = io.BytesIO(body)
|
|
||||||
environ["CONTENT_LENGTH"] = str(len(body))
|
|
||||||
|
|
||||||
return self.app(environ, start_response)
|
return self.app(environ, start_response)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user