Предположим, мне нужен валидатор контрольных сумм, который я могу повторно использовать в приложении. Система подсказок типов Python сильно изменилась в версии 3.9+, и это еще больше меня запутало. В pydantic v1 я создал подкласс str и реализовал методы классов __get_pydantic_core_schema__ и __get_validators__. В версии 2 некоторые из этих изменений изменены, и предпочтительный способ изменен на использование аннотированных типов.
В пакете pydantic-extra-types я нашел примеры, которые требуют понимания внутренней работы pydantic. Я могу скопировать и заставить что-то работать, но я бы предпочел найти «правильный» пользовательский способ сделать это, а не копировать без понимания.
В pydantic v2 похоже, что я могу сделать ограниченная строка как часть pydantic-класса, например
Код: Выделить всё
from typing import Annotated
from pydantic import BaseModel, StringConstraints
class GeneralThing(BaseModel):
special_string = Annotated[str, StringConstraints(pattern="^[a-fA-F0-9]{64}$")]
но это неверно (pydantic.errors.PydanticUserError: обнаружен неаннотированный атрибут). Кроме того, мне пришлось бы аннотировать каждое поле, которое я хочу ограничить, в отличие от Special_string = ChecksumStr, который я мог делать раньше.
Подробнее здесь:
https://stackoverflow.com/questions/772 ... ydantic-v2