mandate both csv files, so that we can always get room order. actually finding/creating objects

This commit is contained in:
Clinton Roy 2019-10-13 11:54:03 +11:00 committed by Joel Addison
parent 619a311487
commit ed21bc0335

View file

@ -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}"