Допустим, у меня есть webhook, где я получаю данные JSON.Этот json рекурсивно преобразуется с помощью pydantic.
@app.route("/", methods=['POST'])
async def telegram_webhook(request):
update = Update.parse_obj(request.json)
/* do something with update */
Я проверяю, что этот json минимальный действительный объект с обновлением моделью (которая внутренне содержит Сообщение модель):
class Update(BaseModel):
update_id: int
message: Message
...
class Message(BaseModel):
message_id: int
text: Optional[str]
Но позже в коде я хочу продлить проверку, чтобы проверить, что сообщение не только Сообщение , но TextMessage :
// text field now is required
class TextMessage(Message):
text: str
@validator('text')
def check_text_length(cls, value):
length = len(value)
if length > 4096:
raise ValueError(f'text length {length} is too large')
return value
Поэтому я передаю сообщение в функцию проверки
def process_text_message(message):
text_message = TextMessage.parse_obj(message)
Но я получаю ошибку, что pydantic не требует Тип сообщения , но dict .
Как бы я это сделал?Как я могу применить дополнительную проверку к уже проверенным (в основном) данным?