mirror of https://github.com/m-labs/artiq.git
36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
|
from os import path
|
||
|
import json
|
||
|
from jsonschema import Draft7Validator, validators
|
||
|
|
||
|
def extend_with_default(validator_class):
|
||
|
validate_properties = validator_class.VALIDATORS["properties"]
|
||
|
|
||
|
def set_defaults(validator, properties, instance, schema):
|
||
|
for property, subschema in properties.items():
|
||
|
if "default" in subschema:
|
||
|
instance.setdefault(property, subschema["default"])
|
||
|
|
||
|
for error in validate_properties(
|
||
|
validator, properties, instance, schema,
|
||
|
):
|
||
|
yield error
|
||
|
|
||
|
return validators.extend(
|
||
|
validator_class, {"properties" : set_defaults},
|
||
|
)
|
||
|
|
||
|
schema_path = path.join(path.dirname(__file__), "targets/kasli_generic.schema.json")
|
||
|
with open(schema_path, "r") as f:
|
||
|
schema = json.load(f)
|
||
|
|
||
|
validator = extend_with_default(Draft7Validator)(schema)
|
||
|
|
||
|
def load(description_path):
|
||
|
with open(description_path, "r") as f:
|
||
|
result = json.load(f)
|
||
|
|
||
|
global validator
|
||
|
validator.validate(result)
|
||
|
|
||
|
return result
|