склади и инструмент готовы

This commit is contained in:
2025-12-07 19:36:28 +03:00
parent 54bf21d52d
commit 65a3bc1671
65 changed files with 3485 additions and 115 deletions
+58
View File
@@ -0,0 +1,58 @@
# async def upload(requestData: dict = Depends(RequestParser())):
import json
from fastapi import Request, UploadFile
class RequestParser:
def __init__(self, include_files=True):
self.include_files = include_files
async def __call__(self, request: Request) -> dict:
parsed = {
"method": request.method,
"url": str(request.url),
"query": dict(request.query_params),
"headers": dict(request.headers),
"cookies": request.cookies,
"body": None,
"files": {},
}
# ----- BODY (JSON, Text) -----
raw_body = await request.body()
if raw_body:
try:
parsed["body"] = json.loads(raw_body.decode("utf-8"))
except Exception:
parsed["body"] = raw_body.decode("utf-8", errors="ignore")
# ----- FORM / FILES -----
try:
form = await request.form()
for key, value in form.items():
# Файл
if isinstance(value, UploadFile):
if self.include_files:
file_bytes = await value.read()
parsed["files"][key] = {
"filename": value.filename,
"content_type": value.content_type,
"content": file_bytes,
}
else:
# Добавляем как текстовое поле
if parsed["body"] is None:
parsed["body"] = {}
if isinstance(parsed["body"], dict):
parsed["body"][key] = value
except Exception:
pass
parsed["headers"].pop("cookie", None)
# logger.info(f"[RequestParser] Parsed request:")
# logger.info(parsed)
return parsed