6033967e6a
Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm packaging, API contract packs, and pytest/Pulumi coverage labs.
77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
"""Generate example values from Proxmox contract schemas."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from app.contracts.model import Schema
|
|
|
|
_PATH_PARAM_EXAMPLES: dict[str, object] = {
|
|
"node": "pve01",
|
|
"vmid": 100,
|
|
"storage": "local",
|
|
"pool": "testpool",
|
|
"userid": "root@pam",
|
|
"tokenid": "automation",
|
|
"realm": "pam",
|
|
"group": "admins",
|
|
"role": "Administrator",
|
|
"upid": "UPID:pve01:00000001:00000001:65000001:qmstart:100:root@pam:",
|
|
"snapname": "snap1",
|
|
"volume": "local:100/vm-100-disk-0.qcow2",
|
|
"disk": "scsi0",
|
|
"iface": "net0",
|
|
"key": "cpu",
|
|
"digest": "00000000",
|
|
"name": "example",
|
|
}
|
|
|
|
|
|
def path_param_example(name: str) -> object | None:
|
|
"""Return a realistic placeholder for a common Proxmox path parameter."""
|
|
|
|
return _PATH_PARAM_EXAMPLES.get(name)
|
|
|
|
|
|
def schema_example(schema: Schema, *, name: str | None = None) -> object:
|
|
"""Build a representative example value for a contract schema."""
|
|
|
|
if schema.default is not None:
|
|
return schema.default
|
|
if schema.enum:
|
|
return schema.enum[0]
|
|
if name is not None:
|
|
hinted = path_param_example(name)
|
|
if hinted is not None:
|
|
return hinted
|
|
if "[n]" in name:
|
|
indexed = name.replace("[n]", "0")
|
|
hinted = path_param_example(indexed.rstrip("0123456789"))
|
|
if hinted is not None:
|
|
return hinted
|
|
if schema.type == "array":
|
|
if schema.items is not None:
|
|
return [schema_example(schema.items)]
|
|
return []
|
|
if schema.type == "object":
|
|
return {
|
|
key: schema_example(definition, name=key)
|
|
for key, definition in schema.properties.items()
|
|
if not definition.optional
|
|
}
|
|
if schema.type == "boolean":
|
|
return False
|
|
if schema.type == "integer":
|
|
if schema.minimum is not None:
|
|
return int(schema.minimum)
|
|
return 1
|
|
if schema.type == "number":
|
|
if schema.minimum is not None:
|
|
return float(schema.minimum)
|
|
return 1.0
|
|
if schema.type == "string" or schema.type is None:
|
|
if schema.format == "email":
|
|
return "user@example.com"
|
|
if schema.format == "uri":
|
|
return "https://example.com"
|
|
return "example"
|
|
return None
|