Fix: 2-step create + run, paginated get_instances, v1.0.22

This commit is contained in:
2026-07-24 09:34:18 +04:00
parent 2ae1f5dd66
commit 2acb6aa8c9
3 changed files with 31 additions and 12 deletions
+21 -9
View File
@@ -93,12 +93,15 @@ def api_test():
payload = {"serviceId": svc_id, "displayName": display_name, "descr": "autotest"}
# cfsParams — отдельным шагом, не в POST /instances
resp = client.post("/instances", payload)
instance_uid = resp.get("instanceUid") or _find_uid(resp)
# Location header: /instances/{uid}
loc = resp.get("_location", "")
if not instance_uid and loc:
parts = loc.rstrip("/").split("/")
instance_uid = parts[-1] if len(parts[-1]) == 36 else None
instance_uid = resp.get("instanceUid") or _find_uid(resp) or _uid_from_location(resp.get("_location", ""))
# Шаг 2: запустить операцию create
if instance_uid:
op_resp = client.post("/instanceOperations", {"instanceUid": instance_uid, "operation": "create"})
# run
op_uid = _find_uid(op_resp) or _uid_from_location(op_resp.get("_location", ""))
if op_uid:
client.post(f"/instanceOperations/{op_uid}/run")
# wait
deadline = time.time() + 300
@@ -116,10 +119,11 @@ def api_test():
else:
if not instance_uid:
return jsonify({"status": "FAIL", "error": "Нет instanceUid"}), 400
payload = {"instanceUid": instance_uid, "svcOperationId": svc_op_id}
# все операции: {instanceUid, operation}
op_payload = {"instanceUid": instance_uid, "operation": op_name}
if params:
payload["cfsParams"] = [{"svcOperationCfsParamId": int(k), "paramValue": str(v)} for k, v in params.items()]
client.post("/instanceOperations", payload)
op_payload["cfsParams"] = [{"svcOperationCfsParamId": int(k), "paramValue": str(v)} for k, v in params.items()]
client.post("/instanceOperations", op_payload)
deadline = time.time() + 300
while time.time() < deadline:
@@ -149,3 +153,11 @@ def _find_uid(resp):
if isinstance(v, str) and len(v) == 36 and v.count("-") == 4:
return v
return None
def _uid_from_location(loc):
if loc:
parts = loc.rstrip("/").split("/")
if len(parts[-1]) == 36:
return parts[-1]
return None