Files
Birthday-Pool-Bot/birthday_pool_bot/cli.py

57 lines
1.6 KiB
Python

import asyncio
import pathlib
import sys
import typer
from loguru import logger
from .notifications import get_cli as get_notifications_cli
from .repositories import RepositoriesContainer
from .repositories.migrations import get_cli as get_migrations_cli
from .service import BirthdayPoolBotService
from .settings import Settings
from .telegram_bot import get_cli as get_telegram_bot_cli
def callback(
ctx: typer.Context,
env: pathlib.Path | None = typer.Option(
None,
"--env", "-e",
help="`.env` config file location",
),
):
ctx.obj = ctx.obj or {}
if (settings := ctx.obj.get("settings")) is None:
if env is not None:
ctx.obj["settings"] = Settings(_env_file=env)
else:
ctx.obj["settings"] = Settings()
settings = ctx.obj["settings"]
ctx.obj["repositories_container"] = RepositoriesContainer(settings=settings.repository)
logger.remove()
logger.add(sys.stdout, level=settings.logging.level, format=settings.logging.format)
def run(ctx: typer.Context):
settings: Settings = ctx.obj["settings"]
birthday_pool_bot_service = BirthdayPoolBotService(
settings=settings,
)
asyncio.run(birthday_pool_bot_service.run())
def get_cli() -> typer.Typer:
cli = typer.Typer()
cli.callback()(callback)
cli.add_typer(get_migrations_cli(), name="migrations")
cli.add_typer(get_telegram_bot_cli(), name="telegram-bot")
cli.add_typer(get_notifications_cli(), name="notifications")
cli.command(name="run")(run)
return cli