67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
"""
|
||
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)
|