import datetime import sys import os.path from . import dsl from . import daterange from . import generate_timetable from . import parse_coursefile def parse_date(text): split = text.split('-') assert(len(split) == 3) return tuple(map(int, split)) def main(): if len(sys.argv) == 2: year, week, day = datetime.date.today().isocalendar() if day >= 6: # on weekend, show next week year, week, day = (datetime.date.today() + datetime.timedelta(2)).isocalendar() dates = daterange.week(year, week) filename = sys.argv[1] elif len(sys.argv) == 3: date = parse_date(sys.argv[1]) dates = daterange.between(date, date) filename = sys.argv[2] elif len(sys.argv) == 4: start = parse_date(sys.argv[1]) end = parse_date(sys.argv[2]) dates = daterange.between(start, end) filename = sys.argv[3] else: print('%s [start [end]] file' % (os.path.basename(sys.argv[0]))) print('start and end are in yyyy-mm-dd format') sys.exit(1) with open(filename, 'r') as f: courses_parsed = parse_coursefile.parse(f.read()) courses = [] for name, time_range, info, parsed_filter in courses_parsed: date_filter = dsl.compile(parsed_filter) courses.append((name, time_range, info, date_filter)) timetable = generate_timetable.generate_timetable(dates, courses) timetable_by_date = [] current_date = None current_date_entries = [] for date, time_range, name, info in timetable: if current_date is None: current_date = date if date == current_date: current_date_entries.append((time_range, name, info)) else: timetable_by_date.append((current_date, current_date_entries)) current_date = date current_date_entries = [] current_date_entries.append((time_range, name, info)) if current_date is not None and current_date_entries != []: timetable_by_date.append((current_date, current_date_entries)) print(dates) print() for date, entries in timetable_by_date: entries.sort(key = lambda x: x[0].range()[0]) previous_time_range = None print(date) for time_range, name, info in entries: print('\t%s %s: %s' % (time_range, name, info)) if previous_time_range is not None: if time_range.overlaps(previous_time_range): print('\t\tOverlap') previous_time_range = time_range