def get_course_desc(program: str, designation: int, reqtype: str): res = { 'summary': lambda course: course_desc_dict[course].summary, 'name': lambda course: course_desc_dict[course].name, 'formerly': lambda course: course_desc_dict[course].formerly, 'creditbracket': lambda course: course_desc_dict[course].creditbracket }[reqtype](cd.Course(program, str(designation))) return jsonify(res)
def scheduler(): error = None result_plan: List[Tuple] = None if request.method == 'POST': str_initial_state: str = request.form['initial_state'] str_goal_conditions: str = request.form['goal_conditions'] try: initial_state: List[cd.Course] = [] goal_conditions: List[cd.Course] = [] for course_str in str_initial_state.split(';'): course_split: List[str] = course_str.strip().split(' ') initial_state.append(cd.Course(course_split[0].strip(), course_split[1].strip())) for course_str in str_goal_conditions.split(';'): course_split: List[str] = course_str.strip().split(' ') goal_conditions.append(cd.Course(course_split[0].strip(), course_split[1].strip())) result_dict = sps.course_scheduler(course_dict, goal_conditions, initial_state) result_plan = list(sorted([(k,v) for k,v in result_dict.items()], key=lambda tuple: tuple[1].terms)) except KeyError as e: error = 'Course not found: ' + str(e) return render_template('scheduler.html', error=error, result_plan=result_plan, course_desc_dict=course_desc_dict)
def informer(): error = None course = None course_info: spm.CourseDesc = None if request.method == 'POST': form_course: cd.Course = cd.Course(request.form['program'].strip(), request.form['designation'].strip()) if form_course in course_desc_dict: course_info = course_desc_dict[form_course] course = form_course else: error = 'Course not found: ' + form_course return render_template('informer.html', error=error, course=course, course_info=course_info)
def recommender(): error = None recommendation_list: List[Tuple] = None if request.method == 'POST': num: int = int(request.form['num']) str_courses: str = request.form['courses'] try: str_course_list: List[str] = str_courses.split(';') courses: List[cd.Course] = [] for course_str in str_course_list: course_split: List[str] = course_str.strip().split(' ') courses.append(cd.Course(course_split[0], course_split[1])) recommendation_list = spr.recommend_courses_using_liked_courses(courses, num) except KeyError as e: error = 'Course not found: ' + str(e) return render_template('recommender.html', error=error, recommendation_list=recommendation_list, course_desc_dict=course_desc_dict, course_dict=course_dict)
def create_course_desc_dict( course_dict: Dict[cd.Course, cd.CourseInfo]) -> Dict[cd.Course, CourseDesc]: data: str with open('ugad.txt', 'r') as ugad: # TODO: consider case where newline is a continuation of character from previous line data = ugad.read() # Handles cases where a word is continued from previous line in ugad catalog for match in fixcontinuednewlines.findall(data): data = data.replace(match[0] + '\n' + match[1], match[0] + match[1]) data = data.replace('\n', ' ') course_desc_dict: Dict[cd.Course, CourseDesc] = {} for match in p.findall(data): course: cd.Course = cd.Course(*match[0].split(' ')) if course in course_dict: course_desc_dict[course] = CourseDesc(*match[1:5]) return course_desc_dict
while True: try: print( "1: Search using liked courses\n2: Search using keywords\n3: Render course tree" ) opt: int = int(input("Option: ")) if opt == 1: got: str = input( 'Input # of desired results followed by semicolon separated courses you liked: ' ) gotargs: List[str] = got.split(';') n: int = int(gotargs[0]) courses: List[cd.Course] = [] for course_str in gotargs[1:]: course_split: List[str] = course_str.split(' ') courses.append(cd.Course(course_split[0], course_split[1])) recommendation_list = recommend_courses_using_liked_courses( courses, n) pprint(recommendation_list) elif opt == 2: got: str = input( 'Input # of desired results, a semicolon, and search text: ' ) gotargs: List[str] = got.split(';') n: int = int(gotargs[0]) recommendation_list = recommend_courses_using_search_text( gotargs[1], n) pprint(recommendation_list) elif opt == 3:
# Handles cases where a word is continued from previous line in ugad catalog for match in fixcontinuednewlines.findall(data): data = data.replace(match[0] + '\n' + match[1], match[0] + match[1]) data = data.replace('\n', ' ') course_desc_dict: Dict[cd.Course, CourseDesc] = {} for match in p.findall(data): course: cd.Course = cd.Course(*match[0].split(' ')) if course in course_dict: course_desc_dict[course] = CourseDesc(*match[1:5]) return course_desc_dict if __name__ == '__main__': print('*** Course Matcher ***') course_desc_dict: Dict[cd.Course, CourseDesc] = create_course_desc_dict( cd.create_course_dict()) while True: try: got: List[str] = input( 'Input course you would like to get the description for: ' ).split(' ') desc: CourseDesc = course_desc_dict[cd.Course(got[0], got[1])] print(desc.name, desc.formerly, desc.creditbracket) print(desc.summary) except Exception as e: print('Failed:', e)