diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..57db88f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +# Python 3.12 +Flask>=3.0 +gunicorn>=21.2 +PyYAML>=6.0 diff --git a/site/app.py b/site/app.py new file mode 100644 index 0000000..c5815e9 --- /dev/null +++ b/site/app.py @@ -0,0 +1,66 @@ +""" +polygon v0.1.0 — Mock Nubes API. +Эмулятор REST API облачной платформы Nubes для интеграционных тестов. + +Эндпоинты с префиксом /api/v1/svc притворяются реальным Nubes API. +Состояние инстансов/операций — в памяти (MockState). + +Деплой: Nubes pythonk8s (managed service) с gunicorn: + gunicorn app:app --workers 2 --bind 0.0.0.0:8000 +""" + +import os +from flask import Flask, jsonify, request + +# Версия полигона — независима от app-autotest +VERSION = "0.1.0" + +app = Flask(__name__, template_folder="templates", static_folder="static") + + +@app.route("/health") +def health(): + """Healthcheck для Nubes — всегда возвращает 200 OK.""" + return "OK" + + +@app.route("/") +def index(): + """Корневой эндпоинт — информация о сервисе (HTML).""" + return f""" + +polygon v{VERSION} + + +

polygon v{VERSION}

+

● running

+

Mock Nubes API — эмулятор REST API облачной платформы.

+

Эндпоинты: /api/v1/svc/*

+

Сброс: POST /api/v1/svc/_mock/reset

+""" + + +# --------------------------------------------------------------------------- +# Nubes API mock — префикс /api/v1/svc +# --------------------------------------------------------------------------- + +@app.route("/api/v1/svc/instances", methods=["GET"]) +def list_instances(): + """GET /instances — пока пустой список.""" + page_size = request.args.get("pageSize", 200, type=int) + return jsonify({ + "results": [], + "pageSize": min(page_size, 200), + }) + + +@app.route("/api/v1/svc/_mock/reset", methods=["POST"]) +def mock_reset(): + """Сброс состояния (пока ничего нет).""" + return jsonify({"reset": "ok"}) + + +# Локальный запуск (без gunicorn) — только для разработки +if __name__ == "__main__": + app.run(debug=True, host="0.0.0.0", port=5000)