cbd0adca91
Stateful FastAPI lab with contract packs, Compose/Helm, Docker Hub release targets, and Pulumi coverage across all Engine series (GET/POST/PUT/DELETE/HEAD).
95 lines
2.9 KiB
Python
95 lines
2.9 KiB
Python
"""OpenAPI tag resolution for Engine API and simulator routes."""
|
|
|
|
from __future__ import annotations
|
|
|
|
_COLLECTION_LABELS: dict[str, str] = {
|
|
"vms": "VMs",
|
|
"disks": "Disks",
|
|
"hosts": "Hosts",
|
|
"clusters": "Clusters",
|
|
"datacenters": "Data Centers",
|
|
"networks": "Networks",
|
|
"vnicprofiles": "vNIC Profiles",
|
|
"storagedomains": "Storage Domains",
|
|
"storageconnections": "Storage Connections",
|
|
"templates": "Templates",
|
|
"users": "Users",
|
|
"groups": "Groups",
|
|
"roles": "Roles",
|
|
"permissions": "Permissions",
|
|
"domains": "Domains",
|
|
"events": "Events",
|
|
"jobs": "Jobs",
|
|
"tags": "Tags",
|
|
"bookmarks": "Bookmarks",
|
|
"affinitylabels": "Affinity Labels",
|
|
"instancetypes": "Instance Types",
|
|
"macpools": "MAC Pools",
|
|
"schedulingpolicies": "Scheduling Policies",
|
|
"schedulingpolicyunits": "Scheduling Policy Units",
|
|
"clusterlevels": "Cluster Levels",
|
|
"icons": "Icons",
|
|
"operatingsystems": "Operating Systems",
|
|
"networkfilters": "Network Filters",
|
|
"vmpools": "VM Pools",
|
|
"katelloerrata": "Katello Errata",
|
|
"externalhostproviders": "External Host Providers",
|
|
"openstacknetworkproviders": "OpenStack Network Providers",
|
|
"openstackimageproviders": "OpenStack Image Providers",
|
|
"openstackvolumeproviders": "OpenStack Volume Providers",
|
|
"imagetransfers": "Image Transfers",
|
|
"options": "Options",
|
|
}
|
|
|
|
|
|
def contract_openapi_tag(path: str) -> str:
|
|
"""Map an Engine API path to a Swagger UI category."""
|
|
|
|
parts = [part for part in path.strip("/").split("/") if part]
|
|
if parts[:2] == ["ovirt-engine", "api"]:
|
|
parts = parts[2:]
|
|
if parts and parts[0] in {"v3", "v4"}:
|
|
parts = parts[1:]
|
|
if not parts:
|
|
return "engine"
|
|
root = parts[0]
|
|
return _COLLECTION_LABELS.get(root, root.replace("-", " ").title())
|
|
|
|
|
|
def contract_openapi_tags(path: str, renderer: str | None = None) -> list[str]:
|
|
"""Return OpenAPI tags for a contract route.
|
|
|
|
``renderer`` is accepted for call-site compatibility; Engine API has a
|
|
single representation surface.
|
|
"""
|
|
|
|
del renderer
|
|
return [contract_openapi_tag(path)]
|
|
|
|
|
|
def openapi_tag_metadata() -> list[dict[str, str]]:
|
|
"""Descriptions shown in Swagger UI for each tag group."""
|
|
|
|
tags: list[dict[str, str]] = [
|
|
{
|
|
"name": "engine",
|
|
"description": "oVirt Engine REST API root under `/ovirt-engine/api`.",
|
|
},
|
|
{
|
|
"name": "sso",
|
|
"description": "Engine SSO OAuth2 token endpoints.",
|
|
},
|
|
{
|
|
"name": "Simulator",
|
|
"description": "Health checks, compatibility reports, and the web console.",
|
|
},
|
|
]
|
|
for label in sorted(set(_COLLECTION_LABELS.values())):
|
|
tags.append(
|
|
{
|
|
"name": label,
|
|
"description": f"Engine {label} collection under `/ovirt-engine/api`.",
|
|
}
|
|
)
|
|
return tags
|