diff --git a/src/fastapi_app/bin/__main__.py b/src/fastapi_app/bin/__main__.py index f7e51e9..82dab4d 100644 --- a/src/fastapi_app/bin/__main__.py +++ b/src/fastapi_app/bin/__main__.py @@ -1,17 +1,37 @@ +import asyncio import logging +import os -import uvicorn - -import lib.app.app as app_module -import lib.app.settings as app_settings +import lib.app as app logger = logging.getLogger(__name__) -app_instance = app_module.Application() -app = app_instance.create_app() -settings = app_settings.settings +async def run() -> None: + settings = app.Settings() + application = app.Application.from_settings(settings) + + try: + await application.start() + finally: + await application.dispose() + + +def main() -> None: + try: + asyncio.run(run()) + exit(os.EX_OK) + except SystemExit: + exit(os.EX_OK) + except app.ApplicationError: + exit(os.EX_SOFTWARE) + except KeyboardInterrupt: + logger.info("Exited with keyboard interruption") + exit(os.EX_OK) + except BaseException: + logger.exception("Unexpected error occurred") + exit(os.EX_SOFTWARE) if __name__ == "__main__": - uvicorn.run(app, host=settings.api.host, port=settings.api.port) + main() diff --git a/src/fastapi_app/lib/api/v1/handlers/__init__.py b/src/fastapi_app/lib/api/v1/handlers/__init__.py index e69de29..4df1385 100644 --- a/src/fastapi_app/lib/api/v1/handlers/__init__.py +++ b/src/fastapi_app/lib/api/v1/handlers/__init__.py @@ -0,0 +1,5 @@ +from .health import * + +__all__ = [ + "health_router", +] diff --git a/src/fastapi_app/lib/api/v1/schemas/__init__.py b/src/fastapi_app/lib/api/v1/schemas/__init__.py index e69de29..e8ff274 100644 --- a/src/fastapi_app/lib/api/v1/schemas/__init__.py +++ b/src/fastapi_app/lib/api/v1/schemas/__init__.py @@ -0,0 +1,6 @@ +from .entity import * + +__all__ = [ + "Healthy", + "Token", +] diff --git a/src/fastapi_app/lib/app/__init__.py b/src/fastapi_app/lib/app/__init__.py index e69de29..1118bb7 100644 --- a/src/fastapi_app/lib/app/__init__.py +++ b/src/fastapi_app/lib/app/__init__.py @@ -0,0 +1,11 @@ +from .app import Application +from .errors import * +from .settings import Settings + +__all__ = [ + "Application", + "Settings", + "ApplicationError", + "DisposeError", + "StartServerError", +] diff --git a/src/fastapi_app/lib/app/app.py b/src/fastapi_app/lib/app/app.py index 98aa680..f7d6b1c 100644 --- a/src/fastapi_app/lib/app/app.py +++ b/src/fastapi_app/lib/app/app.py @@ -6,10 +6,10 @@ import typing import fastapi import uvicorn +import lib.api.v1.handlers as api_v1_handlers import lib.app.errors as app_errors import lib.app.settings as app_settings import lib.app.split_settings as app_split_settings -import lib.api.v1.handlers as api_v1_handlers logger = logging.getLogger(__name__)