POST-запрос со списком [UploadFile] приводит к HTTP 422: необрабатываемый объектPython

Программы на Python
Ответить
Anonymous
 POST-запрос со списком [UploadFile] приводит к HTTP 422: необрабатываемый объект

Сообщение Anonymous »

Мы используем несколько микросервисов, использующих Python с FastAPI. У принимающего API есть конечная точка, которая выглядит следующим образом:

Код: Выделить всё

@router.post("/{connector_id}/upload")
@router.post("/{connector_id}/upload/{upload_id}")
async def upload(
tenant_id: str,
connector_id: str,
files: list[UploadFile],
upload_id: str | None = None,
controller: ConnectorController = Depends(get_controller),
) -> dict:
...
Также пытался добавить файлы: list[UploadFile]= File(...),, но безрезультатно.
Отправляющий микросервис создает конечную точку следующим образом:

Код: Выделить всё

async def upload_file(
self,
files: list[UploadFile],
) -> str:
url = [...]

form_data = ["files",(file.filename, file.file, file.content_type) for file in files]

try:
response = await self._client.post(url=url, files=form_data)
except ConnectError as e:
[...]
где _client является httpx.AsyncClient и файлы создаются следующим образом:

Код: Выделить всё

parquet_buffer = io.BytesIO()
df.to_parquet(parquet_buffer, index=False) #Pandas dataframe
parquet_buffer.seek(0)

upload_file = UploadFile(
filename=file.name,
file=parquet_buffer,
size=parquet_buffer.getbuffer().nbytes,
)
upload_files.append(upload_file)
Но что бы я ни делал, я получаю следующий ответ HTTP 422: Unprocessable Entity:

Код: Выделить всё

b'{"detail":[{"loc":["body","files"],"msg":"field required","type":"value_error.missing"}]}'
Конечная точка работает должным образом как со Swagger, так и с Postman.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ble-entity
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»