first stab at linking presentations to slots.

This commit is contained in:
Clinton Roy 2019-10-13 15:41:21 +11:00 committed by Joel Addison
parent 1243e499e3
commit 92adbb3314

View file

@ -1,16 +1,14 @@
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from symposion.conference.models import Section, current_conference, Conference from symposion.conference.models import Section, current_conference
from symposion.schedule.models import (Day, Presentation, Room, SlotKind, Schedule, Slot)
from symposion.schedule.models import Day, Schedule, Session from symposion.proposals.models import ProposalBase
from symposion.schedule.models import (Day, Presentation, Room, SlotKind, Slot,
SlotRoom, ProposalBase)
from dateutil.parser import parse from dateutil.parser import parse
from collections import Counter from collections import Counter
from pathlib import Path from pathlib import Path
import csv import csv
@ -23,10 +21,6 @@ class Command(BaseCommand):
help = "Updates the schedule based on two csv files, "\ help = "Updates the schedule based on two csv files, "\
"one that gives all the talk slots, the other the talks." "one that gives all the talk slots, the other the talks."
def find_or_create_slot(self, date, start_time, end_time, room):
print(date, start_time, end_time, room)
return (date, start_time, end_time, room)
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument(self.SLOTS, type=Path) parser.add_argument(self.SLOTS, type=Path)
parser.add_argument(self.TALKS, type=Path) parser.add_argument(self.TALKS, type=Path)
@ -42,10 +36,6 @@ class Command(BaseCommand):
section = Section.objects.filter(conference=conf, slug="main").all().first() section = Section.objects.filter(conference=conf, slug="main").all().first()
schedule, _created = Schedule.objects.get_or_create(section=section) 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: with open(options[self.SLOTS]) as csv_file:
csv_reader = csv.reader(csv_file) csv_reader = csv.reader(csv_file)
@ -78,7 +68,7 @@ class Command(BaseCommand):
csv_reader = csv.reader(csv_file) csv_reader = csv.reader(csv_file)
used_rooms = next(csv_reader) used_rooms = next(csv_reader)
talk = {} talks = {}
assert used_rooms[0] == '', "Cell (1, 1) must be empty" assert used_rooms[0] == '', "Cell (1, 1) must be empty"
@ -99,7 +89,7 @@ class Command(BaseCommand):
assert (date, kindslot, room) in slot_details, f"Slot ({date}, '{kindslot}', '{room}') not found" assert (date, kindslot, room) in slot_details, f"Slot ({date}, '{kindslot}', '{room}') not found"
talk[(date, kindslot, room)] = int(talk_id) talks[(date, kindslot, room)] = int(talk_id)
else: else:
assert parse(row[0]), "Not a date: {row[0]}" assert parse(row[0]), "Not a date: {row[0]}"
@ -111,13 +101,10 @@ class Command(BaseCommand):
days = {} days = {}
for date in date_strs: for date in date_strs:
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(
@ -128,6 +115,7 @@ class Command(BaseCommand):
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 slotkinds[slotkind_name] = slotkind
slots = {}
for details in slot_details: for details in slot_details:
date, kindslot, room = details date, kindslot, room = details
start_time, end_time = slot_details[details] start_time, end_time = slot_details[details]
@ -143,3 +131,23 @@ class Command(BaseCommand):
start=start_time, end=end_time, start=start_time, end=end_time,
exclusive=exclusive) exclusive=exclusive)
slots[(date, kind_name, start_time, end_time)] = slot
for details, talk_id in talks.items():
date, kindslot, room = details
kind_name = kindslot.rsplit(' ', 1)[0]
(start_time, end_time) = slot_details[(date, kindslot, room)]
slot = slots[(date, kind_name, start_time, end_time)]
proposal = ProposalBase.objects.filter(pk=talk_id).first()
assert proposal, f"Could not find proposal {talk_id}"
preso = Presentation.objects.filter(proposal_base=proposal).first()
print(f'would like to set {preso} to slot {slot}')
#preso.slot = slot
preso.save()