Created
May 16, 2014 18:56
-
-
Save codersquid/3074cb52aabfcbcd5b49 to your computer and use it in GitHub Desktop.
one-off script to load up a lot of room slots with breaks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import os | |
import argparse | |
import csv | |
from datetime import datetime | |
import time | |
""" | |
This is a lazy one-off to get a bunch of Breaks listed in the schedule grid. | |
The current site allows one to upload a csv file to clobber things, but we already | |
have a grid. It needs a lot of work. I don't want to throw together a bunch of | |
new views and templates and crap. So, script ahoy! | |
This script is like running manage.py. The DJANGO_SETTINGS_MODULE environment | |
variable needs to be defined, or the default value of "scipy2014.settings" | |
must be in the python path. | |
In order for this to work a Schedule, Room, and SlotKind must already exist. | |
It will take a file like so: | |
date,time_start,time_end | |
7/8/2014,7:00,7:30 | |
7/8/2014,7:30,8:00 | |
7/8/2014,8:00,8:30 | |
7/8/2014,15:00,15:15 | |
7/8/2014,15:15,15:30 | |
Which you will pass to this: | |
python sched.py --csv talkbreaks.csv --room_name 'Room 204' | |
This is sloppy. It is not atomic. Backup everything before doing anything. | |
""" | |
def parse_row(row): | |
date = datetime.strptime(row['date'], "%m/%d/%Y") | |
start = get_time(row['time_start']) | |
end = get_time(row['time_end']) | |
return date, start, end | |
def get_time(timestring): | |
time_obj = time.strptime(timestring, '%H:%M') | |
time_obj = datetime(100, 1, 1, time_obj.tm_hour, time_obj.tm_min, 00) | |
return time_obj.time() | |
def build_parser(): | |
parser = argparse.ArgumentParser(description=""" | |
""") | |
parser.add_argument('--csv', type=file, help='schedule csv') | |
parser.add_argument('--schedule_id', default=2) | |
parser.add_argument('--room_name', default='Grand Ballroom') | |
parser.add_argument('--slotkind', default='Break') | |
return parser | |
if __name__ == '__main__': | |
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "scipy2014.settings") | |
from symposion.schedule.models import Day, Room, Schedule, Slot, SlotKind, SlotRoom | |
parser = build_parser() | |
args = parser.parse_args() | |
schedule = Schedule.objects.get(pk=args.schedule_id) | |
room = Room.objects.get(schedule=schedule, name=args.room_name) | |
slotkind = SlotKind.objects.get(schedule=schedule, label=args.slotkind) | |
reader = csv.DictReader(args.csv) | |
data = [dict((k.strip(), v.strip()) for k, v in x.items()) for x in reader] | |
for row in data: | |
date, start, end = parse_row(row) | |
day = Day.objects.get(schedule=schedule, date=date) | |
slot = Slot.objects.create( | |
kind=slotkind, | |
day=day, | |
start=start, | |
end=end, | |
) | |
slotroom = SlotRoom.objects.create(slot=slot, room=room) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment