Проблема с Fastapi, Pydantic и Kebab-CasePython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с Fastapi, Pydantic и Kebab-Case

Сообщение Anonymous »

В моем проекте FASTAPI, если я создаю общее определение заголовка с Pydantic, я обнаружил, что поля заголовка с кебабом не ведут себя, как и ожидалось. «Волшебное» преобразование из полей заголовка с кебабом в запросе на их аналоги Snake_cace не работает, в дополнение к несоответствиям в сгенерированных документах Swagger. < /P>
Вот минимальное воспроизведение проблемы : < /p>

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

### main.py

from typing import Annotated
from fastapi import FastAPI, Header
from pydantic import BaseModel, Field

app = FastAPI()

class CommonHeaders(BaseModel):
simpleheader: str
a_kebab_header: str | None = Field(
default=None,
title="a-kebab-header",
alias="a-kebab-header",
description="This is a header that should be specified as `a-kebab-header`",
)

@app.get("/")
def root_endpoint(
headers: Annotated[CommonHeaders, Header()],
):
result = {"headers received": headers}
return result

Если я запускаю это, и посмотрю документы Swagger по адресу http: // localhost: 8000/docs Я вижу это, что выглядит правильно:

И если я «попробую», это будет генерировать то, что я ожидаю в качестве правильного запроса: < /p>

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

curl -X 'GET' \
'http://localhost:8000/' \
-H 'accept: application/json' \
-H 'simpleheader: foo' \
-H 'a-kebab-header: bar'
< /code>
Но в ответе становится ясно, что он неправильно получил заголовок кебаба: < /p>
{
"headers received": {
"simpleheader": "foo",
"a-kebab-header": null
}
}
< /code>
Изменение имени заголовка на snake_case "a_kebab_header" в запросе тоже не работает. T Работайте либо (хотя я бы ожидал, что это будет из-за преобразования «волшебного шашлыка», описанного в документах Fastapi). < /p>
class CommonHeaders(BaseModel):
simpleheader: str
a_kebab_header: str | None = Field(
default=None,
description="This is a header that should be specified as `a-kebab-header`",
)
< /code>
, хотя теперь это приводит к тому, что документы Swagger, указанные в Snake_case: < /p>

и использование "Попробуйте это" приводит к варианту snake_case: 
curl -X 'GET' \
'http://localhost:8000/' \
-H 'accept: application/json' \
-H 'simpleheader: foo' \
-H 'a_kebab_header: bar'
< /code>
Но, как ни странно, это тоже не работает!  Ответ: < /p>
{
"headers received": {
"simpleheader": "foo",
"a_kebab_header": null
}
}
< /code>
Но в неожиданном окончании, если я вручную переписываю запрос в Kebab-case: < /p>
curl -X 'GET' \
'http://localhost:8000/' \
-H 'accept: application/json' \
-H 'simpleheader: foo' \
-H 'a-kebab-header: bar'
< /code>
, наконец, поднимает это значение заголовка с помощью волшебного перевода, и я получаю нужные результаты обратно: < /p>
{"headers received":{"simpleheader":"foo","a_kebab_header":"bar"}}
Как правильное способ указать этот объект заголовка, чтобы сочетать сваггерные документы и поведение?


Подробнее здесь: https://stackoverflow.com/questions/794 ... der-fields
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с Fastapi, Pydantic и Kebab-Case
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Проблема с Fastapi, Pydantic и Kebab-Case
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Проблема с Fastapi, Pydantic и Kebab-Case
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Проблема с Fastapi, Pydantic и Kebab-Case
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Проблема с Fastapi, Pydantic и Kebab-Case
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

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