From 20ee2240f0b97b85c6ae2f604d7b75a0134a82d6 Mon Sep 17 00:00:00 2001 From: phowell Date: Tue, 27 Aug 2024 13:36:26 -0700 Subject: [PATCH] schedule name conflict --- schedule.py | 125 ------------------------------------ schedules.py | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 175 insertions(+), 125 deletions(-) delete mode 100644 schedule.py create mode 100644 schedules.py diff --git a/schedule.py b/schedule.py deleted file mode 100644 index ea458e8..0000000 --- a/schedule.py +++ /dev/null @@ -1,125 +0,0 @@ -# schedule.py -# -# experimenting with manipulating and querying the schedule of courses - - -import json, re -from datetime import datetime - -course_types = {'in-person':'IP','hybrid':'H','online':'O','online live':'OL'} - -def course_to_string(crs): - # crn type days start end cred code name teacher - lengths = [5, 3, 5, 6, 6, 4, 4, 13, 35, 25] - items = [ crs[x] for x in 'crn,type,days,time_start,time_end,cred,act,code,name,teacher'.split(',')] - items[1] = course_types[ items[1] ] - items[5] = items[5][0:3] - result = " ".join(f"{str(val):{width}}" for val, width in zip(items, lengths)) - return result - - -def parse_days(str_days): - # return a list with actual day of week names - days = [] - if 'M' in str_days: - days.append('monday') - if 'T' in str_days: - days.append('tuesday') - if 'W' in str_days: - days.append('wednesday') - if 'R' in str_days: - days.append('thursday') - if 'F' in str_days: - days.append('friday') - if 'S' in str_days: - days.append('saturday') - return days - -def parse_courses(filename): - with open(filename) as f: - courses = json.load(f) - - locations, teachers, days, now = {}, {}, {}, datetime.now() - weekdays = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] - - for course in courses: - #print(course) - - # Add course to teachers dict - course['teacher'] = re.sub(r'\s+', ' ', course['teacher']) - teachers.setdefault(course['teacher'], []).append(course) - - if course['type'] != 'in-person': continue - # Add course to locations dict - locations.setdefault(course['loc'], []).append(course) - - # Add course to days dict - for day in parse_days(course['days']): - days.setdefault(day, []).append(course) - - # Check if course is happening now - if course['time_start'] == '': continue - if course['time_end'] == '': continue - start_time = datetime.strptime(course['time_start'], '%H:%M') - end_time = datetime.strptime(course['time_end'], '%H:%M') - #if start_time.time() <= now.time() <= end_time.time(): - # print(f"{course['code']} is happening now in {course['loc']}") - - return locations, teachers, days - -# Example usage -locations, teachers, days = parse_courses('cache/sample_semester.json') - -#print(json.dumps(locations,indent=2)) -#print(json.dumps(teachers,indent=2)) -#print(json.dumps(days,indent=2)) - -dump = 0 - -if dump: - for L,C in locations.items(): - print(f"\n{L}") - for crs in C: - print(" " + course_to_string(crs)) - - for T,C in teachers.items(): - print(f"\n{T}") - for crs in C: - print(" " + course_to_string(crs)) - -# EXAMPLES -# -print("\n\n") - -# Get schedule for a specific room on a specific day -room = 'HU 104' -day = 'monday' -print(f"\nSchedule for {room} on {day}:") -for course in locations[room]: - if day in parse_days(course['days']): - print(" " + course_to_string(course)) - -# Get weekly schedule for a specific teacher -teacher = 'Kimberly J Smith' -print(f"\nWeekly schedule for {teacher}:") -for course in teachers[teacher]: - print(" " + course_to_string(course)) - -import sys -import os - -columns, rows = os.get_terminal_size() -print(f"Terminal size: {columns} columns x {rows} rows") - - -def write_at(row, col, text): - sys.stdout.write(f"\033[{row};{col}H{text}") - sys.stdout.flush() - -# -lines = [1,2,3,4,5] -for L in lines: - myline = rows - L - write_at(myline, 1, f"This is line {myline}") - -write_at(rows,0,'') diff --git a/schedules.py b/schedules.py new file mode 100644 index 0000000..05b4bdb --- /dev/null +++ b/schedules.py @@ -0,0 +1,175 @@ +# schedule.py +# +# experimenting with manipulating and querying the schedule of courses + + +import json, re, sys, os +from datetime import datetime +from fast_autocomplete import AutoComplete + +columns, rows = os.get_terminal_size() +course_types = {'in-person':'IP','hybrid':'H','online':'O','online live':'OL'} + +def course_to_string(crs): + # crn type days start end cred code name teacher + lengths = [5, 3, 5, 6, 6, 4, 4, 13, 35, 25] + items = [ crs[x] for x in 'crn,type,days,time_start,time_end,cred,act,code,name,teacher'.split(',')] + items[1] = course_types[ items[1] ] + items[5] = items[5][0:3] + result = " ".join(f"{str(val):{width}}" for val, width in zip(items, lengths)) + return result + + +def parse_days(str_days): + # return a list with actual day of week names + days = [] + if 'M' in str_days: + days.append('monday') + if 'T' in str_days: + days.append('tuesday') + if 'W' in str_days: + days.append('wednesday') + if 'R' in str_days: + days.append('thursday') + if 'F' in str_days: + days.append('friday') + if 'S' in str_days: + days.append('saturday') + return days + +def parse_courses(filename): + with open(filename) as f: + courses = json.load(f) + + locations, teachers, days, now = {}, {}, {}, datetime.now() + weekdays = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] + + for course in courses: + #print(course) + + # Add course to teachers dict + course['teacher'] = re.sub(r'\s+', ' ', course['teacher']) + teachers.setdefault(course['teacher'], []).append(course) + + if course['type'] != 'in-person': continue + # Add course to locations dict + locations.setdefault(course['loc'], []).append(course) + + # Add course to days dict + for day in parse_days(course['days']): + days.setdefault(day, []).append(course) + + # Check if course is happening now + if course['time_start'] == '': continue + if course['time_end'] == '': continue + start_time = datetime.strptime(course['time_start'], '%H:%M') + end_time = datetime.strptime(course['time_end'], '%H:%M') + #if start_time.time() <= now.time() <= end_time.time(): + # print(f"{course['code']} is happening now in {course['loc']}") + + return locations, teachers, days + +def write_at(row, col, text): + sys.stdout.write(f"\033[{row};{col}H{text}") + sys.stdout.flush() + +def write_search_results(res,maximum=8): + height = max(len(res),maximum) + while len(res)