33
44import datetime
55import os
6+ import re
67import subprocess
78
89from django .conf import settings
@@ -33,7 +34,7 @@ def copy_materials(meeting):
3334 os .makedirs (target )
3435 subprocess .call (['rsync' ,'-a' ,source ,target ])
3536
36- def migrate_interim_meetings (apps , schema_editor ):
37+ def migrate_interim_meetings_forward (apps , schema_editor ):
3738 """For all existing interim meetings create an official schedule and timeslot assignments"""
3839 Meeting = apps .get_model ("meeting" , "Meeting" )
3940 Schedule = apps .get_model ("meeting" , "Schedule" )
@@ -44,38 +45,66 @@ def migrate_interim_meetings(apps, schema_editor):
4445
4546 meetings = Meeting .objects .filter (type = 'interim' )
4647 for meeting in meetings :
48+ single_digit_serial = re .search ('^(.+)-([0-9])$' , meeting .number )
49+ dirty = False
50+ if single_digit_serial :
51+ name = single_digit_serial .group (1 )
52+ serial = single_digit_serial .group (2 )
53+ meeting .number = "%s-%02d" % (name , int (serial ))
54+ dirty = True
4755 if not meeting .agenda :
4856 meeting .agenda = Schedule .objects .create (
4957 meeting = meeting ,
5058 owner = system ,
5159 name = 'Official' )
60+ dirty = True
61+ if dirty :
5262 meeting .save ()
63+ dirty = False
5364 session = meeting .session_set .first () # all legacy interim meetings have one session
5465 time = datetime .datetime .combine (meeting .date , datetime .time (0 ))
55- slot = TimeSlot .objects .create (
56- meeting = meeting ,
57- type_id = "session" ,
58- duration = session .requested_duration ,
59- time = time )
60- SchedTimeSessAssignment .objects .create (
66+ if TimeSlot .objects .filter (meeting = meeting , type_id = "session" , time = time ).exists ():
67+ slot = TimeSlot .objects .get (meeting = meeting , type_id = "session" , time = time ).exists ()
68+ else :
69+ slot = TimeSlot .objects .create (
70+ meeting = meeting ,
71+ type_id = "session" ,
72+ duration = session .requested_duration ,
73+ time = time )
74+ SchedTimeSessAssignment .objects .get_or_create (
6175 timeslot = slot ,
6276 session = session ,
6377 schedule = meeting .agenda )
6478
65- def migrate_interim_materials_files (apps , schema_editor ):
79+ def migrate_interim_meetings_backward (apps , schema_editor ):
80+ Meeting = apps .get_model ("meeting" , "Meeting" )
81+ meetings = Meeting .objects .filter (type = 'interim' )
82+ for meeting in meetings :
83+ zero_digit_serial = re .search ('^(.+)-0([0-9])$' , meeting .number )
84+ if zero_digit_serial :
85+ name = zero_digit_serial .group (1 )
86+ serial = zero_digit_serial .group (2 )
87+ meeting .number = "%s-%s" % (name , serial )
88+ meeting .save ()
89+
90+ def migrate_interim_materials_files_forward (apps , schema_editor ):
6691 """Copy interim materials files to new location"""
6792 Meeting = apps .get_model ("meeting" , "Meeting" )
6893
6994 for meeting in Meeting .objects .filter (type = 'interim' ):
7095 copy_materials (meeting )
7196
97+ def migrate_interim_materials_files_backward (apps , schema_editor ):
98+ """Copy interim materials files to new location"""
99+ pass
100+
72101class Migration (migrations .Migration ):
73102
74103 dependencies = [
75104 ('meeting' , '0023_session_remote_instructions' ),
76105 ]
77106
78107 operations = [
79- migrations .RunPython (migrate_interim_meetings ),
80- migrations .RunPython (migrate_interim_materials_files ),
108+ migrations .RunPython (migrate_interim_meetings_forward , migrate_interim_meetings_backward ),
109+ migrations .RunPython (migrate_interim_materials_files_forward , migrate_interim_materials_files_backward ),
81110 ]
0 commit comments