53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
"""
|
||
Операции с инстансами Nubes — получение списка и организации через API.
|
||
|
||
Используется:
|
||
- main.py → отображение инфраструктуры на главной
|
||
- api_test.py → список инстансов для выбора
|
||
- scenario.py → поиск refSvcId-инстансов
|
||
"""
|
||
|
||
from api.http_client import HttpClient
|
||
|
||
|
||
def get_instances(client):
|
||
"""GET /instances с пагинацией → ВСЕ инстансы пользователя.
|
||
|
||
pageSize=200 — максимум за один запрос (API лимит).
|
||
Остановка по len(batch) < pageSize — НЕ доверяет total из ответа.
|
||
|
||
Почему не доверяем total:
|
||
Бывали баги где API возвращал total=500, а реально инстансов 3.
|
||
Проверка по размеру страницы надёжнее.
|
||
|
||
Returns:
|
||
list[dict] — каждый dict содержит instanceUid, displayName, serviceId,
|
||
svc, explainedStatus, instanceConfigDtCreated и др."""
|
||
results = []
|
||
page = 1
|
||
page_size = 200
|
||
while True:
|
||
data = client.get("/instances", params={"pageSize": page_size, "page": page})
|
||
batch = data.get("results", []) or []
|
||
results.extend(batch)
|
||
# Если страница неполная — данных больше нет.
|
||
# Это надёжнее чем проверка page * pageSize >= total.
|
||
if len(batch) < page_size:
|
||
break
|
||
page += 1
|
||
return results
|
||
|
||
|
||
def get_organization(client):
|
||
"""Первый инстанс с serviceId=19 (Организация).
|
||
|
||
Организация всегда одна на пользователя — это его «корневой» инстанс.
|
||
Используется в UI: название организации, статус, ClientID.
|
||
|
||
Returns:
|
||
dict или None — инстанс организации или None если не найден."""
|
||
for inst in get_instances(client):
|
||
if inst.get("serviceId") == 19:
|
||
return inst
|
||
return None
|