def update_xform_uuid(username, id_string, new_uuid): xform = XForm.objects.get(user__username=username, id_string=id_string) # check for duplicate uuid count = XForm.objects.filter(uuid=new_uuid).count() if count > 0: raise DuplicateUUIDError("An xform with uuid: %s already exists" % new_uuid) xform.uuid = new_uuid xform.save()
def get_instance_or_404(**criteria): """ Mimic `get_object_or_404` but handles duplicate records. `logger_instance` can contain records with the same `uuid` :param criteria: dict :return: Instance """ instances = Instance.objects.filter(**criteria).order_by("id") if instances: instance = instances[0] xml_hash = instance.xml_hash for instance_ in instances[1:]: if instance_.xml_hash == xml_hash: continue raise DuplicateUUIDError( "Multiple instances with different content exist for UUID " "{}".format(instance.uuid)) return instance else: raise Http404