chore: initial project scaffold and gitignore
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
"""Typer entrypoint for PortfolioHub."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from typing import Callable
|
||||
|
||||
import typer
|
||||
from rich.console import Console
|
||||
|
||||
from app.cli.commands.health import register_health_commands
|
||||
from app.cli.commands.portfolio import portfolio_app
|
||||
from app.core.config import Settings, get_settings
|
||||
from app.repositories.factory import get_portfolio_repository_from_settings
|
||||
from app.repositories.portfolio_repository import PortfolioRepository
|
||||
|
||||
|
||||
@dataclass
|
||||
class AppContext:
|
||||
settings: Settings
|
||||
output_format: str
|
||||
console: Console
|
||||
repository_factory: Callable[[Settings], PortfolioRepository]
|
||||
|
||||
|
||||
def create_app(
|
||||
*,
|
||||
settings_factory: Callable[[], Settings] = get_settings,
|
||||
repository_factory: Callable[[Settings], PortfolioRepository] = get_portfolio_repository_from_settings,
|
||||
) -> typer.Typer:
|
||||
app = typer.Typer(help="PortfolioHub command line interface.", no_args_is_help=True)
|
||||
|
||||
@app.callback()
|
||||
def main_callback(
|
||||
ctx: typer.Context,
|
||||
output_format: str = typer.Option("table", "--format", help="Output format: table or json."),
|
||||
) -> None:
|
||||
settings = settings_factory()
|
||||
console = Console(no_color=True, width=160)
|
||||
ctx.obj = AppContext(
|
||||
settings=settings,
|
||||
output_format=output_format,
|
||||
console=console,
|
||||
repository_factory=repository_factory,
|
||||
)
|
||||
|
||||
app.add_typer(portfolio_app, name="portfolio")
|
||||
register_health_commands(app)
|
||||
return app
|
||||
|
||||
|
||||
app = create_app()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
app()
|
||||
Reference in New Issue
Block a user