From 2591a943feec74715cb99de4e947439391221e28 Mon Sep 17 00:00:00 2001 From: Clinton Roy Date: Sat, 12 Oct 2019 14:47:33 +1100 Subject: [PATCH] basic parsing of timeslots. --- .../management/commands/update_schedule.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 pinaxcon/registrasion/management/commands/update_schedule.py diff --git a/pinaxcon/registrasion/management/commands/update_schedule.py b/pinaxcon/registrasion/management/commands/update_schedule.py new file mode 100644 index 00000000..e0f2a690 --- /dev/null +++ b/pinaxcon/registrasion/management/commands/update_schedule.py @@ -0,0 +1,44 @@ +from django.core.management.base import BaseCommand + +from collections import Counter +from pathlib import Path +import csv + +class Command(BaseCommand): + known_headers = ["date", "start time", "end time", "kind", "rooms"] + + + help = "Updates the schedule based on two csv files, "\ + "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): + parser.add_argument('timeslots', type=Path) + parser.add_argument('talks', nargs="?", type=Path, default=None) + + def handle(self, *args, **options): + slot = {} + slot_type_count = Counter() + + with open(options['timeslots']) as csv_file: + csv_reader = csv.reader(csv_file) + + headers = next(csv_reader) + + assert headers == self.known_headers + + for row in csv_reader: + assert len(row) == len(self.known_headers) + + date, start_time, end_time, kind, rooms = row + + slot_type_count[(date, kind)] += 1 + for room in rooms.split(';'): + room = room.strip() + slot[(date, kind, slot_type_count[(date, kind)])] = self.find_or_create_slot( + date, start_time, end_time, room) + +