Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)