making slots.
This commit is contained in:
parent
f70345ba8a
commit
a7f26de2fe
1 changed files with 28 additions and 10 deletions
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue