Ejemplo n.º 1
0
    def evaluate(self, instance: JSON, scope: Scope) -> None:
        last_evaluated_item = -1
        for prefix_items_annotation in scope.parent.collect_annotations(
                instance, "prefixItems"):
            if prefix_items_annotation.value is True:
                scope.discard()
                return
            if prefix_items_annotation.value > last_evaluated_item:
                last_evaluated_item = prefix_items_annotation.value

        for items_annotation in scope.parent.collect_annotations(
                instance, "items"):
            if items_annotation.value is True:
                scope.discard()
                return

        for unevaluated_items_annotation in scope.parent.collect_annotations(
                instance, "unevaluatedItems"):
            if unevaluated_items_annotation.value is True:
                scope.discard()
                return

        contains_indices = set()
        for contains_annotation in scope.parent.collect_annotations(
                instance, "contains"):
            contains_indices |= set(contains_annotation.value)

        annotation = None
        for index, item in enumerate(
                instance[(start := last_evaluated_item + 1):], start):
            if index not in contains_indices:
                annotation = True
                self.json.evaluate(item, scope)
Ejemplo n.º 2
0
    def evaluate(self, instance: JSON, scope: Scope) -> None:
        last_evaluated_item = -1
        for items_annotation in scope.parent.collect_annotations(
                instance, "items"):
            if items_annotation.value is True:
                scope.discard()
                return
            if type(items_annotation.value
                    ) is int and items_annotation.value > last_evaluated_item:
                last_evaluated_item = items_annotation.value

        for additional_items_annotation in scope.parent.collect_annotations(
                instance, "additionalItems"):
            if additional_items_annotation.value is True:
                scope.discard()
                return

        for unevaluated_items_annotation in scope.parent.collect_annotations(
                instance, "unevaluatedItems"):
            if unevaluated_items_annotation.value is True:
                scope.discard()
                return

        annotation = None
        for index, item in enumerate(instance[last_evaluated_item + 1:]):
            annotation = True
            self.json.evaluate(item, scope)

        if scope.valid:
            scope.annotate(instance, self.key, annotation)
Ejemplo n.º 3
0
 def evaluate(self, instance: JSON, scope: Scope) -> None:
     if scope.sibling("contentMediaType"):
         super().evaluate(instance, scope)
     else:
         scope.discard()