making slots.

This commit is contained in:
Clinton Roy 2019-10-13 14:54:07 +11:00 committed by Joel Addison
parent f70345ba8a
commit a7f26de2fe

View file

@ -14,6 +14,7 @@ from collections import Counter
from pathlib import Path from pathlib import Path
import csv import csv
class Command(BaseCommand): class Command(BaseCommand):
known_headers = ["date", "start time", "end time", "kind", "rooms"] known_headers = ["date", "start time", "end time", "kind", "rooms"]
SLOTS = 'slots' SLOTS = 'slots'
@ -34,7 +35,7 @@ class Command(BaseCommand):
date_strs = set() date_strs = set()
slotkind_names = set() slotkind_names = set()
room_names = set() room_names = set()
slot = {} slot_details = {}
slot_type_count = Counter() slot_type_count = Counter()
conf = current_conference() conf = current_conference()
@ -65,19 +66,19 @@ class Command(BaseCommand):
assert kind, "kind cannot be blank" assert kind, "kind cannot be blank"
slot_type_count[(date, kind)] += 1 slot_type_count[(date, kind)] += 1
slot_name = f"{kind} {slot_type_count[(date, kind)]}" kindslot = f"{kind} {slot_type_count[(date, kind)]}"
for room in rooms.split(';'): for room in rooms.split(';'):
room = room.strip() room = room.strip()
room_names.add(room) room_names.add(room)
slot[(date, slot_name, room)] = self.find_or_create_slot( slot_details[(date, kindslot, room)] = (start_time, end_time)
date, start_time, end_time, room)
with open(options[self.TALKS]) as csv_file: with open(options[self.TALKS]) as csv_file:
csv_reader = csv.reader(csv_file) csv_reader = csv.reader(csv_file)
used_rooms = next(csv_reader) used_rooms = next(csv_reader)
talk = {}
assert used_rooms[0] == '', "Cell (1, 1) must be empty" assert used_rooms[0] == '', "Cell (1, 1) must be empty"
@ -88,7 +89,7 @@ class Command(BaseCommand):
cell = row[0] cell = row[0]
if cell.rsplit(' ', 1)[0] in slotkind_names: if cell.rsplit(' ', 1)[0] in slotkind_names:
kind = cell kindslot = cell
for i, room in enumerate(used_rooms[1:], 1): for i, room in enumerate(used_rooms[1:], 1):
talk_id = row[i] talk_id = row[i]
@ -96,10 +97,9 @@ class Command(BaseCommand):
if not talk_id: if not talk_id:
continue continue
assert (date, kind, room) in slot, f"Slot ({date}, '{kind}', '{room}') not found" assert (date, kindslot, room) in slot_details, f"Slot ({date}, '{kindslot}', '{room}') not found"
# TODO set the talk slot to the associated talk talk[(date, kindslot, room)] = int(talk_id)
# place_talk(slot[(date, slot_name)].talk = int(talk_id)
else: else:
assert parse(row[0]), "Not a date: {row[0]}" assert parse(row[0]), "Not a date: {row[0]}"
@ -114,14 +114,32 @@ class Command(BaseCommand):
print('schedule', type(schedule)) print('schedule', type(schedule))
day, _created = Day.objects.get_or_create( day, _created = Day.objects.get_or_create(
schedule=schedule, date=date) schedule=schedule, date=date)
days['date'] = day days[date] = day
print('days', days)
rooms = {} rooms = {}
for room_name in room_names: for room_name in room_names:
room, _created = Room.objects.get_or_create( room, _created = Room.objects.get_or_create(
schedule=schedule, name=room_name, order=used_rooms.index(room_name)) schedule=schedule, name=room_name, order=used_rooms.index(room_name))
slotkind = {} slotkinds = {}
for slotkind_name in slotkind_names: for slotkind_name in slotkind_names:
slotkind, _created = SlotKind.objects.get_or_create(schedule=schedule, label=slotkind_name) slotkind, _created = SlotKind.objects.get_or_create(schedule=schedule, label=slotkind_name)
slotkinds[slotkind_name] = slotkind
for details in slot_details:
date, kindslot, room = details
start_time, end_time = slot_details[details]
kind_name = kindslot.rsplit(' ', 1)[0]
# TODO this should not be hard coded
exclusive = kind_name in ["plenary", "morning tea", "afternoon tea"]
slot, _created = Slot.objects.get_or_create(
day=days[date],
kind=slotkinds[kind_name],
start=start_time, end=end_time,
exclusive=exclusive)