Skip to content

Commit ea1d21a

Browse files
committed
Added another check to the check_draft_event_revision_integrity management command, and refined it somewhat.
- Legacy-Id: 17469
1 parent d2243ba commit ea1d21a

1 file changed

Lines changed: 22 additions & 4 deletions

File tree

ietf/utils/management/commands/check_draft_event_revision_integrity.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import collections
99
import datetime
10+
import pprint
1011

1112
import django
1213
django.setup()
@@ -15,7 +16,7 @@
1516

1617
import debug # pyflakes:ignore
1718

18-
from ietf.doc.models import NewRevisionDocEvent
19+
from ietf.doc.models import DocHistory, NewRevisionDocEvent
1920
from ietf.submit.models import Submission, SubmissionEvent
2021

2122
RevInfo = collections.namedtuple('RevInfo', ['doc', 'event', 'rev'])
@@ -39,17 +40,33 @@ def add_arguments(self, parser):
3940
def check_objects(self, queryset, timeattr, docattr):
4041
revs = {}
4142
self.stdout.write(" Checking %s ..." % queryset.model.__name__)
43+
def to_dict(instance):
44+
from itertools import chain
45+
opts = instance._meta
46+
data = {}
47+
for f in chain(opts.concrete_fields, opts.private_fields):
48+
data[f.name] = f.value_from_object(instance)
49+
for f in opts.many_to_many:
50+
data[f.name] = [i.pk for i in f.value_from_object(instance)]
51+
return data
4252
for obj in queryset:
4353
doc = getattr(obj, docattr)
4454
time = getattr(obj, timeattr)
4555
if not obj.rev:
46-
self.stdout.write("Bad revision number: %s %-52s: '%s'" % (time, doc.name, obj.rev))
56+
if not doc.is_rfc():
57+
self.stdout.write("Bad revision number: %-52s: '%s'" % (doc.name, obj.rev))
4758
continue
4859
rev = int(obj.rev.lstrip('0') or '0')
4960
#self.stdout.write("%s %-52s %02s" % (time, doc.name, obj.rev))
5061
if doc.name in revs:
51-
if rev <= revs[doc.name].rev:
52-
self.stderr.write("%s %-50s %02d -> %02d" % (time, doc.name, revs[doc.name].rev, rev))
62+
prev = revs[doc.name]
63+
if rev <= prev.rev:
64+
docd = to_dict(doc)
65+
prevd = to_dict(prev.doc)
66+
if prevd != docd:
67+
self.stderr.write("%s %-50s %02d -> %02d" % (time, doc.name, prev.rev, rev))
68+
self.stderr.write(pprint.pformat(prevd))
69+
self.stderr.write(pprint.pformat(docd))
5370
revs[doc.name] = RevInfo(doc, obj, rev)
5471
for doc, obj, rev in revs.values():
5572
if not doc.rev == obj.rev:
@@ -64,6 +81,7 @@ def handle(self, *args, **options):
6481
for model, timeattr, docattr in [
6582
(NewRevisionDocEvent, 'time', 'doc'),
6683
(Submission, 'submission_date', 'draft'),
84+
(DocHistory, 'time', 'doc'),
6785
]:
6886
filter = {
6987
'%s__gte'%timeattr: options['from'],

0 commit comments

Comments
 (0)