Вебхук, вызывающий эту конечную точку, отправляет параметры запроса в фиксированном формате, который я не могу изменить — я не контролирую отправку запроса, я могу только определить, как его получит мой код.
Одним из параметров является дата, отправленная в формате дд/мм/гггг, например:
Код: Выделить всё
?ParamA=123&ParamB=456&Date=09/10/2025&Time=12:30:00
Я пытаюсь:
- Принять дату в формате дд/мм/гггг
- Сохранять поле с типом даты в модели и схеме OpenAPI.
- Разрешить другим наследовать базовую модель и добавлять/переопределять поля.
- Избегайте синтаксического анализа параметров запроса вручную в каждой конечной точке.
- Обрабатывайте этот формат корректно, поскольку я не могу изменить способ веб-перехватчика. отправляет его
Пример расширения базовой модели:
Код: Выделить всё
from datetime import datetime, date, time
from pydantic import BaseModel, Field, field_validator
from fastapi import FastAPI, Depends
app = FastAPI()
class BaseWebhookModel(BaseModel):
date_field: date = Field(alias="Date")
@field_validator("date_field", mode="before")
def parse_date_field(cls, v):
if isinstance(v, str):
return datetime.strptime(v, "%d/%m/%Y").date()
return v
# Example of extending the base model
class WebhookModel(BaseWebhookModel):
extra_field: str = Field(alias="ExtraField")
status: str = Field(alias="Status")
@app.get("/test")
def test_api(param: WebhookModel = Depends()):
return {"param": param}
Код: Выделить всё
/test?Date=09/10/2025&ExtraField=foo&Status=bar
Код: Выделить всё
{
"detail": [
{
"type": "date_from_datetime_parsing",
"loc": ["query", "Date"],
"msg": "Input should be a valid date or datetime, invalid character in year",
"input": "09/10/2025",
"ctx": {"error": "invalid character in year"}
}
]
}
Код: Выделить всё
date_field: date = Field(Query(alias="Date"))
Подробнее здесь: https://stackoverflow.com/questions/797 ... erited-mod
Мобильная версия