2021-03-09 02:53:20 +01:00
|
|
|
"""Helpers to retrieve schema from voluptuous validators.
|
|
|
|
|
|
|
|
These are a helper decorators to help get schema from some
|
|
|
|
components which uses volutuous in a way where validation
|
|
|
|
is hidden in local functions
|
|
|
|
These decorators should not modify at all what the functions
|
|
|
|
originally do.
|
|
|
|
However there is a property to further disable decorator
|
|
|
|
impact."""
|
|
|
|
|
|
|
|
|
2021-03-08 01:05:08 +01:00
|
|
|
# This is set to true by script/build_jsonschema.py
|
|
|
|
# only, so data is collected (again functionality is not modified)
|
|
|
|
EnableJsonSchemaCollect = False
|
|
|
|
|
|
|
|
extended_schemas = {}
|
|
|
|
list_schemas = {}
|
|
|
|
registry_schemas = {}
|
|
|
|
hidden_schemas = {}
|
|
|
|
typed_schemas = {}
|
|
|
|
|
|
|
|
|
|
|
|
def jschema_extractor(validator_name):
|
|
|
|
if EnableJsonSchemaCollect:
|
|
|
|
|
|
|
|
def decorator(func):
|
|
|
|
hidden_schemas[str(func)] = validator_name
|
|
|
|
return func
|
|
|
|
|
|
|
|
return decorator
|
|
|
|
|
|
|
|
def dummy(f):
|
|
|
|
return f
|
|
|
|
|
|
|
|
return dummy
|
|
|
|
|
|
|
|
|
|
|
|
def jschema_extended(func):
|
|
|
|
if EnableJsonSchemaCollect:
|
|
|
|
|
|
|
|
def decorate(*args, **kwargs):
|
|
|
|
ret = func(*args, **kwargs)
|
|
|
|
assert len(args) == 2
|
|
|
|
extended_schemas[str(ret)] = args
|
|
|
|
return ret
|
|
|
|
|
|
|
|
return decorate
|
|
|
|
|
|
|
|
return func
|
|
|
|
|
|
|
|
|
|
|
|
def jschema_composite(func):
|
|
|
|
if EnableJsonSchemaCollect:
|
|
|
|
|
|
|
|
def decorate(*args, **kwargs):
|
|
|
|
ret = func(*args, **kwargs)
|
|
|
|
# args length might be 2, but 2nd is always validator
|
|
|
|
list_schemas[str(ret)] = args
|
|
|
|
return ret
|
|
|
|
|
|
|
|
return decorate
|
|
|
|
|
|
|
|
return func
|
|
|
|
|
|
|
|
|
|
|
|
def jschema_registry(registry):
|
|
|
|
if EnableJsonSchemaCollect:
|
|
|
|
|
|
|
|
def decorator(func):
|
|
|
|
registry_schemas[str(func)] = registry
|
|
|
|
return func
|
|
|
|
|
|
|
|
return decorator
|
|
|
|
|
|
|
|
def dummy(f):
|
|
|
|
return f
|
|
|
|
|
|
|
|
return dummy
|
|
|
|
|
|
|
|
|
|
|
|
def jschema_typed(func):
|
|
|
|
if EnableJsonSchemaCollect:
|
|
|
|
|
|
|
|
def decorate(*args, **kwargs):
|
|
|
|
ret = func(*args, **kwargs)
|
|
|
|
typed_schemas[str(ret)] = (args, kwargs)
|
|
|
|
return ret
|
|
|
|
|
|
|
|
return decorate
|
|
|
|
|
|
|
|
return func
|