Dump redacted events in DeletedEvent table
- Legacy-Id: 5025
This commit is contained in:
parent
daa5d49adb
commit
45cf853524
|
@ -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"))
|
||||
|
|
23
ietf/utils/serialize.py
Normal file
23
ietf/utils/serialize.py
Normal file
|
@ -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
|
Loading…
Reference in a new issue