def uniqueIds(validator, uI, instance, schema): if ( uI and validator.is_type(instance, "array") ): non_unique_ids = set() all_ids = set() for item in instance: try: item_id = item.get('id') except AttributeError: # if item is not a dict item_id = None if item_id and not isinstance(item_id, list): if item_id in all_ids: non_unique_ids.add(item_id) all_ids.add(item_id) else: # if there is any item without an id key, or the item is not a dict # revert to original validator for error in uniqueItemsValidator(validator, uI, instance, schema): yield error return if non_unique_ids: yield ValidationError("Non-unique ID Values (first 3 shown): {}".format(", ".join(list(non_unique_ids)[:3])))
def required_draft4(validator, required, instance, schema): if not validator.is_type(instance, "object"): return for property in required: if property not in instance: yield ValidationError(property)