56 lines
2.8 KiB
Python
56 lines
2.8 KiB
Python
"""
|
||
polygon v0.2.1 — Mock Nubes API.
|
||
Эмулятор REST API облачной платформы Nubes для интеграционных тестов.
|
||
|
||
Blueprint'ы (каждый — отдельный файл в routes/):
|
||
- root_bp → /health, / (HTML-страница)
|
||
- services_bp → /api/v1/svc/services, /services/<id>
|
||
- instances_bp → /api/v1/svc/instances (GET list, GET detail, POST create)
|
||
- operations_bp → /api/v1/svc/instanceOperations/* (create, default, status, params, validate)
|
||
- run_bp → /api/v1/svc/instanceOperations/<uid>/run
|
||
- mock_bp → /api/v1/svc/_mock/* (reset, state, services, delay)
|
||
|
||
Деплой: Nubes pythonk8s (managed service) с gunicorn:
|
||
gunicorn app:app --workers 1 --bind 0.0.0.0:8000
|
||
⛔ РОВНО 1 ВОРКЕР — состояние в памяти, не shared между процессами.
|
||
|
||
Переменные окружения:
|
||
MOCK_OP_DELAY — задержка операции в секундах (по умолчанию 0.1)
|
||
WEB_CONCURRENCY — число gunicorn-воркеров (принудительно 1)
|
||
"""
|
||
|
||
import os
|
||
|
||
from flask import Flask
|
||
|
||
# ⛔ Принудительно 1 воркер — состояние в памяти, иначе инстансы теряются.
|
||
# setdefault не перезапишет если Nubes/Procfile уже выставил WEB_CONCURRENCY=1.
|
||
os.environ.setdefault("WEB_CONCURRENCY", "1")
|
||
|
||
# Импорт blueprint'ов — каждый отвечает за свою группу маршрутов
|
||
from routes.root import bp as root_bp
|
||
from routes.services_routes import bp as services_bp
|
||
from routes.instances_routes import bp as instances_bp
|
||
from routes.operations_routes import bp as operations_bp
|
||
from routes.run import bp as run_bp
|
||
from routes.mock_routes import bp as mock_bp
|
||
|
||
VERSION = "0.2.1"
|
||
|
||
# Flask-приложение с Jinja2-шаблонами и статикой
|
||
app = Flask(__name__, template_folder="templates", static_folder="static")
|
||
|
||
# Регистрируем blueprint'ы.
|
||
# Префиксы уже заданы в url_prefix каждого blueprint'а (кроме root — он без префикса).
|
||
app.register_blueprint(root_bp) # /health, /
|
||
app.register_blueprint(services_bp) # /api/v1/svc/services
|
||
app.register_blueprint(instances_bp) # /api/v1/svc/instances
|
||
app.register_blueprint(operations_bp) # /api/v1/svc/instanceOperations + /instanceOperationCfsParams
|
||
app.register_blueprint(run_bp) # /api/v1/svc/instanceOperations/<uid>/run
|
||
app.register_blueprint(mock_bp) # /api/v1/svc/_mock/*
|
||
|
||
|
||
# Локальный запуск (без gunicorn) — только для разработки
|
||
if __name__ == "__main__":
|
||
app.run(debug=True, host="0.0.0.0", port=5000)
|