Source code for gitlab_overviewer.utils.read_api
1"""
2API data reading utilities.
3
4Implements :any:`/specs/spec_api_client` ยง1, covering:
5
6* Endpoint discovery and documentation
7* OpenAPI spec parsing
8
9"""
10
11import yaml
12from pathlib import Path
13from ..utils.logging import get_logger
14
15logger = get_logger(__name__)
16
17
[docs]
18def load_openapi_spec(path):
19 try:
20 with open(path, "r", encoding="utf-8") as f:
21 return yaml.safe_load(f)
22 except Exception as e:
23 logger.error("Fehler beim Laden der YAML: %s", e)
24 return {}
25
26
[docs]
27def extract_endpoints(spec):
28 paths = spec.get("paths", {})
29 endpoints = []
30
31 for path, path_item in paths.items():
32 for method, details in (path_item or {}).items():
33 if method.upper() not in {"GET", "POST", "PUT", "DELETE", "PATCH"}:
34 continue # keine HTTP-Methode
35
36 summary = details.get("summary", "")
37 params = details.get("parameters", [])
38
39 endpoint_info = {
40 "method": method.upper(),
41 "path": path,
42 "summary": summary,
43 "parameters": [
44 {
45 "name": p.get("name", "?"),
46 "in": p.get("in", "?"),
47 "required": p.get("required", False),
48 "type": (
49 p.get("schema", {}).get("type", "unknown")
50 if "schema" in p
51 else "unknown"
52 ),
53 }
54 for p in params
55 ],
56 }
57 endpoints.append(endpoint_info)
58 return endpoints
59
60
[docs]
61def display(endpoints):
62 for ep in endpoints:
63 logger.info("[%s] %s", ep["method"], ep["path"])
64 if ep["summary"]:
65 logger.info(" \u21aa %s", ep["summary"])
66 for p in ep["parameters"]:
67 logger.info(
68 " - Param: %s (in: %s, required: %s, type: %s)",
69 p["name"],
70 p["in"],
71 p["required"],
72 p["type"],
73 )
74 logger.info("")