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