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("")