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) )
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))
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)
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
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
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))