Beispiel #1
0
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
Beispiel #2
0
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')

Beispiel #4
0
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