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)
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)
def evaluate(self, instance: JSON, scope: Scope) -> None: if scope.sibling("contentMediaType"): super().evaluate(instance, scope) else: scope.discard()