示例#1
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data()
        action_list = self._get_action_list()

        if len(action_list) < 2:
            # Less than two history items aren't enough to compare ;)
            comparable = False
        else:
            comparable = True
            # for pre selecting the compare radio buttons depend on the ordering:
            if self.history_latest_first:
                action_list[0]["first"] = True
                action_list[1]["second"] = True
            else:
                action_list[-1]["first"] = True
                action_list[-2]["second"] = True

        if self.request.GET:
            form = SelectDiffForm(self.request.GET)
            if not form.is_valid():
                msg = "Wrong version IDs."
                raise Http404(msg)

            version_id1 = form.cleaned_data["version_id1"]
            version_id2 = form.cleaned_data["version_id2"]

            if version_id1 > version_id2:
                # Compare always the newest one (#2) with the older one (#1)
                version_id1, version_id2 = version_id2, version_id1

            obj = self.get_object()
            queryset = Version.objects.get_for_object(obj)
            version1 = get_object_or_404(queryset, pk=version_id1)
            version2 = get_object_or_404(queryset, pk=version_id2)

            next_version = queryset.filter(pk__gt=version_id2).last()
            prev_version = queryset.filter(pk__lt=version_id1).first()

            compare_data, has_unfollowed_fields = self.compare(obj, version1, version2)

            context.update(
                {
                    "compare_data": compare_data,
                    "has_unfollowed_fields": has_unfollowed_fields,
                    "version1": version1,
                    "version2": version2,
                }
            )

            if next_version:
                next_url = f"?version_id1={version2.id:d}&version_id2={next_version.id:d}"
                context.update({"next_url": next_url})
            if prev_version:
                prev_url = f"?version_id1={prev_version.id:d}&version_id2={version1.id:d}"
                context.update({"prev_url": prev_url})

        # Compile the context.
        context.update({"action_list": action_list, "comparable": comparable, "compare_view": True})
        return context
    def compare_view(self, request, object_id, extra_context=None):
        """
        compare two versions.
        Used self.make_compare() to create the html diff.
        """
        if self.compare is None:
            raise Http404("Compare view not enabled.")

        form = SelectDiffForm(request.GET)
        if not form.is_valid():
            msg = "Wrong version IDs."
            if settings.DEBUG:
                msg += " (form errors: %s)" % ", ".join(form.errors)
            raise Http404(msg)

        version_id1 = form.cleaned_data["version_id1"]
        version_id2 = form.cleaned_data["version_id2"]

        object_id = unquote(object_id)  # Underscores in primary key get quoted to "_5F"
        obj = get_object_or_404(self.model, pk=object_id)
        queryset = reversion.get_for_object(obj)
        version1 = get_object_or_404(queryset, pk=version_id1)
        version2 = get_object_or_404(queryset, pk=version_id2)

        if version_id1 > version_id2:
            # Compare always the newest one with the older one
            version1, version2 = version2, version1

        compare_data, has_unfollowed_fields = self.compare(obj, version1, version2)

        opts = self.model._meta

        context = {
            "opts": opts,
            "app_label": opts.app_label,
            "module_name": capfirst(opts.verbose_name),
            "title": _("Compare %(name)s") % {"name": version1.object_repr},
            "obj": obj,
            "compare_data": compare_data,
            "has_unfollowed_fields": has_unfollowed_fields,
            "version1": version1,
            "version2": version2,
            "changelist_url": reverse("%s:%s_%s_changelist" % (self.admin_site.name, opts.app_label, opts.module_name)),
            "history_url": reverse(
                "%s:%s_%s_history" % (self.admin_site.name, opts.app_label, opts.module_name), args=(quote(obj.pk),)
            ),
        }
        extra_context = extra_context or {}
        context.update(extra_context)
        return render_to_response(
            self.compare_template or self._get_template_list("compare.html"), context, template.RequestContext(request)
        )
示例#3
0
def compare_view(request, object_class, extra_context=None):
    """
    compare two versions.
    Used make_compare() to create the html diff.
    """
    form = SelectDiffForm(request.GET)
    if not form.is_valid():
        msg = "Wrong version IDs."
        if settings.DEBUG:
            msg += " (form errors: %s)" % ", ".join(form.errors)
        raise Http404(msg)

    object_id = request.GET.get('object_id', None)
    if not object_id:
        raise Http404("What object are you looking for?")

    version_id1 = form.cleaned_data["version_id1"]
    version_id2 = form.cleaned_data["version_id2"]

    object_klass = get_obj_meta(object_class).Klass
    if not object_klass:
        raise Http404("No {0} object type with id {1}".format(object_class,
                        object_id))
    obj = get_object_or_404(object_klass, pk=object_id)
    queryset = reversion.get_for_object(obj)
    version1 = get_object_or_404(queryset, pk=version_id1)
    version2 = get_object_or_404(queryset, pk=version_id2)

    if version_id1 > version_id2:
        # Compare always the newest one with the older one 
        version1, version2 = version2, version1

    compare_data, has_unfollowed_fields = compare(obj, version1, version2)

    opts = obj._meta

    context = {
        "opts": opts,
        "app_label": opts.app_label,
        "module_name": capfirst(opts.verbose_name),
        "title": _("Compare {0}".format(version1.object_repr)),
        "obj": obj,
        "compare_data": compare_data,
        "has_unfollowed_fields": has_unfollowed_fields,
        "version1": version1,
        "version2": version2,
    }
    extra_context = extra_context or {}
    context.update(extra_context)
    return render(request, 'reversion_compare/compare.html',
                    context)
    def compare_view(self, request, object_id, extra_context=None):
        """
        compare two versions.
        Used self.make_compare() to create the html diff.
        """
        if self.compare is None:
            raise Http404("Compare view not enabled.")

        form = SelectDiffForm(request.GET)
        if not form.is_valid():
            msg = "Wrong version IDs."
            if settings.DEBUG:
                msg += " (form errors: %s)" % ", ".join(form.errors)
            raise Http404(msg)

        version_id1 = form.cleaned_data["version_id1"]
        version_id2 = form.cleaned_data["version_id2"]

        object_id = unquote(object_id) # Underscores in primary key get quoted to "_5F"
        obj = get_object_or_404(self.model, pk=object_id)
        queryset = self.revision_manager.get_for_object(obj)
        version1 = get_object_or_404(queryset, pk=version_id1)
        version2 = get_object_or_404(queryset, pk=version_id2)

        if version_id1 > version_id2:
            # Compare always the newest one with the older one 
            version1, version2 = version2, version1

        compare_data, has_unfollowed_fields = self.compare(obj, version1, version2)

        opts = self.model._meta

        context = {
            "opts": opts,
            "app_label": opts.app_label,
            "module_name": capfirst(opts.verbose_name),
            "title": _("Compare %(name)s") % {"name": version1.object_repr},
            "obj": obj,
            "compare_data": compare_data,
            "has_unfollowed_fields": has_unfollowed_fields,
            "version1": version1,
            "version2": version2,
            "changelist_url": reverse("%s:%s_%s_changelist" % (self.admin_site.name, opts.app_label, opts.module_name)),
            "change_url": reverse("%s:%s_%s_change" % (self.admin_site.name, opts.app_label, opts.module_name), args=(quote(obj.pk),)),
            "original": obj,
            "history_url": reverse("%s:%s_%s_history" % (self.admin_site.name, opts.app_label, opts.module_name), args=(quote(obj.pk),)),
        }
        extra_context = extra_context or {}
        context.update(extra_context)
        return render_to_response(self.compare_template or self._get_template_list("compare.html"),
            context, template.RequestContext(request))
示例#5
0
def compare_view(request, object_class, extra_context=None):
    """
    compare two versions.
    Used make_compare() to create the html diff.
    """
    form = SelectDiffForm(request.GET)
    if not form.is_valid():
        msg = "Wrong version IDs."
        if settings.DEBUG:
            msg += " (form errors: %s)" % ", ".join(form.errors)
        raise Http404(msg)

    object_id = request.GET.get('object_id', None)
    if not object_id:
        raise Http404("What object are you looking for?")

    version_id1 = form.cleaned_data["version_id1"]
    version_id2 = form.cleaned_data["version_id2"]

    object_klass = get_obj_meta(object_class).Klass
    if not object_klass:
        raise Http404("No {0} object type with id {1}".format(
            object_class, object_id))
    obj = get_object_or_404(object_klass, pk=object_id)
    queryset = reversion.get_for_object(obj)
    version1 = get_object_or_404(queryset, pk=version_id1)
    version2 = get_object_or_404(queryset, pk=version_id2)

    if version_id1 > version_id2:
        # Compare always the newest one with the older one
        version1, version2 = version2, version1

    compare_data, has_unfollowed_fields = compare(obj, version1, version2)

    opts = obj._meta

    context = {
        "opts": opts,
        "app_label": opts.app_label,
        "module_name": capfirst(opts.verbose_name),
        "title": _("Compare {0}".format(version1.object_repr)),
        "obj": obj,
        "compare_data": compare_data,
        "has_unfollowed_fields": has_unfollowed_fields,
        "version1": version1,
        "version2": version2,
    }
    extra_context = extra_context or {}
    context.update(extra_context)
    return render(request, 'reversion_compare/compare.html', context)
    def compare_view(self, request, object_id, extra_context=None):
        """
        compare two versions.
        Used self.make_compare() to create the html diff.
        """
        if self.compare is None:
            raise Http404("Compare view not enabled.")

        form = SelectDiffForm(request.GET)
        if not form.is_valid():
            msg = "Wrong version IDs."
            if settings.DEBUG:
                msg += " (form errors: %s)" % ", ".join(form.errors)
            raise Http404(msg)

        version_id1 = form.cleaned_data["version_id1"]
        version_id2 = form.cleaned_data["version_id2"]

        if version_id1 > version_id2:
            # Compare always the newest one (#2) with the older one (#1)
            version_id1, version_id2 = version_id2, version_id1

        object_id = unquote(object_id)  # Underscores in primary key get quoted to "_5F"
        obj = get_object_or_404(self.model, pk=object_id)
        queryset = Version.objects.get_for_object(obj)
        version1 = get_object_or_404(queryset, pk=version_id1)
        version2 = get_object_or_404(queryset, pk=version_id2)

        next_version = queryset.filter(pk__gt=version_id2).last()
        prev_version = queryset.filter(pk__lt=version_id1).first()

        compare_data, has_unfollowed_fields = self.compare(obj, version1, version2)

        opts = self.model._meta

        context = {
            "opts": opts,
            "app_label": opts.app_label,
            "model_name": capfirst(opts.verbose_name),
            "title": _("Compare %(name)s") % {"name": version1.object_repr},
            "obj": obj,
            "compare_data": compare_data,
            "has_unfollowed_fields": has_unfollowed_fields,
            "version1": version1,
            "version2": version2,
            "changelist_url": reverse("%s:%s_%s_changelist" % (self.admin_site.name, opts.app_label, opts.model_name)),
            "change_url": reverse("%s:%s_%s_change" % (self.admin_site.name, opts.app_label, opts.model_name),
                                  args=(quote(obj.pk),)),
            "original": obj,
            "history_url": reverse("%s:%s_%s_history" % (self.admin_site.name, opts.app_label, opts.model_name),
                                   args=(quote(obj.pk),)),
        }

        # don't use urlencode with dict for generate prev/next-urls
        # Otherwise we can't unitests it!
        if next_version:
            next_url = "?version_id1=%i&version_id2=%i" % (
                version2.id, next_version.id
            )
            context.update({'next_url': next_url})
        if prev_version:
            prev_url = "?version_id1=%i&version_id2=%i" % (
                prev_version.id, version1.id
            )
            context.update({'prev_url': prev_url})

        extra_context = extra_context or {}
        context.update(extra_context)
        return render_to_response(self.compare_template or self._get_template_list("compare.html"),
                                  context, template.RequestContext(request))
    def compare_view(self, request, object_id, extra_context=None):
        """
        compare two versions.
        Used self.make_compare() to create the html diff.
        """
        if self.compare is None:
            raise Http404("Compare view not enabled.")

        form = SelectDiffForm(request.GET)
        if not form.is_valid():
            msg = "Wrong version IDs."
            if settings.DEBUG:
                msg += f" (form errors: {', '.join(form.errors)})"
            raise Http404(msg)

        version_id1 = form.cleaned_data["version_id1"]
        version_id2 = form.cleaned_data["version_id2"]

        if version_id1 > version_id2:
            # Compare always the newest one (#2) with the older one (#1)
            version_id1, version_id2 = version_id2, version_id1

        object_id = unquote(
            object_id)  # Underscores in primary key get quoted to "_5F"
        obj = get_object_or_404(self.model, pk=object_id)
        queryset = Version.objects.get_for_object(obj)
        version1 = get_object_or_404(queryset, pk=version_id1)
        version2 = get_object_or_404(queryset, pk=version_id2)

        next_version = queryset.filter(pk__gt=version_id2).last()
        prev_version = queryset.filter(pk__lt=version_id1).first()

        compare_data, has_unfollowed_fields = self.compare(
            obj, version1, version2)

        opts = self.model._meta

        context = {
            **self.admin_site.each_context(request),
            "opts":
            opts,
            "app_label":
            opts.app_label,
            "model_name":
            capfirst(opts.verbose_name),
            "title":
            _("Compare %(name)s") % {
                "name": version1.object_repr
            },
            "obj":
            obj,
            "compare_data":
            compare_data,
            "has_unfollowed_fields":
            has_unfollowed_fields,
            "version1":
            version1,
            "version2":
            version2,
            "changelist_url":
            reverse(
                f"{self.admin_site.name}:{opts.app_label}_{opts.model_name}_changelist"
            ),
            "original":
            obj,
            "history_url":
            reverse(
                f"{self.admin_site.name}:{opts.app_label}_{opts.model_name}_history",
                args=(quote(obj.pk), )),
            "save_url":
            reverse(
                f"{self.admin_site.name}:{opts.app_label}_{opts.model_name}_revision",
                args=(quote(version1.object_id), version1.id),
            ),
        }

        # don't use urlencode with dict for generate prev/next-urls
        # Otherwise we can't unitests it!
        if next_version:
            next_url = f"?version_id1={version2.id:d}&version_id2={next_version.id:d}"
            context.update({"next_url": next_url})
        if prev_version:
            prev_url = f"?version_id1={prev_version.id:d}&version_id2={version1.id:d}"
            context.update({"prev_url": prev_url})

        context.update(extra_context or {})
        return render(
            request, self.compare_template
            or self._get_template_list("compare.html"), context)
示例#8
0
    def get_context_data(self, **kwargs):
        context = super(HistoryCompareDetailView, self).get_context_data()
        action_list = self._get_action_list()

        if len(action_list) < 2:
            # Less than two history items aren't enough to compare ;)
            comparable = False
        else:
            comparable = True
            # for pre selecting the compare radio buttons depend on the ordering:
            if self.history_latest_first:
                action_list[0]["first"] = True
                action_list[1]["second"] = True
            else:
                action_list[-1]["first"] = True
                action_list[-2]["second"] = True
            
        if self.request.GET: 
            form = SelectDiffForm(self.request.GET)
            if not form.is_valid():
                msg = "Wrong version IDs."
                raise Http404(msg)

            version_id1 = form.cleaned_data["version_id1"]
            version_id2 = form.cleaned_data["version_id2"]

            if version_id1 > version_id2:
                # Compare always the newest one (#2) with the older one (#1)
                version_id1, version_id2 = version_id2, version_id1

            obj = self.get_object()
            queryset = reversion_api.get_for_object(obj)
            version1 = get_object_or_404(queryset, pk=version_id1)
            version2 = get_object_or_404(queryset, pk=version_id2)

            next_version = queryset.filter(pk__gt=version_id2).last()
            prev_version = queryset.filter(pk__lt=version_id1).first()

            compare_data, has_unfollowed_fields = self.compare(obj, version1, version2)
            
            context.update({
                "compare_data": compare_data,
                "has_unfollowed_fields": has_unfollowed_fields,
                "version1": version1,
                "version2": version2,
            })
            
            if next_version:
                next_url = "?version_id1=%i&version_id2=%i" % (
                    version2.id, next_version.id
                )
                context.update({'next_url': next_url})
            if prev_version:
                prev_url = "?version_id1=%i&version_id2=%i" % (
                    prev_version.id, version1.id
                )
                context.update({'prev_url': prev_url})

        # Compile the context.
        context.update({
            "action_list": action_list,
            "comparable": comparable,
            "compare_view": True,
        })
        return context
示例#9
0
    def get_context_data(self, **kwargs):
        context = super(HistoryCompareDetailView, self).get_context_data()
        action_list = self._get_action_list()

        if len(action_list) < 2:
            # Less than two history items aren't enough to compare ;)
            comparable = False
        else:
            comparable = True
            # for pre selecting the compare radio buttons depend on the ordering:
            if self.history_latest_first:
                action_list[0]["first"] = True
                action_list[1]["second"] = True
            else:
                action_list[-1]["first"] = True
                action_list[-2]["second"] = True

        if self.request.GET:
            form = SelectDiffForm(self.request.GET)
            if not form.is_valid():
                msg = "Wrong version IDs."
                raise Http404(msg)

            version_id1 = form.cleaned_data["version_id1"]
            version_id2 = form.cleaned_data["version_id2"]

            if version_id1 > version_id2:
                # Compare always the newest one (#2) with the older one (#1)
                version_id1, version_id2 = version_id2, version_id1

            obj = self.get_object()
            queryset = Version.objects.get_for_object(obj)
            version1 = get_object_or_404(queryset, pk=version_id1)
            version2 = get_object_or_404(queryset, pk=version_id2)
            related1 = version1.revision.version_set.all()
            related2 = version2.revision.version_set.all()

            next_version = queryset.filter(pk__gt=version_id2).last()
            prev_version = queryset.filter(pk__lt=version_id1).first()
            compare_data = []

            compared, has_unfollowed_fields = self.compare(
                obj, version1, version2)
            compare_data.append(compared)

            for activity in obj.activity_set.all():
                activity_1 = related1.get_for_object(activity).first()
                activity_2 = related2.get_for_object(activity).first()
                print "related obj"
                print activity
                print "related_v1"
                print activity_1
                print "related_v2"
                print activity_2
                if activity_1 and activity_2:
                    compared, fields = self.compare(activity, activity_1,
                                                    activity_2)
                    compare_data.append(compared)

            context.update({
                "compare_data": compare_data,
                "has_unfollowed_fields": has_unfollowed_fields,
                "version1": version1,
                "version2": version2
            })

            if next_version:
                next_url = "?version_id1=%i&version_id2=%i" % (version2.id,
                                                               next_version.id)
                context.update({'next_url': next_url})
            if prev_version:
                prev_url = "?version_id1=%i&version_id2=%i" % (prev_version.id,
                                                               version1.id)
                context.update({'prev_url': prev_url})

        # Compile the context.
        context.update({
            "action_list": action_list,
            "comparable": comparable,
            "compare_view": True,
        })
        return context
示例#10
0
    def compare_view(self, request, object_id, extra_context=None):
        """
        compare two versions.
        Used self.make_compare() to create the html diff.
        """
        if self.compare is None:
            raise Http404("Compare view not enabled.")

        form = SelectDiffForm(request.GET)
        if not form.is_valid():
            msg = "Wrong version IDs."
            if settings.DEBUG:
                msg += " (form errors: %s)" % ", ".join(form.errors)
            raise Http404(msg)

        version_id1 = form.cleaned_data["version_id1"]
        version_id2 = form.cleaned_data["version_id2"]

        if version_id1 > version_id2:
            # Compare always the newest one (#2) with the older one (#1)
            version_id1, version_id2 = version_id2, version_id1

        object_id = unquote(
            object_id)  # Underscores in primary key get quoted to "_5F"
        ######## Modify by Junhui Hu begin ###############
        if hasattr(self.model._meta, 'using'):
            obj = get_object_or_404(self.model.objects.using(
                self.model._meta.using).all(),
                                    pk=object_id)
        else:
            obj = get_object_or_404(self.model, pk=object_id)
        ######## Modify by Junhui Hu end ###############
        queryset = self.revision_manager.get_for_object(obj)
        version1 = get_object_or_404(queryset, pk=version_id1)
        version2 = get_object_or_404(queryset, pk=version_id2)

        next_version = queryset.filter(pk__gt=version_id2).last()
        prev_version = queryset.filter(pk__lt=version_id1).first()

        compare_data, has_unfollowed_fields = self.compare(
            obj, version1, version2)

        opts = self.model._meta

        context = {
            "opts":
            opts,
            "app_label":
            opts.app_label,
            "model_name":
            capfirst(opts.verbose_name),
            "title":
            _("Compare %(name)s") % {
                "name": version1.object_repr
            },
            "obj":
            obj,
            "compare_data":
            compare_data,
            "has_unfollowed_fields":
            has_unfollowed_fields,
            "version1":
            version1,
            "version2":
            version2,
            "changelist_url":
            reverse("%s:%s_%s_changelist" %
                    (self.admin_site.name, opts.app_label, opts.model_name)),
            "change_url":
            reverse("%s:%s_%s_change" %
                    (self.admin_site.name, opts.app_label, opts.model_name),
                    args=(quote(obj.pk), )),
            "original":
            obj,
            "history_url":
            reverse("%s:%s_%s_history" %
                    (self.admin_site.name, opts.app_label, opts.model_name),
                    args=(quote(obj.pk), )),
        }

        # don't use urlencode with dict for generate prev/next-urls
        # Otherwise we can't unitests it!
        if next_version:
            next_url = "?version_id1=%i&version_id2=%i" % (version2.id,
                                                           next_version.id)
            context.update({'next_url': next_url})
        if prev_version:
            prev_url = "?version_id1=%i&version_id2=%i" % (prev_version.id,
                                                           version1.id)
            context.update({'prev_url': prev_url})

        extra_context = extra_context or {}
        context.update(extra_context)
        return render_to_response(
            self.compare_template or self._get_template_list("compare.html"),
            context, template.RequestContext(request))