diff --git a/autosubmit_api/app.py b/autosubmit_api/app.py index eb747403fd5585285e0f0059fa6571e069bffd8e..334933a15f72e37e321acffde79af57fd153cc38 100644 --- a/autosubmit_api/app.py +++ b/autosubmit_api/app.py @@ -19,7 +19,9 @@ from autosubmit_api.config import ( ) from autosubmit_api.views import handle_HTTP_exception, home from werkzeug.exceptions import HTTPException - +from fastapi import FastAPI +from fastapi.middleware.wsgi import WSGIMiddleware +from contextlib import asynccontextmanager def create_app(): """ @@ -87,3 +89,15 @@ def create_app(): app.register_error_handler(HTTPException, handle_HTTP_exception) return app + + +@asynccontextmanager +async def lifespan(app: FastAPI): + # Startup + flask_app = create_app() + app.mount("/", WSGIMiddleware(flask_app), name="flask") + yield + # Shutdown + + +app = FastAPI(lifespan=lifespan) diff --git a/autosubmit_api/cli.py b/autosubmit_api/cli.py index 4b3d1453b46f40afed8a17fbcf6201775b850c2d..48d8246c294acaac667a7a4f4174b6040ba21343 100644 --- a/autosubmit_api/cli.py +++ b/autosubmit_api/cli.py @@ -51,6 +51,7 @@ def start_app_gunicorn( "preload_app": True, "capture_output": True, "timeout": 600, + "worker_class": "uvicorn.workers.UvicornWorker" } if bind and len(bind) > 0: options["bind"] = bind @@ -77,7 +78,7 @@ def start_app_gunicorn( if keepalive and keepalive > 0: options["keepalive"] = keepalive - g_app = StandaloneApplication("autosubmit_api.app:create_app()", options) + g_app = StandaloneApplication("autosubmit_api.app:app", options) print("Starting with gunicorn options: " + str(g_app.options)) g_app.run() diff --git a/setup.py b/setup.py index 8d83ad370c5beb3a86fb59e3b9c8ae291f114974..019d1f778d9249db6119a166d26b1c5bcdf4a8b2 100644 --- a/setup.py +++ b/setup.py @@ -20,6 +20,7 @@ def get_authors(): install_requires = [ + "fastapi==0.115.0", "Flask~=2.2.5", "pyjwt~=2.8.0", "requests~=2.28.1",