Skip to content

Commit 4aa9874

Browse files
committed
Added a meeting helper function update_important_dates(), and a management command update_important_dates to update the important dates for a meeting if the offsets in the MeetingDateName table has been changed.
- Legacy-Id: 15160
1 parent 50a39a2 commit 4aa9874

2 files changed

Lines changed: 56 additions & 0 deletions

File tree

ietf/meeting/helpers.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,3 +618,14 @@ def populate_important_dates(meeting):
618618
assert meeting.type_id=='ietf'
619619
for datename in ImportantDateName.objects.filter(used=True):
620620
ImportantDate.objects.create(meeting=meeting,name=datename,date=meeting.date+datetime.timedelta(days=datename.default_offset_days))
621+
622+
def update_important_dates(meeting):
623+
assert meeting.type_id=='ietf'
624+
for datename in ImportantDateName.objects.filter(used=True):
625+
date = meeting.date+datetime.timedelta(days=datename.default_offset_days)
626+
d = ImportantDate.objects.filter(meeting=meeting, name=datename).first()
627+
if d:
628+
d.date = date
629+
d.save()
630+
else:
631+
ImportantDate.objects.create(meeting=meeting, name=datename, date=date)
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Copyright The IETF Trust 2018, All Rights Reserved
2+
from __future__ import unicode_literals
3+
4+
import sys
5+
import datetime
6+
7+
from django.core.management.base import BaseCommand, CommandError
8+
from django.core import serializers
9+
10+
import debug # pyflakes:ignore
11+
12+
from ietf.name.models import ImportantDateName
13+
from ietf.meeting.helpers import get_meeting, update_important_dates
14+
from ietf.meeting.models import Meeting, ImportantDate
15+
16+
class Command(BaseCommand):
17+
18+
help = 'Updates the important dates for the given meeting'
19+
20+
def add_arguments(self, parser):
21+
parser.add_argument('meeting', nargs='+', type=int)
22+
23+
def handle(self, *args, **options):
24+
datenames = ImportantDateName.objects.all()
25+
slugs = list(datenames.values_list('slug', flat=True))
26+
max_offset = - min(list(datenames.values_list('default_offset_days', flat=True)))
27+
#
28+
for m in options['meeting']:
29+
meeting = Meeting.objects.filter(number=m).first()
30+
if not meeting:
31+
self.stderr.write("\nMeeting not found: %s\n" % (m, ))
32+
continue
33+
if meeting.date < datetime.date.today() + datetime.timedelta(days=max_offset):
34+
self.stderr.write("\nMeeting %s: Won't change dates for meetings in the past or close future\n" % (meeting, ))
35+
continue
36+
self.stdout.write('\n%s\n\n' % (meeting, ))
37+
pre_dates = dict( (d.name_id, d) for d in ImportantDate.objects.filter(meeting=meeting) )
38+
update_important_dates(meeting)
39+
post_dates = dict( (d.name_id, d) for d in ImportantDate.objects.filter(meeting=meeting) )
40+
for slug in slugs:
41+
if slug in pre_dates:
42+
if pre_dates[slug].date == post_dates[slug].date:
43+
self.stdout.write('%-16s %s unchanged\n' % (slug, pre_dates[slug].date ))
44+
else:
45+
self.stdout.write('%-16s %s > %s\n' % (slug, pre_dates[slug].date, post_dates[slug].date))

0 commit comments

Comments
 (0)