From 45cf853524e94c211f8ad9674fbcb113c5f5938d Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Wed, 7 Nov 2012 14:59:17 +0000 Subject: [PATCH] Dump redacted events in DeletedEvent table - Legacy-Id: 5025 --- ietf/sync/views.py | 14 +++++++++----- ietf/utils/serialize.py | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 ietf/utils/serialize.py diff --git a/ietf/sync/views.py b/ietf/sync/views.py index f9183892c..e9d734676 100644 --- a/ietf/sync/views.py +++ b/ietf/sync/views.py @@ -1,4 +1,4 @@ -import subprocess, os +import subprocess, os, json from django.http import HttpResponse, HttpResponseForbidden, HttpResponseServerError, HttpResponseRedirect from django.shortcuts import render_to_response @@ -13,6 +13,7 @@ from ietf.ietfauth.decorators import role_required, has_role from ietf.doc.models import * from ietf.sync import iana, rfceditor from ietf.sync.discrepancies import find_discrepancies +from ietf.utils.serialize import object_as_shallow_dict SYNC_BIN_PATH = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../bin")) @@ -101,12 +102,9 @@ def notify(request, org, notification): ), context_instance=RequestContext(request)) +@role_required('Secretariat', 'RFC Editor') def rfceditor_undo(request): """Undo a DocEvent.""" - - if not request.user.is_authenticated() or not has_role(request.user, ("Secretariat", "RFC Editor")): - return HttpResponseForbidden("You do not have the necessary permissions to view this page") - events = StateDocEvent.objects.filter(state_type="draft-rfceditor", time__gte=datetime.datetime.now() - datetime.timedelta(weeks=1) ).order_by("-time", "-id") @@ -122,6 +120,12 @@ def rfceditor_undo(request): except StateDocEvent.DoesNotExist: return HttpResponse("Event does not exist") + dump = DeletedEvent() + dump.content_type = ContentType.objects.get_for_model(type(e)) + dump.json = json.dumps(object_as_shallow_dict(e), indent=2) + dump.by = request.user.person + dump.save() + e.delete() return HttpResponseRedirect(urlreverse("ietf.sync.views.rfceditor_undo")) diff --git a/ietf/utils/serialize.py b/ietf/utils/serialize.py new file mode 100644 index 000000000..64254300a --- /dev/null +++ b/ietf/utils/serialize.py @@ -0,0 +1,23 @@ +from django.db import models + +def object_as_shallow_dict(obj): + """Turn a Django model object into a dict suitable for passing to + create and for serializing to JSON.""" + + d = {} + for f in obj._meta.fields: + n = f.name + if isinstance(f, models.ForeignKey): + n = f.name + "_id" + + v = getattr(obj, n) + if isinstance(f, models.ManyToManyField): + v = list(v.values_list("pk", flat=True)) + elif isinstance(f, models.DateTimeField): + v = v.strftime('%Y-%m-%d %H:%M:%S') + elif isinstance(f, models.DateField): + v = v.strftime('%Y-%m-%d') + + d[n] = v + + return d