def check_node(self, nodename, node, fail): if nodename == "/": return node['$nodename'] = [ nodename ] node_matched = True if fail: node_matched = False with self.assertRaises(jsonschema.ValidationError, msg=nodename): for schema in self.schemas: if schema['$select_validator'].is_valid(node): node_matched = True dtschema.DTValidator(schema).validate(node) else: node_matched = False for schema in self.schemas: if schema['$select_validator'].is_valid(node): node_matched = True self.assertIsNone(dtschema.DTValidator(schema).validate(node)) self.assertTrue(node_matched, msg=nodename)
def load_binding_schema(self, filename): try: schema = dtschema.load_schema(filename) except yaml.YAMLError as exc: print(filename + ": ignoring, error parsing file") return # Check that the validation schema is valid try: dtschema.DTValidator.check_schema(schema) except jsonschema.SchemaError as exc: print(filename + ": ignoring, error in schema '%s'" % exc.path[-1]) #print(exc.message) return # $validator and $select_validator are special properties that cache the # validator objects so the object doesn't need to be recreated on every node. schema["$validator"] = dtschema.DTValidator(schema) schema["$select_validator"] = jsonschema.Draft6Validator( get_select_schema(schema)) self.schemas.append(schema) schema["$filename"] = filename print(filename + ": loaded")