MyFSIO v0.4.0 Release #33

Merged
kqjy merged 19 commits from next into main 2026-03-22 05:06:47 +00:00
Showing only changes of commit 7a3202c996 - Show all commits

View File

@@ -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)