Новое: - Селектор режима (🎭 Эмуляция / ☁️ Облако) над версией - Селектор стенда (DEV/TEST/PROD) в режиме эмуляции - В эмуляции — всё в полигон (/stand/api/v1/svc) - В эмуляции — токен дезактивирован - По умолчанию: эмуляция + TEST Изменено: - auth.py: get_mode(), get_polygon_stand(), get_client() с префиксом стенда - main.py: action=set_mode, единый get_client() вместо real_client/inst_client - index.html: селекторы, disable токена - service_list.py: обрезка polygon_ префикса - api_test.py: get_real_client → get_client Задокументировано в HISTORY/2026-08-03-session.md.
60 lines
2.6 KiB
Python
60 lines
2.6 KiB
Python
"""
|
||
Чтение списка разрешённых сервисов из services_{stand}.txt.
|
||
|
||
Зачем: не все сервисы должны быть доступны для тестирования.
|
||
Файл services_test.txt (или services_dev.txt) содержит только те сервисы,
|
||
которые настроены и готовы к автотестам.
|
||
|
||
Формат файла:
|
||
# Комментарий
|
||
1 dummy # Болванка
|
||
21 vdc # Virtual Data Center
|
||
|
||
Закомментированные (#) строки исключаются.
|
||
Пустые строки игнорируются.
|
||
Первое слово в строке — service_id (число).
|
||
|
||
Файл лежит в site/config/, пушится с кодом, деплоится вместе с приложением.
|
||
При изменении списка: edit → commit → push → redeploy.
|
||
"""
|
||
|
||
import os
|
||
import re
|
||
|
||
# Путь к папке config относительно этого файла:
|
||
# service_list.py → site/operations/
|
||
# dirname → site/operations
|
||
# dirname(dirname) → site
|
||
# + "config" → site/config
|
||
_CONFIG_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "config")
|
||
|
||
|
||
def load_service_ids(stand="test"):
|
||
"""Вернуть set разрешённых service_id для указанного стенда.
|
||
|
||
Args:
|
||
stand: str — "dev", "test", или "polygon_test" (с префиксом эмуляции).
|
||
|
||
Returns:
|
||
set[int] — множество service_id. Пустой set если файла нет → показываем все."""
|
||
# Обрезать префикс "polygon_" если есть → "polygon_test" → "test"
|
||
if stand.startswith("polygon_"):
|
||
stand = stand[len("polygon_"):]
|
||
path = os.path.join(_CONFIG_DIR, f"services_{stand}.txt")
|
||
ids = set()
|
||
try:
|
||
with open(path) as f:
|
||
for line in f:
|
||
line = line.strip()
|
||
# Пропускаем пустые строки и комментарии
|
||
if not line or line.startswith("#"):
|
||
continue
|
||
# Формат: "1 dummy # Болванка"
|
||
# Берём первое слово, проверяем что это число
|
||
parts = line.split()
|
||
if parts and parts[0].isdigit():
|
||
ids.add(int(parts[0]))
|
||
except FileNotFoundError:
|
||
pass # файла нет — возвращаем пустой set → показываем все сервисы
|
||
return ids
|