Я пытаюсь ввести подсказку в свой fastAPI, чтобы использовать как pydantic-класс BaseModel для различных аргументов, так и некоторые отдельные файлы. Я также хочу добавить описание всех входных данных в http://127.0.0.1:8000/docs.
Чтобы объединить аргументы, я поместил их в базовую модель. Сначала я также хотел поместить все свои файлы в BaseModel, но, поскольку pydantic не поддерживает UploadFile в качестве стандартного аргумента, я добавил их отдельно.
При объединении входных данных я получаю статус: ошибка 422, которую я не могу решить. Есть ли для этого элегантное решение?
Код на стороне сервера:
class CallbackArgs(BaseModel):
arg1: str = Field(..., description="Argument 1 description")
arg2: str = Field(..., description="Argument 2 description")
@app.post("/run_task")
async def run_task(
args: Annotated[CallbackArgs, Form()],
file1: UploadFile = File(..., description="First file"),
file2: UploadFile = File(..., description="Second file"),
):
pass
Тестовая/Клиентская сторона:
@pytest.fixture
def client(tmp_path, monkeypatch):
app = FastAPI()
...
yield TestClient(app)
args = {
"arg1": "value1",
"arg2": "value2",
}
files = [
("file1", ("file1.txt", BytesIO(b"file1 content"), "text/plain")),
("file2", ("file2.txt", BytesIO(b"file2 content"), "text/plain")),
]
response = client.post(
"/run_task",
data=args,
files=files,
)
Подробнее здесь: https://stackoverflow.com/questions/798 ... le-uploads