diff --git a/requirements.txt b/requirements.txt index dfe100b..9cad308 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ -flask==3.1.1 -flask-cors==6.0.1 +fastapi==0.115.6 +uvicorn==0.30.6 flexcache==0.3 flexparser==0.3.1 ipykernel==6.29.5 diff --git a/scripts/run_api.sh b/scripts/run_api.sh new file mode 100755 index 0000000..109fec2 --- /dev/null +++ b/scripts/run_api.sh @@ -0,0 +1 @@ +uvicorn harmonization_framework.api.app:app --reload diff --git a/scripts/run_flask.sh b/scripts/run_flask.sh deleted file mode 100755 index f27e785..0000000 --- a/scripts/run_flask.sh +++ /dev/null @@ -1,4 +0,0 @@ -export FLASK_APP=src/harmonization_framework/api/app.py -export FLASK_ENV=development - -flask run diff --git a/src/harmonization_framework/api/app.py b/src/harmonization_framework/api/app.py index 35ab300..d5548f4 100644 --- a/src/harmonization_framework/api/app.py +++ b/src/harmonization_framework/api/app.py @@ -1,11 +1,7 @@ -from flask import Flask -from harmonization_framework.api.extensions import register_extensions -from harmonization_framework.api.routes.health import health_blueprint +from fastapi import FastAPI -def create_app(config_name=None): - app = Flask(__name__, instance_relative_config=True) - - register_extensions(app) +from harmonization_framework.api.routes.health import router as health_router - app.register_blueprint(health_blueprint, url_prefix="/health") - return app +app = FastAPI(title="Harmonization Framework API") + +app.include_router(health_router, prefix="/health") diff --git a/src/harmonization_framework/api/extensions.py b/src/harmonization_framework/api/extensions.py deleted file mode 100644 index 6f65660..0000000 --- a/src/harmonization_framework/api/extensions.py +++ /dev/null @@ -1,4 +0,0 @@ -from flask_cors import CORS - -def register_extensions(app): - CORS(app) diff --git a/src/harmonization_framework/api/harmonization_api_examples.md b/src/harmonization_framework/api/harmonization_api_examples.md index 3a4851f..bc5de40 100644 --- a/src/harmonization_framework/api/harmonization_api_examples.md +++ b/src/harmonization_framework/api/harmonization_api_examples.md @@ -7,7 +7,7 @@ The following is a demo for using `curl` to interact with the Harmonization Fram ## Start API ```bash -./scripts/run_flask.sh +./scripts/run_api.sh ``` ## Example Usage diff --git a/src/harmonization_framework/api/routes/__init__.py b/src/harmonization_framework/api/routes/__init__.py index 30b3e31..58055d8 100644 --- a/src/harmonization_framework/api/routes/__init__.py +++ b/src/harmonization_framework/api/routes/__init__.py @@ -1,7 +1,7 @@ # src/api/routes/__init__.py -from .health import health_blueprint +from .health import router as health_router __all__ = [ - "health_blueprint", + "health_router", ] diff --git a/src/harmonization_framework/api/routes/health.py b/src/harmonization_framework/api/routes/health.py index 16cfdbd..46e2245 100644 --- a/src/harmonization_framework/api/routes/health.py +++ b/src/harmonization_framework/api/routes/health.py @@ -1,7 +1,14 @@ -from flask import Blueprint, jsonify +from fastapi import APIRouter +from pydantic import BaseModel -health_blueprint = Blueprint("health", __name__) +router = APIRouter() -@health_blueprint.route("/", methods=["GET"]) -def health_check(): - return jsonify(status="ok", message="API is available"), 200 + +class HealthResponse(BaseModel): + status: str + message: str + + +@router.get("/") +def health_check() -> HealthResponse: + return HealthResponse(status="ok", message="The harmonization API is available")