""" Операции с инстансами 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