Pydantic, two-way mapping

With Pydantic we can build full-fledged two-way mapping using aliases and allow_population_by_field_name setting in Config

Here is the model

from pydantic import BaseModel, Field

class Item(BaseModel):
    item_id: str
    is_available: bool = Field(alias='isAvailable')
        
    class Config:
        allow_population_by_field_name = True

Thanks to allow_population_by_field_name, we can use both field name and alias to create new objects:

item1 = Item(item_id='test-item-id', is_available=True)
item2 = Item(item_id='test-item-id', isAvailable=True)
print(item1)
print(item2)

# Item(item_id='test-item-id', is_available=True),
# Item(item_id='test-item-id', is_available=True),

And here how we can get dictionary with field names and aliases:

print(item1.dict())
print(item1.dict(by_alias=True))

# {'item_id': 'test-item-id', 'is_available': True}
# {'item_id': 'test-item-id', 'isAvailable': True}
Written on April 12, 2021