Files
polygon/site/app.py
T

67 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
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"""<!DOCTYPE html>
<html lang="ru">
<head><meta charset="utf-8"><title>polygon v{VERSION}</title>
<style>body{{font-family:system-ui;max-width:600px;margin:40px auto;padding:0 20px;background:#111;color:#eee}}
h1{{color:#4af}} .ok{{color:#4a4}} .ver{{color:#888}}</style></head>
<body>
<h1>polygon <span class="ver">v{VERSION}</span></h1>
<p class="ok">● running</p>
<p>Mock Nubes API — эмулятор REST API облачной платформы.</p>
<p>Эндпоинты: <code>/api/v1/svc/*</code></p>
<p>Сброс: <code>POST /api/v1/svc/_mock/reset</code></p>
</body></html>"""
# ---------------------------------------------------------------------------
# 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)