import logging from injectable import load_injection_container from fastapi import FastAPI from app.config import get_settings from app.core.core import WebhookProcessor from app.util.logging import LoggingHandler, ExternalLoggingHandler class KarlApplication: def __init__(self) -> None: self._set_logging() app = FastAPI(title="Karl", version="0.1.0") self._set_routes(app) self._set_events(app) self._init_services() pass def _set_logging(self): logging.basicConfig(level=logging.INFO, handlers=[LoggingHandler()]) loggers = ( "uvicorn", "uvicorn.access", "uvicorn.error", "fastapi", "asyncio", "starlette", ) external_handler = ExternalLoggingHandler() for logger_name in loggers: logging_logger = logging.getLogger(logger_name) logging_logger.handlers = [external_handler] logging_logger.propagate = False def _set_routes(self, app: FastAPI): from app.core.router import router as core_router app.include_router(core_router) from app.api.v1 import router as api_v1_router app.include_router(api_v1_router, prefix="/api/v1", tags=["v1"]) pass def _set_events(self, app: FastAPI): pass def _init_services(self): logger = logging.getLogger(__name__) load_injection_container() webhook_service = WebhookProcessor() logger.info(webhook_service.health) def app(): return KarlApplication() if __name__ == "__main__": import uvicorn settings = get_settings() uvicorn.run( "app.main:app", factory=True, host=settings.app.host, port=settings.app.port, reload=settings.app.reload, log_config=None, )