Skip to content

Commit c107062

Browse files
committed
Added a management command to check draft event revision numbers. To be extended for other checks.
- Legacy-Id: 17423
1 parent e99fa4b commit c107062

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Copyright The IETF Trust 2015-2020, All Rights Reserved
2+
# -*- coding: utf-8 -*-
3+
4+
5+
from __future__ import absolute_import, print_function, unicode_literals
6+
7+
8+
import collections
9+
import datetime
10+
11+
import django
12+
django.setup()
13+
14+
from django.core.management.base import BaseCommand #, CommandError
15+
16+
import debug # pyflakes:ignore
17+
18+
from ietf.doc.models import NewRevisionDocEvent
19+
20+
RevInfo = collections.namedtuple('RevInfo', ['doc', 'event', 'rev'])
21+
22+
class Command(BaseCommand):
23+
help = """
24+
Check that new revision events for drafts have monotonically increasing
25+
revision numbers and that the latest event revision number matches the
26+
document revision number.
27+
"""
28+
29+
def add_arguments(self, parser):
30+
default_start = datetime.datetime.now() - datetime.timedelta(days=60)
31+
parser.add_argument(
32+
'-d', '--from', type=str, default=default_start.strftime('%Y-%m-%d'),
33+
help='Limit the list to messages saved after the given date (default %(default)s).',
34+
)
35+
parser.add_argument('documents', nargs='*',
36+
help="One or more files to process")
37+
38+
def handle(self, *args, **options):
39+
#verbosity = options.get("verbosity", 1)
40+
41+
self.stdout.write("Checking submissions from %s" % options['from'])
42+
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))

0 commit comments

Comments
 (0)