def response_for_person(self, person): response = { 'is_valid': True, 'display_name': person.full_name if ( isinstance(person, Person)) else person.display_name, 'net_id': person.uwnetid, 'reg_id': person.uwregid, 'gmail_id': None, 'added_date': None, 'provisioned_date': None, 'priority': 'normal', 'queue_id': None, 'person_url': None, 'enrollment_url': None } if can_view_source_data(): response['person_url'] = '%s/person/%s.json' % ( '/restclients/view/pws/identity/v1', person.uwregid) response['enrollment_url'] = '%s/enrollment.json?reg_id=%s' % ( '/restclients/view/sws/student/v5', person.uwregid) try: user = User.objects.get(reg_id=person.uwregid) response.update(user.json_data()) except User.DoesNotExist: pass return self.json_response(json.dumps(response))
def GET(self, request, **kwargs): try: course = Course.objects.get( course_id=self._normalize(kwargs['course_id'])) json_data = course.json_data(can_view_source_data()) return self.json_response(json.dumps(json_data)) except Exception as err: return self.json_response( '{"error":"Course not found (%s)"}' % err, status=404)
def GET(self, request, **kwargs): try: sis_id = kwargs.get('sis_id') canvas_id = re.match(r'^\d+$', sis_id) if canvas_id: course = get_course_by_id(canvas_id.group(0)) else: course = get_course_by_sis_id(sis_id) course_rep = { 'course_id': course.course_id, 'sis_course_id': course.sis_course_id, 'sws_course_id': course.sws_course_id(), 'account_id': course.account_id, 'term': { 'term_id': course.term.term_id, 'sis_term_id': course.term.sis_term_id, 'name': course.term.name }, 'course_name': course.name, 'course_url': "%s/courses/%s" % ( getattr(settings, 'RESTCLIENTS_CANVAS_HOST', ''), course.course_id), 'workflow_state': course.workflow_state, 'public_syllabus': course.public_syllabus, 'syllabus_body': course.syllabus_body } if course.sis_course_id is not None: try: model = Course.objects.get(course_id=course.sis_course_id) course_rep.update(model.json_data(can_view_source_data())) except Course.DoesNotExist: pass return self.json_response(json.dumps(course_rep)) except Exception as e: return self.json_response( '{"error": "Unable to retrieve course data: %s"' % (e) + ' }', status=400)
def PUT(self, request, **kwargs): try: course = Course.objects.get( course_id=self._normalize(kwargs['course_id'])) except Exception as err: return self.json_response( '{"error":"Course not found (%s)"}' % err, status=404) if course.queue_id is not None: return self.json_response( '{"error":"Course already being provisioned"}', status=409) body = request.read() try: new_values = json.loads(body) except Exception as err: return self.json_response( '{"error":"Unable to parse JSON (%s)" }' % err, status=400) try: # only priority PUTable right now param = new_values.get('priority', '').lower() new_priority = None for key, val in dict(PRIORITY_CHOICES).iteritems(): if val == param: new_priority = key break if new_priority is not None: course.priority = new_priority course.save() else: raise Exception("Invalid priority: '%s'" % param) json_data = course.json_data(can_view_source_data()) return self.json_response(json.dumps(json_data)) except Exception as err: return self.json_response('{"error":"%s"}' % err, status=400)
def GET(self, request, **kwargs): json_rep = { 'courses': [] } filt_kwargs = None if 'queue_id' in request.GET: queue_id = request.GET.get('queue_id', '').strip() if re.match(r'^[0-9]+$', str(queue_id)): filt_kwargs = {'queue_id': queue_id} else: err = 'invalid queue_id: %s' % queue_id self._log.error(err) return self.json_response('{"error":"%s"}' % err, status=400) else: provisioned_error = request.GET.get('provisioned_error') if provisioned_error: filt_kwargs = { 'provisioned_error': self._is_true(provisioned_error), 'queue_id__isnull': True } if filt_kwargs: try: filt_kwargs['priority__gt'] = PRIORITY_NONE course_list = list(Course.objects.filter( **filt_kwargs).order_by('course_id')) include_sws_url = can_view_source_data() for course in course_list: json_data = course.json_data(include_sws_url) json_rep['courses'].append(json_data) return self.json_response(json.dumps(json_rep)) except Exception as err: self._log.error('course kwargs search fail: %s' + err) return self.json_response('{"error":"%s"}' % err, status=400) net_id = None reg_id = None try: if 'net_id' in request.GET: net_id = netid_from_request(request.GET) elif 'reg_id' in request.GET: reg_id = regid_from_request(request.GET) else: self._criteria[2]['required'] = True filter_terms = self._validCourseFilter(request) filter_prefix = '-'.join(filter_terms) course_list = list(Course.objects.filter( course_id__startswith=filter_prefix).order_by('course_id')) except CourseInvalidException as err: return self.json_response('{"error":"%s"}' % err, status=400) except Exception as err: self._log.error('course filter fail: %s' % err) return self.json_response('{"error":"%s"}' % err, status=400) if (net_id is not None or reg_id is not None) and len(course_list): try: if net_id is not None: instructor = get_person_by_netid(net_id) else: instructor = get_person_by_regid(reg_id) year = request.GET.get('year') quarter = request.GET.get('quarter') term = get_term_by_year_and_quarter(year, quarter) white_list = [] for section in get_sections_by_instructor_and_term( instructor, term): white_list.append('-'.join([ section.term.canvas_sis_id(), section.curriculum_abbr.upper(), section.course_number, section.section_id.upper()])) except Exception as err: self._log.error('section search fail: %s' % err) return self.json_response('{"error":"%s"}' % err, status=400) include_sws_url = can_view_source_data() for course in course_list: if 'white_list' in locals() and course.course_id not in white_list: continue json_data = course.json_data(include_sws_url) json_rep['courses'].append(json_data) return self.json_response(json.dumps(json_rep))