Source code for rail_pz_service.db.cli.admin_options

"""Options for rail_admin CLI"""

from collections.abc import Callable
from functools import wraps
from typing import Any, cast

from click.decorators import FC

# using safir to set things up
# from safir.database import create_database_engine
# setting stuff up directly from sqlalchemy
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine

from ...config import config as db_config


def _make_engine() -> AsyncEngine:
    # engine = create_database_engine(db_config.database_url,
    # db_config.database_password)
    engine = create_async_engine(db_config.db.url)
    return engine


[docs] def db_engine() -> Callable[[FC], FC]: """Pass a freshly constructed DB session to a decorated click Command without adding/requiring a corresponding click Option""" def decorator(f: FC) -> FC: @wraps(f) def wrapper(*args: Any, **kwargs: Any) -> Any: kwargs["db_engine"] = _make_engine return f(*args, **kwargs) return cast(FC, wrapper) return decorator