From f24d0ba168f98267c11b13a788839703c37985af Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Wed, 13 May 2026 13:52:06 +0200 Subject: [PATCH] API: blueprint flask-smorest + endpoint /health (#78) Co-Authored-By: Claude Sonnet 4.6 --- src/api/__init__.py | 21 ++++++++++++++++++++- src/api/routes.py | 14 ++++++++++++++ tests/api/test_health.py | 16 ++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/api/routes.py create mode 100644 tests/api/test_health.py diff --git a/src/api/__init__.py b/src/api/__init__.py index fff577c..4dd2e5b 100644 --- a/src/api/__init__.py +++ b/src/api/__init__.py @@ -1 +1,20 @@ -# decp.info — API privée. init_api(server) sera ajouté Task 6. +from flask_smorest import Api + +from src.api import routes + + +def init_api(server) -> None: + """Enregistre le blueprint d'API privée sur le serveur Flask.""" + server.config.setdefault("API_TITLE", "decp.info API") + server.config.setdefault("API_VERSION", "v1") + server.config.setdefault("OPENAPI_VERSION", "3.0.3") + server.config.setdefault("OPENAPI_URL_PREFIX", "/api/v1") + server.config.setdefault("OPENAPI_JSON_PATH", "openapi.json") + server.config.setdefault("OPENAPI_SWAGGER_UI_PATH", "swagger") + server.config.setdefault( + "OPENAPI_SWAGGER_UI_URL", + "https://cdn.jsdelivr.net/npm/swagger-ui-dist/", + ) + + api = Api(server) + api.register_blueprint(routes.bp) diff --git a/src/api/routes.py b/src/api/routes.py new file mode 100644 index 0000000..759ff1b --- /dev/null +++ b/src/api/routes.py @@ -0,0 +1,14 @@ +from flask_smorest import Blueprint + +bp = Blueprint( + "api_v1", + "api_v1", + url_prefix="/api/v1", + description="API privée decp.info — accès tabulaire aux marchés publics.", +) + + +@bp.route("/health") +def health(): + """Sonde de santé, sans authentification.""" + return {"status": "ok"} diff --git a/tests/api/test_health.py b/tests/api/test_health.py new file mode 100644 index 0000000..3bddbfd --- /dev/null +++ b/tests/api/test_health.py @@ -0,0 +1,16 @@ +from flask import Flask + +from src.api import init_api + + +def _make_app(): + app = Flask(__name__) + init_api(app) + return app + + +def test_health_returns_ok_without_auth(): + app = _make_app() + resp = app.test_client().get("/api/v1/health") + assert resp.status_code == 200 + assert resp.get_json() == {"status": "ok"}