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')

0 ответов

Другие вопросы по тегам