Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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