Пидантическая модель для представления даты и времени как даты и времени.Python

Программы на Python
Anonymous
Пидантическая модель для представления даты и времени как даты и времени.

Сообщение Anonymous »

Я создал модель Pydantic для даты и времени, которая будет обрабатывать объект JSON, который выглядит как { "date": "2021-07-01", "time": "12:36:23" в дату и время (2021, 7, 1, 12, 36, 23). Он также генерирует правильную схему JSON для модели.

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

class TimestampWithSplit(RootModel):
root: datetime

@classmethod
def __get_pydantic_core_schema__(
cls, source: Type[Any], handler: GetCoreSchemaHandler
) -> core_schema.CoreSchema:
return core_schema.chain_schema(
[
core_schema.typed_dict_schema(
{
"date": core_schema.typed_dict_field(core_schema.date_schema()),
"time": core_schema.typed_dict_field(core_schema.time_schema()),
}
),
core_schema.no_info_plain_validator_function(cls.validate_to_datetime),
]
)

@staticmethod
def validate_to_datetime(value: dict) -> datetime:
return datetime.combine(value["date"], value["time"])
Сейчас я пытаюсь сделать две вещи:
  • Теперь я хочу добавить описания в сгенерированную схему JSON. . В настоящее время TimestampWithSplit.model_json_schema() возвращает

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

{'properties': {'date': {'format': 'date', 'title': 'Date', 'type': 'string'},
'time': {'format': 'time', 'title': 'Time', 'type': 'string'}},
'required': ['date', 'time'],
'type': 'object'}
и я хочу добавить

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

{'properties': {'date': {'format': 'date', 'title': 'Date', 'type': 'string', 'description': 'ISO format date, blah blah'},
'time': {'format': 'time', 'title': 'Time', 'type': 'string', 'description': 'ISO format time, blah blah'}},
'required': ['date', 'time'],
'type': 'object'}
  • Добавьте пользовательский валидатор для поля даты, чтобы он мог анализировать однозначные числа дня и месяца. Обычно я делаю это так:

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

    def validator(value: str):
try:
return datetime.strptime(value, "%Y-%m-%d").date()
except ValueError:
return None
и добавьте этот валидатор как обычный валидатор в поле. Но я не знаю, как включить это в то, что у меня есть.
Я иду по неправильному пути? Как мне получить модель, которая имеет дату и время в виде отдельных полей, но возвращает дату и время из model_validate_json, а также настраивает схему JSON и проверку даты?

Подробнее здесь: https://stackoverflow.com/questions/790 ... e-and-time

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