Ejemplo n.º 1
0
    def handler_course_id_of_course(self, params: QueryParameters) -> str:

        params.require_class_id()

        course = self.get_course(params.class_id)

        return f"The class number of {course.full_name()} is {course.id}."
Ejemplo n.º 2
0
    def handler_hours_of_course(self, params: QueryParameters) -> str:

        params.require_class_id()

        course = self.get_course(params.class_id)

        return f"{course.full_name()} meets for {course.units} hours a week."
Ejemplo n.º 3
0
    def handler_title_of_course(self, params: QueryParameters) -> str:

        params.require_class_id()

        course = self.get_course(params.class_id)

        return f"The title of {course.full_name()} is {course.title}."
Ejemplo n.º 4
0
    def handler_teachers_of_course_next(self, params: QueryParameters) -> str:

        params.require_class_id()

        sections = self.datastore.get_sections_from_id_and_quarter(
            params.class_id, False)

        if len(sections) == 0:
            return f"Sorry, there are no sections of STAT {params.class_id} next quarter."

        professors = set()

        # Correct formatting and no duplicates
        for section in sections:
            name = section.teacher.split(", ")[0].title()
            professors.add(name)

        professors = list(professors)

        if len(professors) > 1:
            professors[-1] = "and " + professors[-1]

        # Can have 0, 1, or multiple professors teaching a class
        if len(professors) == 1:
            return f"Professor {', '.join(professors)} is teaching {sections[0].full_name()} next quarter."
        elif len(professors) == 0:
            return f"Sorry, no one is teaching STAT {params.class_id} next quarter."
        else:
            return f"Professors {', '.join(professors)} are teaching {sections[0].full_name()} next quarter."
Ejemplo n.º 5
0
    def handler_times_course_offered_next(self,
                                          params: QueryParameters) -> str:

        params.require_class_id()

        sections = self.datastore.get_sections_from_id_and_quarter(
            params.class_id, False)

        if len(sections) == 0:
            return f"Sorry, there are no sections of STAT {params.class_id} next quarter."

        times = []

        for section in sections:
            if len(section.times_offered) > 0:
                times.append(section.times_offered)

        if len(times) > 2:
            times[-1] = "and " + str(times[-1])

        if len(times) == 0:
            return f"Sorry, {sections[0].full_name()} isn't offered synchronously next quarter. "
        elif len(times) == 2:
            return f"{sections[0].full_name()} is offered at {times[0] + ' and ' + times[1]} each week next quarter."
        else:
            return f"{sections[0].full_name()} is offered at {', '.join(times)} each week next quarter."
Ejemplo n.º 6
0
    def handler_level_of_course(
            self,
            params: QueryParameters) -> str:  #TODO: Verify works correctly

        params.require_class_id()

        course = self.get_course(params.class_id)

        return f"The level of {course.full_name()} is {str(course.id)[0]}00"
Ejemplo n.º 7
0
    def handler_description_of_course(
        self, params: QueryParameters
    ) -> str:  #TODO: Make sure response sounds natural

        params.require_class_id()

        course = self.get_course(params.class_id)

        return f"{course.full_name()} is about {course.about}."
Ejemplo n.º 8
0
    def handler_is_course_elective(self, params: QueryParameters) -> str:

        params.require_class_id()

        course = self.get_course(params.class_id)

        if course.elective:
            return f"Yes, {course.full_name()} is an elective."
        else:
            return f"No, {course.full_name()} is not an elective."
Ejemplo n.º 9
0
    def handler_does_course_involve_coding(self,
                                           params: QueryParameters) -> str:

        params.require_class_id()

        course = self.get_course(params.class_id)

        if course.coding_involved:
            return f"Yes, {course.full_name()} involves coding."
        else:
            return f"No, {course.full_name()} does not involve coding."
Ejemplo n.º 10
0
    def handler_enrollment_cap_of_course_next(self,
                                              params: QueryParameters) -> str:

        params.require_class_id()

        sections = self.datastore.get_sections_from_id_and_quarter(
            params.class_id, False)

        cap = 0
        for section in sections:
            cap += section.enrollment_cap
        return f"The enrollment cap for {sections[0].full_name()} next quarter is {cap}."
Ejemplo n.º 11
0
    def handler_terms_course_offered(self, params: QueryParameters) -> str:

        params.require_class_id()

        course = self.get_course(params.class_id)

        if len(course.terms) == 0:
            return f"Sorry, {course.full_name()} is not a regularly offered class."
        if len(course.terms) == 1:
            return f"{course.full_name()} is typically offered in the {', '.join([t.title() for t in course.terms])}."
        else:
            return f"{course.full_name()} is typically offered in the following quarters: {', '.join([t.title() for t in course.terms])}."
Ejemplo n.º 12
0
    def handler_course_offered_in_term(self, params: QueryParameters) -> str:

        params.require_class_id()

        params.require_term()

        course = self.get_course(params.class_id)

        if params.term in course.terms:
            return f"Yes, STAT {params.class_id} is offered in the {params.term.title()}."
        else:
            return f"Sorry, STAT {params.class_id} is not offered in the {params.term.title()}."
Ejemplo n.º 13
0
    def handler_number_of_terms_course_offered(self,
                                               params: QueryParameters) -> str:

        params.require_class_id()

        course = self.get_course(params.class_id)

        numberOfTerms = len(course.terms)

        if numberOfTerms == 1:
            return f"{course.full_name()} is usually offered in {numberOfTerms} quarter."
        else:
            return f"{course.full_name()} is usually offered in {numberOfTerms} quarters."
Ejemplo n.º 14
0
    def handler_prereqs_of_course(self, params: QueryParameters) -> str:

        # Require the presence of variable for a given intent, this corresponds to the [variable] in the query
        params.require_class_id()

        # Retrieve the course object via self.get_course() this handles the case of an invalid course automatically
        course = self.get_course(params.class_id)

        #Special case response since prereqs could be None
        if course.prereqs is None:
            return f"{course.full_name()} has no prerequisite courses."

        #prefer to use course.full_name() as opposed to course.title
        return f"The prerequisites for {course.full_name()} are: {course.prereqs}"