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__), "coredevice_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)

    if result["base"] != "use_drtio_role":
        result["drtio_role"] = result["base"]

    return result
