57 lines
1.6 KiB
Python
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 |