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