def respond(self, request, year, quarter, summer_term): timer = Timer() try: if not is_student(): log_msg(logger, timer, "Not a student, abort!") return data_not_found() term = get_specific_term(year=year, quarter=quarter) schedule = get_schedule_by_term(request, term) if summer_term is not None and len(summer_term) > 0: summer_term = summer_term.replace(",", "") filter_schedule_sections_by_summer_term(schedule, summer_term) if len(schedule.sections) == 0: log_data_not_found_response(logger, timer) return data_not_found() book_data = get_textbook_by_schedule(schedule) by_sln = index_by_sln(book_data) try: verba_link = get_verba_link_by_schedule(schedule) by_sln["verba_link"] = verba_link except DataFailureException as ex: if ex.status != 404: raise log_success_response(logger, timer) return HttpResponse(json.dumps(by_sln)) except Exception: return handle_exception(logger, timer, traceback)
def respond(self, request, year, quarter, summer_term): timer = Timer() try: if not is_student(): log_msg(logger, timer, "Not a student, abort!") return data_not_found() term = get_specific_term(year=year, quarter=quarter) schedule = get_schedule_by_term(request, term) if summer_term is not None and len(summer_term) > 0: summer_term = summer_term.replace(",", "") filter_schedule_sections_by_summer_term(schedule, summer_term) if len(schedule.sections) == 0: log_data_not_found_response(logger, timer) return data_not_found() book_data = get_textbook_by_schedule(schedule) by_sln = index_by_sln(book_data) try: verba_link = get_verba_link_by_schedule(schedule) by_sln["verba_link"] = verba_link except DataFailureException as ex: if ex.status != 404: raise log_success_response(logger, timer) return HttpResponse(json.dumps(by_sln)) except Exception: return handle_exception(logger, timer, traceback)
def test_filter_schedule_sections_by_summer_term(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS): regid = "9136CCB8F66711D5BE060004AC494FFE" term = Term() term.year = 2013 term.quarter = "summer" schedule = _get_schedule(regid, term) # ensure it has both A and B terms has_a_term = False has_b_term = False for section in schedule.sections: if section.summer_term == "A-term": has_a_term = True if section.summer_term == "B-term": has_b_term = True self.assertTrue(has_a_term) self.assertTrue(has_b_term) filter_schedule_sections_by_summer_term(schedule, "A-term") # the B-term section no longer exists filtered_has_b_term = False filtered_has_a_term = False filtered_has_full_term = False for section in schedule.sections: if section.summer_term == "A-term": filtered_has_a_term = True if section.summer_term == "B-term": filtered_has_b_term = True if section.summer_term == "Full-term": filtered_has_full_term = True self.assertFalse(filtered_has_b_term) self.assertTrue(filtered_has_full_term) self.assertTrue(filtered_has_a_term)
def test_filter_schedule_sections_by_summer_term(self): with self.settings(RESTCLIENTS_SWS_DAO_CLASS=FDAO_SWS, RESTCLIENTS_PWS_DAO_CLASS=FDAO_PWS): regid = "9136CCB8F66711D5BE060004AC494FFE" term = Term() term.year = 2013 term.quarter = "summer" schedule = _get_schedule(regid, term) # ensure it has both A and B terms has_a_term = False has_b_term = False for section in schedule.sections: if section.summer_term == "A-term": has_a_term = True if section.summer_term == "B-term": has_b_term = True self.assertTrue(has_a_term) self.assertTrue(has_b_term) filter_schedule_sections_by_summer_term(schedule, "A-term") # the B-term section no longer exists filtered_has_b_term = False filtered_has_a_term = False filtered_has_full_term = False for section in schedule.sections: if section.summer_term == "A-term": filtered_has_a_term = True if section.summer_term == "B-term": filtered_has_b_term = True if section.summer_term == "Full-term": filtered_has_full_term = True self.assertFalse(filtered_has_b_term) self.assertTrue(filtered_has_full_term) self.assertTrue(filtered_has_a_term)
def make_http_resp(self, timer, term, request, summer_term=None): """ @return class schedule data in json format status 404: no schedule found (not registered) """ schedule = get_schedule_by_term(request, term) if summer_term is None: summer_term = get_current_summer_term_in_schedule(schedule, request) filter_schedule_sections_by_summer_term(schedule, summer_term) if len(schedule.sections) == 0: log_data_not_found_response(logger, timer) return data_not_found() resp_data = load_schedule(request, schedule, summer_term) log_success_response(logger, timer) return HttpResponse(json.dumps(resp_data))
def make_http_resp(self, timer, term, request, summer_term=None): """ @return class schedule data in json format status 404: no schedule found (not registered) """ schedule = get_schedule_by_term(request, term) if summer_term is None: summer_term = get_current_summer_term_in_schedule( schedule, request) filter_schedule_sections_by_summer_term(schedule, summer_term) if len(schedule.sections) == 0: log_data_not_found_response(logger, timer) return data_not_found() resp_data = load_schedule(request, schedule, summer_term) log_success_response(logger, timer) return HttpResponse(json.dumps(resp_data))
def respond(self, year, quarter, summer_term): timer = Timer() logger = logging.getLogger(__name__) term = get_quarter(year=year, quarter=quarter) schedule = get_schedule_by_term(term) if summer_term is not None: summer_term = summer_term.replace(",", "") filter_schedule_sections_by_summer_term(schedule, summer_term) book_data = get_textbook_by_schedule(schedule) if book_data is None: log_data_not_found_response(logger, timer) return data_not_found() verba_link = get_verba_link_by_schedule(schedule) by_sln = index_by_sln(book_data) by_sln["verba_link"] = verba_link log_success_response(logger, timer) return HttpResponse(json.dumps(by_sln))
def GET(self, request): """ GET /api/v1/ias/ """ timer = Timer() try: dao_class = getattr(settings, "RESTCLIENTS_IASYSTEM_DAO_CLASS", MOCKDAO) if dao_class == MOCKDAO and\ get_netid_of_current_user() == "eight": time.sleep(10) if not is_student(): log_msg(logger, timer, "Not a student, abort!") return data_not_found() if not in_coursevel_fetch_window(request): # The window starts: 7 days before last inst # ends: the midnight at the end of current term # grade submission deadline log_msg(logger, timer, "Not in fetching window") return data_not_found() term = get_current_quarter(request) schedule = get_schedule_by_term(term) summer_term = get_current_summer_term_in_schedule( schedule, request) filter_schedule_sections_by_summer_term(schedule, summer_term) if len(schedule.sections) == 0: log_data_not_found_response(logger, time) return data_not_found() resp_data = load_course_eval(request, schedule, summer_term) log_success_response(logger, timer) return HttpResponse(json.dumps(resp_data)) except Exception: return handle_exception(logger, timer, traceback)
def GET(self, request): """ GET /api/v1/ias/ """ timer = Timer() try: dao_class = getattr(settings, "RESTCLIENTS_IASYSTEM_DAO_CLASS", MOCKDAO) if dao_class == MOCKDAO and\ get_netid_of_current_user() == "eight": time.sleep(10) if not is_student(): log_msg(logger, timer, "Not a student, abort!") return data_not_found() if not in_coursevel_fetch_window(request): # The window starts: 7 days before last inst # ends: the midnight at the end of current term # grade submission deadline log_msg(logger, timer, "Not in fetching window") return data_not_found() term = get_current_quarter(request) schedule = get_schedule_by_term(request, term) summer_term = get_current_summer_term_in_schedule( schedule, request) filter_schedule_sections_by_summer_term(schedule, summer_term) if len(schedule.sections) == 0: log_data_not_found_response(logger, time) return data_not_found() resp_data = load_course_eval(request, schedule, summer_term) log_success_response(logger, timer) return HttpResponse(json.dumps(resp_data)) except Exception: return handle_exception(logger, timer, traceback)
def load_schedule(request, schedule, summer_term=""): filter_schedule_sections_by_summer_term(schedule, summer_term) json_data = schedule.json_data() json_data["summer_term"] = summer_term if len(schedule.sections) == 0: return json_data colors = get_colors_by_schedule(schedule) if colors is None and len(schedule.sections) > 0: return None buildings = get_buildings_by_schedule(schedule) # Removing call to Canvas pending MUWM-2106 # Too much! MUWM-2270 # canvas_data_by_course_id = [] canvas_data_by_primary_course_id = get_canvas_enrolled_courses() primary = canvas_data_by_primary_course_id canvas_data_by_course_id = get_indexed_by_decrosslisted(primary, schedule.sections) # Since the schedule is restclients, and doesn't know # about color ids, backfill that data section_index = 0 for section in schedule.sections: section_data = json_data["sections"][section_index] color = colors[section.section_label()] section_data["color_id"] = color section_index += 1 # if section.is_primary_section: section_data["lib_subj_guide"] = get_subject_guide_by_section(section) try: evaluation_json_data = json_for_evaluation( request, get_evaluations_by_section(section), section.summer_term ) except Exception as ex: evaluation_json_data = None if evaluation_json_data is not None: section_data["evaluation_data"] = evaluation_json_data if section.section_label() in canvas_data_by_course_id: enrollment = canvas_data_by_course_id[section.section_label()] canvas_url = enrollment.course_url canvas_name = enrollment.course_name # canvas_grade = enrollment.final_grade section_data["canvas_url"] = canvas_url section_data["canvas_name"] = canvas_name # section_data["canvas_grade"] = canvas_grade # MUWM-596 if section.final_exam and section.final_exam.building: building = buildings[section.final_exam.building] if building: section_data["final_exam"]["longitude"] = building.longitude section_data["final_exam"]["latitude"] = building.latitude section_data["final_exam"]["building_name"] = building.name # Also backfill the meeting building data meeting_index = 0 for meeting in section.meetings: try: mdata = section_data["meetings"][meeting_index] if not mdata["building_tbd"]: building = buildings[mdata["building"]] if building is not None: mdata["latitude"] = building.latitude mdata["longitude"] = building.longitude mdata["building_name"] = building.name for instructor in mdata["instructors"]: if ( not instructor["email1"] and not instructor["email2"] and not instructor["phone1"] and not instructor["phone2"] and not instructor["voicemail"] and not instructor["fax"] and not instructor["touchdial"] and not instructor["address1"] and not instructor["address2"] ): instructor["whitepages_publish"] = False meeting_index += 1 except IndexError as ex: pass # MUWM-443 json_data["sections"] = sorted( json_data["sections"], key=itemgetter("curriculum_abbr", "course_number", "section_id") ) json_data["is_grad_student"] = is_grad_student() return json_data