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:
+19
-1
@@ -148,5 +148,23 @@ class MockState:
|
||||
self.fail_next = False
|
||||
|
||||
|
||||
# Глобальный синглтон
|
||||
# ── Мульти-стенд: состояние на каждый стенд ──
|
||||
|
||||
_states = {}
|
||||
|
||||
|
||||
def get_state(stand_id):
|
||||
"""Получить (или создать лениво) MockState для стенда."""
|
||||
if stand_id not in _states:
|
||||
_states[stand_id] = MockState()
|
||||
return _states[stand_id]
|
||||
|
||||
|
||||
def reset_all():
|
||||
"""Сбросить ВСЕ стенды (для тестов)."""
|
||||
for s in _states.values():
|
||||
s.reset()
|
||||
|
||||
|
||||
# Глобальный синглтон (обратная совместимость)
|
||||
state = MockState()
|
||||
|
||||
Reference in New Issue
Block a user