From ccdfa1be18152e09ca9399ed8ba02025d5eb5221 Mon Sep 17 00:00:00 2001 From: ltenorio Date: Mon, 23 Sep 2024 17:21:17 +0200 Subject: [PATCH] wrap Flask app with FastAPI --- autosubmit_api/app.py | 16 +++++++++++++++- autosubmit_api/cli.py | 3 ++- setup.py | 1 + 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/autosubmit_api/app.py b/autosubmit_api/app.py index eb74740..334933a 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 4b3d145..48d8246 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 8d83ad3..019d1f7 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", -- GitLab