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 "mock" с префиксом /api/v1/svc/_mock.
|
||||
|
||||
import os
|
||||
|
||||
from flask import Blueprint, jsonify, request, abort
|
||||
from flask import Blueprint, g, jsonify, request, abort
|
||||
from werkzeug.local import LocalProxy
|
||||
|
||||
import mock_state
|
||||
import config.loader as _cfg # для чтения/записи модульных переменных DELAY, 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("mock", __name__, url_prefix="/api/v1/svc/_mock")
|
||||
|
||||
@@ -44,7 +48,7 @@ def mock_reset():
|
||||
Удаляет ВСЕ инстансы, операции и параметры из MockState.
|
||||
Используется в тестах (autouse fixture) для изоляции тестов друг от друга.
|
||||
"""
|
||||
mock_state.state.reset()
|
||||
state.reset()
|
||||
return jsonify({"reset": "ok"})
|
||||
|
||||
|
||||
@@ -59,7 +63,7 @@ def mock_state_view():
|
||||
Полезно для отладки тестов: «какие инстансы сейчас живы?», «завершилась ли
|
||||
операция?». НЕ для production-использования.
|
||||
"""
|
||||
st = mock_state.state
|
||||
st = state
|
||||
return jsonify({
|
||||
"instances": {
|
||||
uid: {
|
||||
@@ -146,5 +150,5 @@ def mock_fail_next():
|
||||
После использования флаг сбрасывается (one-shot).
|
||||
Позволяет тестировать негативные сценарии.
|
||||
"""
|
||||
mock_state.state.fail_next = True
|
||||
state.fail_next = True
|
||||
return jsonify({"fail_next": True})
|
||||
|
||||
Reference in New Issue
Block a user