Source code for codegen_database.config

"""Global codegen_database configuration."""

from __future__ import annotations

from dataclasses import dataclass, field
from importlib.metadata import entry_points
from typing import TYPE_CHECKING

from codegen_database.extension import (
    validate_extension_deps,
)

if TYPE_CHECKING:
    from sqlalchemy import MetaData

    from codegen_database.extension import CodegenDatabaseExtension

DEFAULT_UTILITY_SCHEMA = "codegen_database"


[docs] @dataclass class CodegenDatabaseConfig: _extensions: set[CodegenDatabaseExtension] = field(default_factory=set) auto_discover: bool = True utility_schema: str = DEFAULT_UTILITY_SCHEMA def use( self, *extensions: CodegenDatabaseExtension, ) -> CodegenDatabaseConfig: self._extensions |= set(extensions) return self @property def extensions(self) -> set[CodegenDatabaseExtension]: extensions = self._extensions if self.auto_discover: extensions |= { entry_point.load() for entry_point in entry_points(group="codegen_database.ext") } validate_extension_deps(extensions) return extensions
def resolve_config(metadata: MetaData) -> CodegenDatabaseConfig: config = metadata.info.get("codegen_database_config") if not config: config = CodegenDatabaseConfig() metadata.info["codegen_database_config"] = config return config