diff --git a/etebase_fastapi/main.py b/etebase_fastapi/main.py index 2c10854..706081a 100644 --- a/etebase_fastapi/main.py +++ b/etebase_fastapi/main.py @@ -12,28 +12,30 @@ from .member import member_router from .invitation import invitation_incoming_router, invitation_outgoing_router from .msgpack import MsgpackResponse -app = FastAPI() -VERSION = "v1" -BASE_PATH = f"/api/{VERSION}" -COLLECTION_UID_MARKER = "{collection_uid}" -app.include_router(authentication_router, prefix=f"{BASE_PATH}/authentication", tags=["authentication"]) -app.include_router(collection_router, prefix=f"{BASE_PATH}/collection", tags=["collection"]) -app.include_router(item_router, prefix=f"{BASE_PATH}/collection/{COLLECTION_UID_MARKER}", tags=["item"]) -app.include_router(member_router, prefix=f"{BASE_PATH}/collection/{COLLECTION_UID_MARKER}", tags=["member"]) -app.include_router(invitation_incoming_router, prefix=f"{BASE_PATH}/invitation/incoming", tags=["incoming invitation"]) -app.include_router(invitation_outgoing_router, prefix=f"{BASE_PATH}/invitation/outgoing", tags=["outgoing invitation"]) - -if settings.DEBUG: - from etebase_fastapi.test_reset_view import test_reset_view_router - - app.include_router(test_reset_view_router, prefix=f"{BASE_PATH}/test/authentication") - -app.add_middleware( - CORSMiddleware, allow_origin_regex="https?://.*", allow_credentials=True, allow_methods=["*"], allow_headers=["*"] -) -app.add_middleware(TrustedHostMiddleware, allowed_hosts=settings.ALLOWED_HOSTS) - - -@app.exception_handler(CustomHttpException) -async def custom_exception_handler(request: Request, exc: CustomHttpException): - return MsgpackResponse(status_code=exc.status_code, content=exc.as_dict) +def create_application(prefix=""): + app = FastAPI() + VERSION = "v1" + BASE_PATH = f"{prefix}/api/{VERSION}" + COLLECTION_UID_MARKER = "{collection_uid}" + app.include_router(authentication_router, prefix=f"{BASE_PATH}/authentication", tags=["authentication"]) + app.include_router(collection_router, prefix=f"{BASE_PATH}/collection", tags=["collection"]) + app.include_router(item_router, prefix=f"{BASE_PATH}/collection/{COLLECTION_UID_MARKER}", tags=["item"]) + app.include_router(member_router, prefix=f"{BASE_PATH}/collection/{COLLECTION_UID_MARKER}", tags=["member"]) + app.include_router(invitation_incoming_router, prefix=f"{BASE_PATH}/invitation/incoming", tags=["incoming invitation"]) + app.include_router(invitation_outgoing_router, prefix=f"{BASE_PATH}/invitation/outgoing", tags=["outgoing invitation"]) + + if settings.DEBUG: + from etebase_fastapi.test_reset_view import test_reset_view_router + + app.include_router(test_reset_view_router, prefix=f"{BASE_PATH}/test/authentication") + + app.add_middleware( + CORSMiddleware, allow_origin_regex="https?://.*", allow_credentials=True, allow_methods=["*"], allow_headers=["*"] + ) + app.add_middleware(TrustedHostMiddleware, allowed_hosts=settings.ALLOWED_HOSTS) + + + @app.exception_handler(CustomHttpException) + async def custom_exception_handler(request: Request, exc: CustomHttpException): + return MsgpackResponse(status_code=exc.status_code, content=exc.as_dict) + return app diff --git a/etebase_server/asgi.py b/etebase_server/asgi.py index 92fad1c..25dbf77 100644 --- a/etebase_server/asgi.py +++ b/etebase_server/asgi.py @@ -7,7 +7,9 @@ django_application = get_asgi_application() def create_application(): - from etebase_fastapi.main import app + from etebase_fastapi.main import create_application + + app = create_application() app.mount("/", django_application)