INNER CODE UNIT · Python
validate
oneclickvirt/ecs · agent/server.py:32
def validate(value, spec, name="arguments"):
expected = spec.get("type")
if expected == "object":
if not isinstance(value, dict):
raise ValueError(name + " must be an object")
props = spec.get("properties", {})
if set(spec.get("required", [])) - value.keys():
raise ValueError(name + " has missing required fields")
if not spec.get("additionalProperties", True) and value.keys() - props.keys():
raise ValueError(name + " has unknown fields")
for key, data in value.items():
if key in props:
validate(data, props[key], key)
elif expected == "string":
maximum = min(512, spec.get("maxLength", 512))
if not isinstance(value, str) or len(value) > maximum:
raise ValueError(name + " must be a string of at most " + str(maximum) + " characters")
if "pattern" in spec and not re.fullmatch(spec["pattern"], value):