Skip to content

Commit 7a2530a

Browse files
Add management command to set up timeslots/sessions for testing/demoing 'purpose' field
- Legacy-Id: 19430
1 parent 173e438 commit 7a2530a

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import datetime
2+
import random
3+
4+
from django.core.management.base import BaseCommand, CommandError
5+
6+
from ietf.group.models import Group
7+
from ietf.meeting.factories import RoomFactory, TimeSlotFactory, SessionFactory
8+
from ietf.meeting.helpers import get_meeting
9+
from ietf.meeting.models import Room, Session
10+
from ietf.name.models import SessionPurposeName
11+
12+
13+
class Command(BaseCommand):
14+
help = 'Set up a demo of the session purpose updates'
15+
16+
DEMO_PREFIX='PDemo' # used to identify things added by this command
17+
18+
def add_arguments(self, parser):
19+
parser.add_argument('--remove', action='store_true')
20+
21+
def handle(self, *args, **options):
22+
if options['remove']:
23+
self.remove_demo()
24+
else:
25+
self.install_demo()
26+
27+
def remove_demo(self):
28+
self.stdout.write(f'Removing rooms with "{self.DEMO_PREFIX}" name prefix...\n')
29+
Room.objects.filter(name__startswith=self.DEMO_PREFIX).delete()
30+
self.stdout.write(f'Removing sessions with "{self.DEMO_PREFIX}" name prefix...\n')
31+
Session.objects.filter(name__startswith=self.DEMO_PREFIX).delete()
32+
33+
def install_demo(self):
34+
# get meeting
35+
try:
36+
meeting = get_meeting(days=14) # matches how secr app finds meetings
37+
except:
38+
raise CommandError('No upcoming meeting to modify')
39+
40+
# create rooms
41+
self.stdout.write('Creating rooms...\n')
42+
rooms = [
43+
RoomFactory(meeting=meeting, name=f'{self.DEMO_PREFIX} 1'),
44+
RoomFactory(meeting=meeting, name=f'{self.DEMO_PREFIX} 2'),
45+
RoomFactory(meeting=meeting, name=f'{self.DEMO_PREFIX} 3'),
46+
]
47+
48+
# get all the timeslot types used by a session purpose
49+
type_ids = set()
50+
for purpose in SessionPurposeName.objects.filter(used=True):
51+
type_ids.update(purpose.timeslot_types)
52+
53+
# set up timeslots
54+
self.stdout.write('Creating timeslots...\n')
55+
for room in rooms:
56+
for day in range(meeting.days):
57+
date = meeting.get_meeting_date(day)
58+
for n, type_id in enumerate(type_ids):
59+
TimeSlotFactory(
60+
type_id=type_id,
61+
meeting=meeting,
62+
location=room,
63+
time=datetime.datetime.combine(date, datetime.time(10, 0, 0)) + datetime.timedelta(hours=n),
64+
duration=datetime.timedelta(hours=1),
65+
)
66+
67+
# set up sessions
68+
self.stdout.write('Creating sessions...')
69+
groups_for_session_purpose = {
70+
purpose.slug: list(
71+
Group.objects.filter(
72+
type__features__session_purposes__contains=f'"{purpose.slug}"',
73+
state_id='active',
74+
)
75+
)
76+
for purpose in SessionPurposeName.objects.filter(used=True)
77+
}
78+
for purpose in SessionPurposeName.objects.filter(used=True):
79+
for type_id in purpose.timeslot_types:
80+
group=random.choice(groups_for_session_purpose[purpose.slug])
81+
SessionFactory(
82+
meeting=meeting,
83+
purpose=purpose,
84+
type_id=type_id,
85+
group=group,
86+
name=f'{self.DEMO_PREFIX} for {group.acronym}',
87+
status_id='schedw',
88+
add_to_schedule=False,
89+
)
90+
91+
self.stdout.write(f'\nRooms and sessions created with "{self.DEMO_PREFIX}" as name prefix\n')

0 commit comments

Comments
 (0)