Add organizations v2 API and registry enrichment
This commit is contained in:
79
check_organizations_v2_api.py
Normal file
79
check_organizations_v2_api.py
Normal file
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Smoke-check organizations API v2 list and detail endpoints."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
from typing import Any
|
||||
from urllib.error import HTTPError, URLError
|
||||
from urllib.parse import urlencode, urlparse
|
||||
from urllib.request import Request, urlopen
|
||||
|
||||
|
||||
def request_json(url: str) -> dict[str, Any]:
|
||||
parsed_url = urlparse(url)
|
||||
if parsed_url.scheme not in {"http", "https"}:
|
||||
raise RuntimeError(f"Unsupported URL scheme for {url}")
|
||||
|
||||
request = Request(url, headers={"Accept": "application/json"}) # noqa: S310
|
||||
try:
|
||||
with urlopen(request, timeout=30) as response: # noqa: S310
|
||||
body = response.read().decode("utf-8")
|
||||
except HTTPError as exc:
|
||||
detail = exc.read().decode("utf-8", errors="replace")
|
||||
raise RuntimeError(f"GET {url} failed: HTTP {exc.code}: {detail}") from exc
|
||||
except URLError as exc:
|
||||
raise RuntimeError(f"GET {url} failed: {exc.reason}") from exc
|
||||
|
||||
return json.loads(body)
|
||||
|
||||
|
||||
def first_result_uid(payload: dict[str, Any]) -> str:
|
||||
data = payload.get("data")
|
||||
if not isinstance(data, list) or not data:
|
||||
raise RuntimeError("List response does not contain any organizations in data")
|
||||
|
||||
uid = data[0].get("uid")
|
||||
if not isinstance(uid, str) or not uid:
|
||||
raise RuntimeError("First organization does not contain uid")
|
||||
return uid
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Send GET list and GET item requests to organizations API v2."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--base-url",
|
||||
default="http://127.0.0.1:8000",
|
||||
help="Backend base URL, default: http://127.0.0.1:8000",
|
||||
)
|
||||
parser.add_argument("--page-size", type=int, default=1)
|
||||
args = parser.parse_args()
|
||||
|
||||
base_url = args.base_url.rstrip("/")
|
||||
query = urlencode({"page_size": args.page_size})
|
||||
list_url = f"{base_url}/api/v2/organizations/?{query}"
|
||||
|
||||
print(f"GET list: {list_url}")
|
||||
list_payload = request_json(list_url)
|
||||
print(json.dumps(list_payload, ensure_ascii=False, indent=2))
|
||||
|
||||
uid = first_result_uid(list_payload)
|
||||
item_url = f"{base_url}/api/v2/organizations/{uid}/"
|
||||
|
||||
print(f"\nGET item: {item_url}")
|
||||
item_payload = request_json(item_url)
|
||||
print(json.dumps(item_payload, ensure_ascii=False, indent=2))
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
raise SystemExit(main())
|
||||
except RuntimeError as exc:
|
||||
print(exc, file=sys.stderr)
|
||||
raise SystemExit(1) from exc
|
||||
Reference in New Issue
Block a user