v0.5.0: 3 стенда — изоляция состояния, WSGI middleware, OpenAPI server selector, POLYGON_STANDS env
- loader.py: STANDS dict, get_services/get_ops_index per stand, POLYGON_STANDS env
- mock_state.py: get_state(stand_id) — ленивая инициализация
- app.py: StandMiddleware — перезапись PATH_INFO до Flask-роутинга
- Все роуты: LocalProxy(state), LocalProxy(SERVICES/OPS_INDEX) через g.stand_id
- openapi.py: _build_servers() — по одному серверу на стенд
- services/stand{1,2,3}/ — 37 YAML на стенд из STANDS/dev и STANDS/test
- tests/test_api.py: +4 multi-stand теста (изоляция, fail-next, OpenAPI servers)
- Обратная совместимость: /api/v1/svc/... → стенд по умолчанию
This commit is contained in:
@@ -10,10 +10,14 @@ Blueprint "instances" с префиксом /api/v1/svc/instances.
|
||||
HttpClient.post() в app-autotest достаёт instanceUid ИМЕННО из Location.
|
||||
"""
|
||||
|
||||
from flask import Blueprint, jsonify, make_response, request
|
||||
from flask import Blueprint, g, jsonify, make_response, request
|
||||
from werkzeug.local import LocalProxy
|
||||
|
||||
import mock_state
|
||||
from config.loader import SERVICES
|
||||
import config.loader as _cfg
|
||||
|
||||
state = LocalProxy(lambda: mock_state.get_state(g.stand_id))
|
||||
SERVICES = LocalProxy(lambda: _cfg.get_services(g.stand_id))
|
||||
|
||||
bp = Blueprint("instances", __name__, url_prefix="/api/v1/svc/instances")
|
||||
|
||||
@@ -32,7 +36,7 @@ def list_instances():
|
||||
"""
|
||||
page_size = request.args.get("pageSize", 200, type=int)
|
||||
page = request.args.get("page", 1, type=int)
|
||||
result = mock_state.state.list_instances(page_size=page_size, page=page)
|
||||
result = state.list_instances(page_size=page_size, page=page)
|
||||
return jsonify(result)
|
||||
|
||||
|
||||
@@ -45,7 +49,7 @@ def get_instance(uid):
|
||||
|
||||
Если инстанс не найден — 404 с JSON-ошибкой.
|
||||
"""
|
||||
inst = mock_state.state.get_instance(uid)
|
||||
inst = state.get_instance(uid)
|
||||
if not inst:
|
||||
return jsonify({"error": "instance not found"}), 404
|
||||
|
||||
@@ -81,7 +85,7 @@ def create_instance():
|
||||
return jsonify({"error": f"service {service_id} not found"}), 404
|
||||
|
||||
# Создать shell инстанса (статус "creating")
|
||||
uid = mock_state.state.create_instance(service_id, display_name, svc_def)
|
||||
uid = state.create_instance(service_id, display_name, svc_def)
|
||||
|
||||
# ⛔ Location ОБЯЗАТЕЛЕН — без него executor не получит instanceUid
|
||||
resp = make_response(jsonify({"instanceUid": uid}), 201)
|
||||
|
||||
Reference in New Issue
Block a user