假设我有获取 json 数据的 webhook。这个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]
但稍后在代码中我想扩展验证,因此要检查消息不仅是Message,而且是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不需要Message类型,而是dict。
我该怎么做?我如何对已经验证的(基本上)数据应用额外的验证?