From e06ac44060f66cb9cbe33dde4cb03cfa91a85f48 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 6 Oct 2016 18:40:04 +0000 Subject: [PATCH] Added a migration to remove most duplicate 'Upload' doc events. - Legacy-Id: 12098 --- .../0016_fix_duplicate_upload_docevents.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 ietf/submit/migrations/0016_fix_duplicate_upload_docevents.py diff --git a/ietf/submit/migrations/0016_fix_duplicate_upload_docevents.py b/ietf/submit/migrations/0016_fix_duplicate_upload_docevents.py new file mode 100644 index 000000000..386a81758 --- /dev/null +++ b/ietf/submit/migrations/0016_fix_duplicate_upload_docevents.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + +import debug # pyflakes:ignore + +verbose = False +def note(s): + if verbose: + print(s) + + +def clean_up_duplicate_upload_docevents(apps, schema_editor): + DocEvent = apps.get_model('doc', 'DocEvent') + DocHistory = apps.get_model('doc', 'DocHistory') + + def get_dochistory(e): + return DocHistory.objects.filter(time__lte=e.time,doc__name=e.doc.name).order_by('-time', '-pk').first() + + def rev(e): + if hasattr(e, 'newrevisiondocevent'): + return e.newrevisiondocevent.rev + else: + h = get_dochistory(e) + if h: + return h.rev + else: + return " " + + events = DocEvent.objects.filter(time__gt='2016-09-10', doc__type='draft', desc='Uploaded new revision').order_by('id') + docs = set() + for e in events: + docs.add(e.doc) + for doc in docs: + note("\n%s" % doc.name) + docevents = list(events.filter(doc=doc)) + prev = docevents[0] + for i, event in enumerate(docevents): + if rev(event) != rev(prev): + note("") + if event.time < prev.time: + print( " *** Timestamp discrepancy:") + note((u" %6d %s %-20s %s %s" % (event.id, event.time, event.by.name[:24], rev(event), event.desc[:64].replace('\n',''), )).encode('utf-8')) + if event.by.name == '(System)': + for j in range(i+1, len(docevents)): + next = docevents[j] + if rev(next) == rev(event): + note((u" Deleting event %6d %s %-20s %s" % (event.id, event.time, event.by.name[:24], rev(event), )).encode('utf-8')) + event.delete() + break + prev = event + return False + +def noop(apps, schema_editor): + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('submit', '0015_fix_bad_submission_docevents'), + ] + + operations = [ + migrations.RunPython(clean_up_duplicate_upload_docevents, noop) + ]