skip to Main Content

I want to validate JSON object (it is in Telegram Bot API) which contains from field (which is reserved word in Python) by using pydantic validator. So my model should look like the following:

class Message(BaseModel):
  message_id: int
  from: Optional[str]
  date: int
  chat: Any
  ...

But using from keyword is not allowed in this context.

How could I do this?

Note: this is different than “Why we can’t use keywords as attributes” because here we get external JSON we don’t control and we anyway should handle JSON with from field.

2

Answers


  1. I believe you can replace from with from_.

    You can do it like this:

    class Message(BaseModel):
        message_id: int
        from_: Optional[str]
        date: int
        chat: Any
    
        class Config:
            fields = {
            'from_': 'from'
            }
        ...
    
    Login or Signup to reply.
  2. There might be a way to do this using a class statement, but I didn’t see anything in a quick skim of the documentation. What you could do is use dynamic model creation instead.

    fields = {
        'message_id': (int,),
        'from': (Optional[str], ...),
        'date': (int, ...),
        'chat': (Any, ...)
     }
     Message = create_model("Message", **fields)
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search