1616import debug # pyflakes:ignore
1717
1818from ietf .doc .models import NewRevisionDocEvent
19+ from ietf .submit .models import Submission , SubmissionEvent
1920
2021RevInfo = collections .namedtuple ('RevInfo' , ['doc' , 'event' , 'rev' ])
2122
@@ -35,26 +36,44 @@ def add_arguments(self, parser):
3536 parser .add_argument ('documents' , nargs = '*' ,
3637 help = "One or more files to process" )
3738
39+ def check_objects (self , queryset , timeattr , docattr ):
40+ revs = {}
41+ self .stdout .write (" Checking %s ..." % queryset .model .__name__ )
42+ for obj in queryset :
43+ doc = getattr (obj , docattr )
44+ time = getattr (obj , timeattr )
45+ if not obj .rev :
46+ self .stdout .write ("Bad revision number: %s %-52s: '%s'" % (time , doc .name , obj .rev ))
47+ continue
48+ rev = int (obj .rev .lstrip ('0' ) or '0' )
49+ #self.stdout.write("%s %-52s %02s" % (time, doc.name, obj.rev))
50+ 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 ))
53+ revs [doc .name ] = RevInfo (doc , obj , rev )
54+ for doc , obj , rev in revs .values ():
55+ if not doc .rev == obj .rev :
56+ self .stderr .write ("%-50s: doc.rev: %s != %s.rev: %s" % (doc .name , doc .rev , obj ._meta .model_name , obj .rev ))
57+
58+
3859 def handle (self , * args , ** options ):
3960 #verbosity = options.get("verbosity", 1)
4061
4162 self .stdout .write ("Checking submissions from %s" % options ['from' ])
4263
43- doc_rev = {}
44- events = NewRevisionDocEvent .objects .filter (time__gte = options ['from' ], doc__type_id = 'draft' ).order_by ('time' )
45- if options ['documents' ]:
46- events = events .filter (doc__name__in = options ['documents' ])
47- for event in events :
48- if not event .rev :
49- self .stdout .write ("Bad revision number: %s %-52s: '%s'" % (event .time , event .doc .name , event .rev ))
50- continue
51- rev = int (event .rev .lstrip ('0' ) or '0' )
52- doc = event .doc
53- #self.stdout.write("%s %-52s %02s" % (event.time, event.doc.name, event.rev))
54- if doc .name in doc_rev :
55- if rev <= doc_rev [doc .name ].rev :
56- self .stderr .write ("%s %-50s %02d -> %02d" % (event .time , event .doc .name , doc_rev [doc .name ].rev , rev ))
57- doc_rev [doc .name ] = RevInfo (doc , event , rev )
58- for doc , event , rev in doc_rev .values ():
59- if not doc .rev == event .rev :
60- self .stderr .write ("%-50s: doc.rev: %s != event.rev: %s" % (doc .name , doc .rev , event .rev ))
64+ for model , timeattr , docattr in [
65+ (NewRevisionDocEvent , 'time' , 'doc' ),
66+ (Submission , 'submission_date' , 'draft' ),
67+ ]:
68+ filter = {
69+ '%s__gte' % timeattr : options ['from' ],
70+ '%s__type_id' % docattr : 'draft' ,
71+ }
72+ qs = model .objects .filter (** filter ).order_by (timeattr )
73+ if options ['documents' ]:
74+ docfilter = {
75+ '%s__name__in' % docattr : options ['documents' ],
76+ }
77+ qs = qs .filter (** docfilter )
78+
79+ self .check_objects (qs , timeattr , docattr )
0 commit comments