def getschedule(courses: list): UW_API_KEY = os.environ.get('UW_API_KEY', None) if UW_API_KEY is None: raise APIKeyMissingError("Missing: UW_API_KEY" "All methods require an API Key. " "Refer to https://uwaterloo.ca/api/ " "For how to register for an API key.") fetcher = UWaterlooAPI(api_key=UW_API_KEY) schedule = [] for cur_course in courses: course_id = cur_course.split(' ') course_sections = fetcher.course_schedule(course_id[0], course_id[1]) for section in course_sections: if int(section['enrollment_capacity']) - int(section[ 'enrollment_total']) > 0 and 'LEC' in section['section']: starttime = timetoint( section['classes'][0]['date']['start_time']) endtime = timetoint(section['classes'][0]['date']['end_time']) course = uwcourse(cur_course, section['section'], section['classes'][0]['date']['weekdays'], starttime, endtime, {}) schedule.append(course) return schedule
while i <= 5: print "Enter name for Course #%d (e.g CS 350)" % (i) currentCourse = getCourse() while currentCourse in enteredCourses: print "You've already entered that course!" print "Enter name for Course #%d (e.g CS 350)" % (i) currentCourse = getCourse() #split course into two parts courseName = currentCourse.split(' ')[0].upper() courseCode = currentCourse.split(' ')[1] classes = uw.course_schedule(courseName, courseCode) if not classes: print "Your course isnt offered at UWaterloo, try entering it again or do CTRL-C to quit" continue enteredCourses.append(currentCourse) i = i + 1 #LISTS ALL PROFS FOR THE COURSE index = 1 for section in classes: currentSection = section currentSection = currentSection['classes'][0] startTime = currentSection["date"]["start_time"] endTime = currentSection["date"]["end_time"]
self.catalog=catalog self.section=section self.starts=starts self.ends=ends self.days=dyas self.prof=prof def display(self): print '%s:%s:%s:%s:%s:%s:%s' %(self.name,self.catalog,self.section,self.starts,self.ends,self.days,self.prof) def numeric_time(self): return (int(self.starts),int(self.ends)) uw=UWaterlooAPI(api_key=raw_input("Please Enter Your APIkey")) courses=raw_input("Please enter your desired courses, e.g. 'CS 136, MATH 230'") # acquiring course information courses=courses.split(',') course=[] for i in range(0,len(courses)): a=courses[i].split() course.append((a[0],a[1])) datalist=[] #downloading data via the api for k,v in course: datalist.append(uw.course_schedule(k,v)) time=raw_input('please enter the time period you would like to take course, e.g. "9:30,14:20" means courses starts from 9:30 ends before 14:20 everyday') print map(lambda x: filter(lambda a: a!=[], map(lambda y: y.__getitem__('classes')[0].__getitem__('instructors') , x)), datalist) professor=raw_input('please select your preferred profs from the list above ,e.g. "Tompkins,Dave", you do not need to include u quote')
def generateSchedules(request): uw = UWaterlooAPI(api_key=request.form['token']) #TODO: ENSURE INPUTS ARE PUT IN VALID FORMAT (USE REGEX) try: no_classes_before = request.form['before_filter'] no_classes_before_time = datetime.datetime.strptime( no_classes_before, '%H:%M') except: no_classes_before = None try: no_classes_after = request.form['after_filter'] no_classes_after_time = datetime.datetime.strptime( no_classes_after, '%H:%M') except: no_classes_after = None try: if request.form['tutorials']: tutorials_active = False else: tutorials_active = True except: tutorials_active = True num_courses = 0 for num in range(1, 8): if request.form['course' + str(num)]: num_courses = num master_list = [] for course in range(1, num_courses + 1): course_name = request.form['course' + str(course)] course_number = request.form['course' + str(course) + 'num'] course_title = course_name + " " + course_number if not checkValidCourse.course_exists(course_name, course_number, uw): error_message = ''.join( [course_name, course_number, " is not a valid course."]) return [False, error_message] courses_list = uw.course_schedule(course_name, course_number) num_sections = len(courses_list) course_list = [] lecture_list = [] tutorial_list = [] lab_list = [] for section in range(0, num_sections): class_type = courses_list[section]['section'] if class_type.find("LEC") == 0 or class_type.find( "TUT") == 0 or class_type.find("LAB") == 0: days = courses_list[section]['classes'][0]['date']['weekdays'] start_time = courses_list[section]['classes'][0]['date'][ 'start_time'] section_number = courses_list[section]['section'] if no_classes_before: start_time_datetime = datetime.datetime.strptime( start_time, '%H:%M') if start_time_datetime < no_classes_before_time: continue end_time = courses_list[section]['classes'][0]['date'][ 'end_time'] if no_classes_after: end_time_datetime = datetime.datetime.strptime( end_time, '%H:%M') if end_time_datetime > no_classes_after_time: continue course_type = courses_list[section][ 'section'] #either LEC, LAB, or TUT instructor = courses_list[section]['classes'][0]['instructors'] if instructor: instructor = str(instructor[0].encode('ascii', 'ignore')) else: instructor = 'None' if class_type.find("LEC") == 0: lec_section = [ days, start_time, end_time, course_type, instructor, course_title, section_number ] lecture_list.append(lec_section) if class_type.find("TUT") == 0 and tutorials_active: tut_section = [ days, start_time, end_time, course_type, instructor, course_title, section_number ] tutorial_list.append(tut_section) if class_type.find("LAB") == 0: lab_section = [ days, start_time, end_time, course_type, instructor, course_title, section_number ] lab_list.append(lab_section) if lecture_list: course_list.append(lecture_list) if tutorial_list: course_list.append(tutorial_list) if lab_list: course_list.append(lab_list) if master_list: course_list.append(master_list) master_list = list(itertools.product(*course_list)) for schedule in range(0, len(master_list)): try: flattened_list = list(flatten(master_list[schedule])) except: return False if (not checkValidSchedule.is_valid_schedule(flattened_list)): master_list[schedule] = [] else: master_list[schedule] = flattened_list final_list = filter(None, master_list) return final_list