feat: configure cloud API endpoints by stand
This commit is contained in:
+14
-10
@@ -11,7 +11,7 @@ HttpClient:
|
||||
|
||||
Функции автоопределения стенда:
|
||||
- detect_endpoint(token) — пробует настроенные API стенды по токену
|
||||
- stand_name(endpoint) — "dev" / "test" по URL
|
||||
- stand_name(endpoint) — возвращает имя стенда по URL
|
||||
- create_client(token) — HttpClient + endpoint одним вызовом
|
||||
|
||||
Зачем автоопределение: пользователь вводит токен, мы не знаем его стенд.
|
||||
@@ -20,12 +20,16 @@ HttpClient:
|
||||
|
||||
import requests
|
||||
|
||||
# Список стендов для автоопределения.
|
||||
# Порядок ВАЖЕН: dev первый — он быстрее (меньше нагрузка), test — резервный.
|
||||
STANDS = [
|
||||
"https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc",
|
||||
"https://lk-api-gateway-test.ngcloud.ru/api/v1/svc",
|
||||
]
|
||||
# Источник истины для URL облачных API. Меняй значения здесь и передеплой,
|
||||
# а не через NUBES_API_ENDPOINT в параметрах сервиса.
|
||||
API_ENDPOINTS = {
|
||||
"dev": "https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc",
|
||||
"test": "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc",
|
||||
"prod": "https://lk-api-gateway.ngcloud.ru/api/v1/svc",
|
||||
}
|
||||
DEFAULT_STAND = "test"
|
||||
DEFAULT_ENDPOINT = API_ENDPOINTS[DEFAULT_STAND]
|
||||
STANDS = list(API_ENDPOINTS.values())
|
||||
|
||||
|
||||
def detect_endpoint(token, endpoints=None):
|
||||
@@ -54,8 +58,8 @@ def detect_endpoint(token, endpoints=None):
|
||||
def stand_name(endpoint):
|
||||
"""Определить имя стенда по URL — точное совпадение endpoint.
|
||||
|
||||
Возвращает 'dev'/'test' или '?' если не совпало."""
|
||||
for name, url in (("dev", STANDS[0]), ("test", STANDS[1])):
|
||||
Возвращает имя стенда или '?' если URL неизвестен."""
|
||||
for name, url in API_ENDPOINTS.items():
|
||||
if (endpoint or "").rstrip("/") == url.rstrip("/"):
|
||||
return name
|
||||
return "?"
|
||||
@@ -64,7 +68,7 @@ def stand_name(endpoint):
|
||||
def create_client(token, fallback_endpoint=None):
|
||||
"""HttpClient с автоопределением стенда.
|
||||
|
||||
Сначала detect_endpoint(token) — dev→test.
|
||||
Сначала detect_endpoint(token) — dev→test→prod.
|
||||
Если не сработало — fallback_endpoint (из конфига).
|
||||
Возвращает (HttpClient, endpoint_url) или None."""
|
||||
ep = detect_endpoint(token) or fallback_endpoint
|
||||
|
||||
Reference in New Issue
Block a user