feat: support configured production API endpoint
This commit is contained in:
@@ -10,12 +10,12 @@ HttpClient:
|
||||
- raw_delete: DELETE без авторизации (для CMDB)
|
||||
|
||||
Функции автоопределения стенда:
|
||||
- detect_endpoint(token) — пробует dev→test стенды по токену
|
||||
- stand_name(endpoint) — "dev" / "test" по URL
|
||||
- detect_endpoint(token) — пробует настроенные API стенды по токену
|
||||
- stand_name(endpoint) — "dev" / "test" по URL
|
||||
- create_client(token) — HttpClient + endpoint одним вызовом
|
||||
|
||||
Зачем автоопределение: пользователь вводит токен, мы не знаем dev это или test.
|
||||
Пробуем оба стенда — какой ответит с results != None, тот и рабочий.
|
||||
Зачем автоопределение: пользователь вводит токен, мы не знаем его стенд.
|
||||
Пробуем настроенные URL — какой ответит с results != None, тот и рабочий.
|
||||
"""
|
||||
|
||||
import requests
|
||||
@@ -28,8 +28,8 @@ STANDS = [
|
||||
]
|
||||
|
||||
|
||||
def detect_endpoint(token):
|
||||
"""Пробуем токен против dev и test стендов, возвращаем рабочий URL.
|
||||
def detect_endpoint(token, endpoints=None):
|
||||
"""Пробуем токен против заданных API стендов, возвращаем рабочий URL.
|
||||
|
||||
Алгоритм:
|
||||
1. Для каждого стенда создаём HttpClient + делаем GET /instances?pageSize=1.
|
||||
@@ -40,7 +40,7 @@ def detect_endpoint(token):
|
||||
Почему results != None а не просто HTTP 200:
|
||||
API может вернуть 200 с пустым списком (нет инстансов) — это норм.
|
||||
results=None — признак что ответ не соответствует ожидаемой структуре."""
|
||||
for ep in STANDS:
|
||||
for ep in endpoints or STANDS:
|
||||
try:
|
||||
c = HttpClient(ep, token)
|
||||
data = c.get("/instances", params={"pageSize": 1, "page": 1})
|
||||
|
||||
Reference in New Issue
Block a user