Added another check to the check_draft_event_revision_integrity management command, and refined it somewhat.
- Legacy-Id: 17469
This commit is contained in:
parent
d2243ba93d
commit
ea1d21a45c
|
@ -7,6 +7,7 @@ from __future__ import absolute_import, print_function, unicode_literals
|
|||
|
||||
import collections
|
||||
import datetime
|
||||
import pprint
|
||||
|
||||
import django
|
||||
django.setup()
|
||||
|
@ -15,7 +16,7 @@ from django.core.management.base import BaseCommand #, CommandError
|
|||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
from ietf.doc.models import NewRevisionDocEvent
|
||||
from ietf.doc.models import DocHistory, NewRevisionDocEvent
|
||||
from ietf.submit.models import Submission, SubmissionEvent
|
||||
|
||||
RevInfo = collections.namedtuple('RevInfo', ['doc', 'event', 'rev'])
|
||||
|
@ -39,17 +40,33 @@ class Command(BaseCommand):
|
|||
def check_objects(self, queryset, timeattr, docattr):
|
||||
revs = {}
|
||||
self.stdout.write(" Checking %s ..." % queryset.model.__name__)
|
||||
def to_dict(instance):
|
||||
from itertools import chain
|
||||
opts = instance._meta
|
||||
data = {}
|
||||
for f in chain(opts.concrete_fields, opts.private_fields):
|
||||
data[f.name] = f.value_from_object(instance)
|
||||
for f in opts.many_to_many:
|
||||
data[f.name] = [i.pk for i in f.value_from_object(instance)]
|
||||
return data
|
||||
for obj in queryset:
|
||||
doc = getattr(obj, docattr)
|
||||
time = getattr(obj, timeattr)
|
||||
if not obj.rev:
|
||||
self.stdout.write("Bad revision number: %s %-52s: '%s'" % (time, doc.name, obj.rev))
|
||||
if not doc.is_rfc():
|
||||
self.stdout.write("Bad revision number: %-52s: '%s'" % (doc.name, obj.rev))
|
||||
continue
|
||||
rev = int(obj.rev.lstrip('0') or '0')
|
||||
#self.stdout.write("%s %-52s %02s" % (time, doc.name, obj.rev))
|
||||
if doc.name in revs:
|
||||
if rev <= revs[doc.name].rev:
|
||||
self.stderr.write("%s %-50s %02d -> %02d" % (time, doc.name, revs[doc.name].rev, rev))
|
||||
prev = revs[doc.name]
|
||||
if rev <= prev.rev:
|
||||
docd = to_dict(doc)
|
||||
prevd = to_dict(prev.doc)
|
||||
if prevd != docd:
|
||||
self.stderr.write("%s %-50s %02d -> %02d" % (time, doc.name, prev.rev, rev))
|
||||
self.stderr.write(pprint.pformat(prevd))
|
||||
self.stderr.write(pprint.pformat(docd))
|
||||
revs[doc.name] = RevInfo(doc, obj, rev)
|
||||
for doc, obj, rev in revs.values():
|
||||
if not doc.rev == obj.rev:
|
||||
|
@ -64,6 +81,7 @@ class Command(BaseCommand):
|
|||
for model, timeattr, docattr in [
|
||||
(NewRevisionDocEvent, 'time', 'doc'),
|
||||
(Submission, 'submission_date', 'draft'),
|
||||
(DocHistory, 'time', 'doc'),
|
||||
]:
|
||||
filter = {
|
||||
'%s__gte'%timeattr: options['from'],
|
||||
|
|
Loading…
Reference in a new issue