Пидантическая модель для представления даты и времени как даты и времени.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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Пидантическая модель для представления даты и времени как даты и времени.
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Пидантическая модель для представления даты и времени как даты и времени.
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Пидантическая проблема с длиной кортежа
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Пидантическая зависимая схема
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Пидантическая проблема с длиной кортежа
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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