def test_delay(self): with self.settings( RESTCLIENTS_PWS_DAO_CLASS='restclients.dao_implementation.pws.File', RESTCLIENTS_MOCKDATA_DELAY=0.1): t0 = time.time() pws = PWS() person = pws.get_person_by_employee_id('123456789') t1 = time.time() delta = t1-t0 # There are 2 requests, so it should be 2x the delay. # Giving .01 seconds for the rest of the work. should be plenty, # it was taking 0.2022 seconds in my test runs. self.assertGreater(delta, 0.2) self.assertLess(delta, 0.22) with self.settings( RESTCLIENTS_PWS_DAO_CLASS='restclients.dao_implementation.pws.File', RESTCLIENTS_MOCKDATA_DELAY=0.2): t0 = time.time() pws = PWS() person = pws.get_person_by_employee_id('123456789') t1 = time.time() delta = t1-t0 self.assertGreater(delta, 0.4) self.assertLess(delta, 0.42)
def json_for_evaluation(request, evaluations, section_summer_term): if evaluations is None: return None local_tz = timezone.get_current_timezone() today = get_comparison_date(request) now = local_tz.localize( datetime(today.year, today.month, today.day, 0, 0, 1)) # the start date of the default show window show_date = get_bof_7d_before_last_instruction(request) on_dt = local_tz.localize( datetime(show_date.year, show_date.month, show_date.day, 0, 0, 0)) # the end date of the default show window hide_date = get_eof_term(request, True) off_dt = local_tz.localize( datetime(hide_date.year, hide_date.month, hide_date.day, 0, 0, 0)) if now < on_dt or now > off_dt: return None pws = PWS() json_data = [] for evaluation in evaluations: if term_matched(request, section_summer_term): if now < evaluation.eval_open_date or\ now >= evaluation.eval_close_date: continue if evaluation.eval_close_date < off_dt: off_dt = evaluation.eval_close_date json_item = {'instructors': [], 'url': evaluation.eval_url, 'is_multi_instr': len(evaluation.instructor_ids) > 1} for eid in evaluation.instructor_ids: instructor_json = {} instructor = pws.get_person_by_employee_id(eid) instructor_json['instructor_name'] = instructor.display_name instructor_json['instructor_title'] = instructor.title1 json_item['instructors'].append(instructor_json) json_data.append(json_item) # althrough each item has its own close date, we # only take one - the earliest. if len(json_data) > 0: return {'evals': json_data, 'close_date': off_dt.isoformat()} return None
def test_by_employeeid(self): pws = PWS() person = pws.get_person_by_employee_id('123456789') self.assertEquals(person.uwnetid, 'javerage', "Correct netid") self.assertEquals( person.uwregid, '9136CCB8F66711D5BE060004AC494FFE', "Correct regid") self.assertRaises(InvalidEmployeeID, pws.get_person_by_employee_id, '12345') # Valid non-existent employee ID self.assertRaises(DataFailureException, pws.get_person_by_employee_id, '999999999')
def json_for_evaluation(request, evaluations, section): """ @return the json format of only the evaluations that should be shown; [] if none should be displaued at the moment; or None if error in fetching data. This function should not be called if not in in_coursevel_fetch_window. """ if evaluations is None: return None # to compare with timezone aware datetime object now = _get_local_tz().localize(get_comparison_datetime(request)) pws = PWS() json_data = [] for evaluation in evaluations: if summer_term_overlaped(request, section): logger.debug( "Is %s within eval open close dates (%s, %s)==>%s" % ( now, evaluation.eval_open_date, evaluation.eval_close_date, (now >= evaluation.eval_open_date and now < evaluation.eval_close_date))) if evaluation.is_completed or\ now < evaluation.eval_open_date or\ now >= evaluation.eval_close_date: continue json_item = { 'instructors': [], 'url': evaluation.eval_url, 'close_date': datetime_str(evaluation.eval_close_date), 'is_multi_instr': len(evaluation.instructor_ids) > 1 } for eid in evaluation.instructor_ids: instructor_json = {} instructor = pws.get_person_by_employee_id(eid) instructor_json['instructor_name'] = instructor.display_name instructor_json['instructor_title'] = instructor.title1 json_item['instructors'].append(instructor_json) json_data.append(json_item) return json_data
def json_for_evaluation(request, evaluations, section): """ @return the json format of only the evaluations that should be shown; [] if none should be displaued at the moment; or None if error in fetching data. This function should not be called if not in in_coursevel_fetch_window. """ if evaluations is None: return None # to compare with timezone aware datetime object now = _get_local_tz().localize(get_comparison_datetime(request)) pws = PWS() json_data = [] for evaluation in evaluations: if summer_term_overlaped(request, section): logger.debug( "Is %s within eval open close dates (%s, %s)==>%s" % (now, evaluation.eval_open_date, evaluation.eval_close_date, (now >= evaluation.eval_open_date and now < evaluation.eval_close_date))) if evaluation.is_completed or\ now < evaluation.eval_open_date or\ now >= evaluation.eval_close_date: continue json_item = { 'instructors': [], 'url': evaluation.eval_url, 'close_date': datetime_str(evaluation.eval_close_date), 'is_multi_instr': len(evaluation.instructor_ids) > 1 } for eid in evaluation.instructor_ids: instructor_json = {} instructor = pws.get_person_by_employee_id(eid) instructor_json['instructor_name'] = instructor.display_name instructor_json['instructor_title'] = instructor.title1 json_item['instructors'].append(instructor_json) json_data.append(json_item) return json_data
def test_by_employeeid(self): with self.settings( RESTCLIENTS_PWS_DAO_CLASS='restclients.dao_implementation.pws.File'): pws = PWS() person = pws.get_person_by_employee_id('123456789') self.assertEquals(person.uwnetid, 'javerage', "Correct netid") self.assertEquals(person.uwregid, '9136CCB8F66711D5BE060004AC494FFE', "Correct regid") self.assertRaises(InvalidEmployeeID, pws.get_person_by_employee_id, '12345') # Valid non-existent employee ID self.assertRaises(DataFailureException, pws.get_person_by_employee_id, '999999999')
def get_courses_changed_since(self, term, since_dt): url = '/uweomyuw/feed/courseSectionWS.asp' params = {'year': term.year, 'quarter': term.quarter.lower(), 'resultSetOption': 1} if since_dt: since_dt = localtime(since_dt) params['last_modified_date'] = since_dt.strftime('%m/%d/%Y %H:%M') xml_root = self._get_resource('%s?%s' % (url, urlencode(params))) courses = {} for el in xml_root.findall('row'): section = self._eos_section() section.term = term section.eos_course_id = el.find('EOScourseId').text.strip() section.curriculum_abbr = el.find( 'CurriculumAbbreviation').text.strip() section.course_number = el.find('CourseNumber').text.strip() section.section_id = el.find('SectionID').text.strip() section.course_campus = el.find('CourseCampus').text.strip() course_title = el.find('CourseTitle') if course_title is not None: section.course_title = course_title.text.strip() course_title_long = el.find('CourseTitleLong') if course_title_long is not None: section.course_title_long = course_title_long.text.strip() primary_lms = el.find('primaryLMS') if primary_lms is not None: section.primary_lms = primary_lms.text.strip() lms_ownership = el.find('LMSOwnership') section.lms_ownership = None if ( lms_ownership is None) else lms_ownership.text.strip() section.delete_flag = el.find('DeleteFlag').text.strip() section.is_withdrawn = True if ( 'withdrawn' == section.delete_flag) else False is_independent_start = el.find('IsIndependentStart') section.is_independent_start = True if ( is_independent_start is not None and is_independent_start.text.strip() == '1') else False course_id = section.canvas_course_sis_id() try: override = TermOverride.objects.get(course_id=course_id) if not section.is_independent_start: override.delete() except TermOverride.DoesNotExist: if section.is_independent_start: override = TermOverride( course_id=course_id, term_sis_id="uweo-individual-start", term_name="UWEO Individual Start" ) override.save() is_credit = el.find('is_credit') section.is_credit = True if ( is_credit is not None and is_credit.text.strip() == '1') else False courses[section.eos_course_id] = section # Get the instructors params['resultSetOption'] = 2 xml_root = self._get_resource('%s?%s' % (url, urlencode(params))) pws = PWS() for el in xml_root.findall('row'): eos_course_id = el.find('EOScourseId').text.strip() course = courses[eos_course_id] employee_id = el.find('EmployeeID').text.strip() try: person = pws.get_person_by_employee_id(employee_id) course.meetings[0].instructors.append(person) except DataFailureException as ex: self._log.info('Skipping employee_id %s: %s' % ( employee_id, ex)) continue return courses.values()