mandate both csv files, so that we can always get room order. actually finding/creating objects
This commit is contained in:
parent
619a311487
commit
ed21bc0335
1 changed files with 60 additions and 29 deletions
|
@ -1,5 +1,13 @@
|
||||||
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.schedule.models import Day, Schedule, Session
|
||||||
|
|
||||||
|
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
|
||||||
|
@ -20,13 +28,23 @@ class Command(BaseCommand):
|
||||||
|
|
||||||
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, nargs="?", type=Path, default=None)
|
parser.add_argument(self.TALKS, type=Path)
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
all_kinds, all_rooms = set(), set()
|
date_strs = set()
|
||||||
|
slotkind_names = set()
|
||||||
|
room_names = set()
|
||||||
slot = {}
|
slot = {}
|
||||||
slot_type_count = Counter()
|
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:
|
with open(options[self.SLOTS]) as csv_file:
|
||||||
csv_reader = csv.reader(csv_file)
|
csv_reader = csv.reader(csv_file)
|
||||||
|
|
||||||
|
@ -38,10 +56,11 @@ class Command(BaseCommand):
|
||||||
assert len(row) == len(self.known_headers)
|
assert len(row) == len(self.known_headers)
|
||||||
|
|
||||||
rowdate, start_time, end_time, kind, rooms = row
|
rowdate, start_time, end_time, kind, rooms = row
|
||||||
all_kinds.add(kind)
|
slotkind_names.add(kind)
|
||||||
|
|
||||||
if rowdate:
|
if rowdate:
|
||||||
date = rowdate
|
date = rowdate
|
||||||
|
date_strs.add(date)
|
||||||
|
|
||||||
assert kind, "kind cannot be blank"
|
assert kind, "kind cannot be blank"
|
||||||
|
|
||||||
|
@ -50,14 +69,11 @@ class Command(BaseCommand):
|
||||||
|
|
||||||
for room in rooms.split(';'):
|
for room in rooms.split(';'):
|
||||||
room = room.strip()
|
room = room.strip()
|
||||||
all_rooms.add(room)
|
room_names.add(room)
|
||||||
|
|
||||||
slot[(date, slot_name, room)] = self.find_or_create_slot(
|
slot[(date, slot_name, room)] = self.find_or_create_slot(
|
||||||
date, start_time, end_time, room)
|
date, start_time, end_time, room)
|
||||||
|
|
||||||
print(slot.keys())
|
|
||||||
|
|
||||||
if options[self.TALKS]:
|
|
||||||
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)
|
||||||
|
|
||||||
|
@ -66,16 +82,14 @@ class Command(BaseCommand):
|
||||||
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:]:
|
for room in used_rooms[1:]:
|
||||||
assert room in all_rooms, f"Unknown room: {room}"
|
assert room in room_names, f"Unknown room: {room}"
|
||||||
|
|
||||||
for row in csv_reader:
|
for row in csv_reader:
|
||||||
cell = row[0]
|
cell = row[0]
|
||||||
|
|
||||||
if cell.rsplit(' ', 1)[0] in all_kinds:
|
if cell.rsplit(' ', 1)[0] in slotkind_names:
|
||||||
kind = cell
|
kind = cell
|
||||||
|
|
||||||
print('used_rooms', used_rooms)
|
|
||||||
|
|
||||||
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]
|
||||||
|
|
||||||
|
@ -94,3 +108,20 @@ class Command(BaseCommand):
|
||||||
|
|
||||||
for col in row[1:]:
|
for col in row[1:]:
|
||||||
assert col == '', f"All other columns must be empty: {date}"
|
assert col == '', f"All other columns must be empty: {date}"
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue