⚗️ add support for data json file

This commit is contained in:
yanyongyu
2021-12-24 23:15:28 +08:00
parent 75e2ca77df
commit 80258fe2d4
5 changed files with 90 additions and 13 deletions

View File

@ -11,17 +11,17 @@ FastAPI 驱动适配
"""
import logging
from typing import List, Callable, Optional
from typing import Any, List, Tuple, Callable, Optional
import uvicorn
from pydantic import BaseSettings
from fastapi.responses import Response
from fastapi import FastAPI, Request, status
from fastapi import FastAPI, Request, UploadFile, status
from starlette.websockets import WebSocket, WebSocketState
from ._model import FileTypes
from nonebot.config import Env
from nonebot.typing import overrides
from nonebot.utils import escape_tag
from nonebot.config import Config as NoneBotConfig
from nonebot.drivers import Request as BaseRequest
from nonebot.drivers import WebSocket as BaseWebSocket
@ -238,12 +238,36 @@ class Driver(ReverseDriver):
request: Request,
setup: HTTPServerSetup,
) -> Response:
json: Any = None
try:
json = await request.json()
except Exception:
pass
data: Optional[dict] = None
files: Optional[List[Tuple[str, FileTypes]]] = None
try:
form = await request.form()
data = {}
files = []
for key, value in form.multi_items():
if isinstance(value, UploadFile):
files.append(
(key, (value.filename, value.file, value.content_type))
)
else:
data[key] = value
except Exception:
pass
http_request = BaseRequest(
request.method,
str(request.url),
headers=request.headers.items(),
cookies=request.cookies,
content=await request.body(),
data=data,
json=json,
files=files,
version=request.scope["http_version"],
)