Files
mission-control/backend/.venv/lib/python3.12/site-packages/alembic/autogenerate/compare/schema.py
2026-02-01 22:25:28 +05:30

63 lines
1.7 KiB
Python

# mypy: allow-untyped-calls
from __future__ import annotations
import logging
from typing import Optional
from typing import Set
from typing import TYPE_CHECKING
from sqlalchemy import inspect
from ...util import PriorityDispatchResult
if TYPE_CHECKING:
from sqlalchemy.engine.reflection import Inspector
from ...autogenerate.api import AutogenContext
from ...operations.ops import UpgradeOps
from ...runtime.plugins import Plugin
log = logging.getLogger(__name__)
def _produce_net_changes(
autogen_context: AutogenContext, upgrade_ops: UpgradeOps
) -> PriorityDispatchResult:
connection = autogen_context.connection
assert connection is not None
include_schemas = autogen_context.opts.get("include_schemas", False)
inspector: Inspector = inspect(connection)
default_schema = connection.dialect.default_schema_name
schemas: Set[Optional[str]]
if include_schemas:
schemas = set(inspector.get_schema_names())
# replace default schema name with None
schemas.discard("information_schema")
# replace the "default" schema with None
schemas.discard(default_schema)
schemas.add(None)
else:
schemas = {None}
schemas = {
s for s in schemas if autogen_context.run_name_filters(s, "schema", {})
}
assert autogen_context.dialect is not None
autogen_context.comparators.dispatch(
"schema", qualifier=autogen_context.dialect.name
)(autogen_context, upgrade_ops, schemas)
return PriorityDispatchResult.CONTINUE
def setup(plugin: Plugin) -> None:
plugin.add_autogenerate_comparator(
_produce_net_changes,
"autogenerate",
)