示例#1
0
    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)
示例#2
0
    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")