API: blueprint flask-smorest + endpoint /health (#78)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Colin Maudry
2026-05-13 13:52:06 +02:00
parent f12ada2fac
commit f24d0ba168
3 changed files with 50 additions and 1 deletions
+20 -1
View File
@@ -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)
+14
View File
@@ -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"}
+16
View File
@@ -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"}