Source code for codegen_database.alembic.register
from __future__ import annotations
from typing import TYPE_CHECKING
from sqlalchemy_declarative_extensions.alembic import (
register_alembic_events,
)
from codegen_database.alembic.renderer import (
register_renderers,
render_item,
)
from codegen_database.alembic.rewriter import (
process_revision_directives,
)
from codegen_database.alembic.schema import register_schemas
from codegen_database.fk import validate_fks_resolved
from codegen_database.patches import apply_all
from codegen_database.pg_extension import (
register_default_pg_extensions,
register_pg_extension_alembic_events,
)
if TYPE_CHECKING:
from sqlalchemy import MetaData
from codegen_database.config import CodegenDatabaseConfig
__all__ = [
"alembic_hook",
"configure_metadata",
"process_revision_directives",
"render_item",
]
[docs]
def alembic_hook(
config: CodegenDatabaseConfig | None = None,
) -> None:
"""Register codegen_database's alembic extensions.
Call before importing models.
Usage in ``env.py``::
from codegen_database.alembic.register import (
alembic_hook,
configure_metadata,
process_revision_directives,
)
alembic_hook()
# ... import models / build metadata ...
configure_metadata(target_metadata)
Then pass ``process_revision_directives`` to
``context.configure(process_revision_directives=...)``.
Args:
config: Optional config providing extensions
whose ``configure_alembic()`` hooks will be
called.
"""
# This is from sqlalchemy-declarative-extensions
register_alembic_events()
# These are codegen_database specific
register_renderers()
apply_all()
# Always register the pg_extension comparator so that extensions declared
# via register_pg_extension (e.g. btree_gist by TemporalPlugin) are tracked
# in Alembic autogenerate regardless of which extensions are enabled.
register_pg_extension_alembic_events()
if config is not None:
for ext in config._resolved_extensions():
ext.configure_alembic()