Сериализуйте только определенное поле из класса данных stdlib и примените ограничения значений в схеме pydantic.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сериализуйте только определенное поле из класса данных stdlib и примените ограничения значений в схеме pydantic.

Сообщение Anonymous »

У меня есть следующий стандартный класс данных Python:

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

@dataclass
class Field:
offset: Offset
chunk: bytearray
value: bytes = field(init=False)
и теперь я хотел бы создать pydantic схему и заполнить ее такими объектами, например:

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

from pydantic import Field as PydanticField  # to distinguish those two

class Container(BaseModel):
field_1: Annotated[str, Field] = PydanticField(max_length=5)
field_2: [int, Field] = PydanticField(le=10)
но проблема в том, что каждый раз, когда я пытаюсь заполнить эту модель, я получаю:

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

 {'type': 'string_type', 'loc': ('response', 'field_1'), 'msg': 'Input should be a valid string', 'input': Field(offset=Offset(), value='something'}
Мне удалось частично решить проблему, создав следующую схему:

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

class OriginalField(BaseModel):
value: Any

class Container(BaseModel):
field_1: Annotated[str, OriginalField]
field_2: Annotated[int, OriginalField]
и он действительно работает, анализирует значения полей, как и предполагалось, но в схеме json field_2 значение рассматривается как строка, а не целое число, и я теряю возможность добавить проверку поля в каждое поле. Я предполагаю, что это можно сделать с помощью специальных методов, декорированных @field_validator, но мне не хочется связывать каждое поле с методом проверки, поскольку это может очень быстро стать утомительным.< /p>
Подведем итог: я хотел бы сериализовать экземпляры классов данных во время проверки модели pydantic таким образом, чтобы учитывалось только поле Field.value, без фрагмента или смещения. и, кроме того, я хочу иметь возможность указывать некоторые ограничения для каждого поля схемы. Последний представленный подход каким-то образом работает, но только в отношении анализа экземпляра класса данных в модели pydantic, теряя возможность добавлять ограничения к полям.
Python 3.12, pydantic 2.10.4

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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