예제 #1
0
    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)
예제 #2
0
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
예제 #3
0
    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')
예제 #4
0
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
예제 #5
0
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
예제 #6
0
    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')
예제 #7
0
    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()