diff --git a/pinaxcon/registrasion/management/commands/update_schedule.py b/pinaxcon/registrasion/management/commands/update_schedule.py index dbfb936c..415a7828 100644 --- a/pinaxcon/registrasion/management/commands/update_schedule.py +++ b/pinaxcon/registrasion/management/commands/update_schedule.py @@ -1,5 +1,13 @@ from django.core.management.base import BaseCommand +from symposion.conference.models import Section, current_conference, Conference + + +from symposion.schedule.models import Day, Schedule, Session + +from symposion.schedule.models import (Day, Presentation, Room, SlotKind, Slot, + SlotRoom, ProposalBase) + from dateutil.parser import parse from collections import Counter @@ -20,13 +28,23 @@ class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument(self.SLOTS, type=Path) - parser.add_argument(self.TALKS, nargs="?", type=Path, default=None) + parser.add_argument(self.TALKS, type=Path) def handle(self, *args, **options): - all_kinds, all_rooms = set(), set() + date_strs = set() + slotkind_names = set() + room_names = set() slot = {} slot_type_count = Counter() + conf = current_conference() + section = Section.objects.filter(conference=conf, slug="main").all().first() + schedule, _created = Schedule.objects.get_or_create(section=section) + + print('conf', conf) + print('section', section) + print('schedule', schedule) + with open(options[self.SLOTS]) as csv_file: csv_reader = csv.reader(csv_file) @@ -38,10 +56,11 @@ class Command(BaseCommand): assert len(row) == len(self.known_headers) rowdate, start_time, end_time, kind, rooms = row - all_kinds.add(kind) + slotkind_names.add(kind) if rowdate: date = rowdate + date_strs.add(date) assert kind, "kind cannot be blank" @@ -50,47 +69,59 @@ class Command(BaseCommand): for room in rooms.split(';'): room = room.strip() - all_rooms.add(room) + room_names.add(room) slot[(date, slot_name, room)] = self.find_or_create_slot( date, start_time, end_time, room) - print(slot.keys()) + with open(options[self.TALKS]) as csv_file: + csv_reader = csv.reader(csv_file) - if options[self.TALKS]: - with open(options[self.TALKS]) as csv_file: - csv_reader = csv.reader(csv_file) + used_rooms = next(csv_reader) - used_rooms = next(csv_reader) + assert used_rooms[0] == '', "Cell (1, 1) must be empty" - assert used_rooms[0] == '', "Cell (1, 1) must be empty" + for room in used_rooms[1:]: + assert room in room_names, f"Unknown room: {room}" - for room in used_rooms[1:]: - assert room in all_rooms, f"Unknown room: {room}" + for row in csv_reader: + cell = row[0] - for row in csv_reader: - cell = row[0] + if cell.rsplit(' ', 1)[0] in slotkind_names: + kind = cell - if cell.rsplit(' ', 1)[0] in all_kinds: - kind = cell + for i, room in enumerate(used_rooms[1:], 1): + talk_id = row[i] - print('used_rooms', used_rooms) + if not talk_id: + continue - for i, room in enumerate(used_rooms[1:], 1): - talk_id = row[i] + assert (date, kind, room) in slot, f"Slot ({date}, '{kind}', '{room}') not found" - if not talk_id: - continue + # TODO set the talk slot to the associated talk + # place_talk(slot[(date, slot_name)].talk = int(talk_id) - assert (date, kind, room) in slot, f"Slot ({date}, '{kind}', '{room}') not found" + else: + assert parse(row[0]), "Not a date: {row[0]}" - # TODO set the talk slot to the associated talk - # place_talk(slot[(date, slot_name)].talk = int(talk_id) + date = row[0] - else: - assert parse(row[0]), "Not a date: {row[0]}" + for col in row[1:]: + assert col == '', f"All other columns must be empty: {date}" - date = row[0] + days = {} + for date in date_strs: + print('schedule', type(schedule)) + day, _created = Day.objects.get_or_create( + schedule=schedule, date=date) + days['date'] = day + + rooms = {} + for room_name in room_names: + room, _created = Room.objects.get_or_create( + schedule=schedule, name=room_name, order=used_rooms.index(room_name)) + + slotkind = {} + for slotkind_name in slotkind_names: + slotkind, _created = SlotKind.objects.get_or_create(schedule=schedule, label=slotkind_name) - for col in row[1:]: - assert col == '', f"All other columns must be empty: {date}"