Pydantic: как извлечь схему из вложенного dict?
У меня есть словарь с конфигурациями базы данных (ключ databases
)(ServiceDatabase
а также OtherDatabase
) и хотите разделить его на две разные подмодели внутри. Пример:
from dataclasses import asdict
from typing import *
frompydantic.dataclasses import dataclass
@dataclass
class ServiceDatabase:
connect_string: str
@dataclass
class OtherDatabase:
connect_string: str
service: str
@dataclass
class PydConfigurator:
""" Instead of the forward assignment as below,
I want implementation with Pydantic options or field or
any other object
"""
databases: List[Union[ServiceDatabase, OtherDatabase]]
service_db: ServiceDatabase = None
other_db: OtherDatabase = None
def __post_init__(self):
self.service_db = self.databases[0]
self.other_db = self.databases[1]
data = {
"databases": {
"service_db": {
"connect_string": "postgresql://{user}:{password}@{host}:{port}/{db_name}"
},
"other_db": {
"connect_string": "postgresql://{user}:{password}@{host}:{port}/{db_name}",
"service": "Any"
}
}
}
if __name__ == '__main__':
# Example usage:
config = PydConfigurator(**data)
assert asdict(config.service_db) == data['databases']['service_db']
И я хочу реализовать это с помощью функционала Options или Schema pydantic. На мой взгляд, это было бы что-то вродеservice_db = Field(schema=ServiceDatabase, extract_from='database')