def import_enrollments(request): status = [] if request.method == "POST": # Convert JSON data to Python object data = json.loads(request.raw_post_data) validate_credentials(request, settings.API_ALLOWED_HOSTS, settings.API_KEY, data[0].get("api_key", "")) # Redefine data variable to actual enrollment list data = data[0]["enrollments"] # Let's keep a count of how many new and updated objects we have enrollments_updated = 0 enrollments_created = 0 # Grab all existing sections, users, and enrollments as well as # their associated objects from the database all_sections = Section.objects.filter(term=settings.CURRENT_TERM, year=settings.CURRENT_YEAR) all_users = UserProfile.objects.filter(user__groups__name="Students").select_related() all_enrollments = Enrollment.objects.filter( section__term=settings.CURRENT_TERM, section__year__exact=settings.CURRENT_YEAR ) for e in data: section_exists = True try: section = all_sections.filter(prefix=e["prefix"], number=e["number"], section=e["section"])[0] except IndexError: status.append("Section (%s%s-%s) does not exist" % (e["prefix"], e["number"], e["section"])) section_exists = False student_exists = True try: student = all_users.filter(id_number=e["student"])[0].user except IndexError: status.append("Student (ID number %s) " "does not exist" % e["student"]) student_exists = False if section_exists and student_exists: new_enrollment = False try: enrollment = all_enrollments.filter(section=section, student=student)[0] except IndexError: enrollment = Enrollment(student=student, section=section) new_enrollment = True if new_enrollment: enrollments_created += 1 else: enrollments_updated += 1 # Only update metadata for enrollment if changed if enrollment.status != e["status"]: enrollment.status = e["status"] enrollment.save() elif new_enrollment: enrollment.save() status.append("Received %d enrollment records" % len(data)) status.append("Updated %d enrollment objects" % enrollments_updated) status.append("Created %d enrollment objects" % enrollments_created) else: status.append("Invalid request") return HttpResponse("\n".join(status), mimetype="text/plain")
def import_enrollments(request): status = [] if request.method == 'POST': # Convert JSON data to Python object data = json.loads(request.raw_post_data) validate_credentials(request, settings.API_ALLOWED_HOSTS, settings.API_KEY, data[0].get('api_key', '')) # Redefine data variable to actual enrollment list data = data[0]['enrollments'] # Let's keep a count of how many new and updated objects we have enrollments_updated = 0 enrollments_created = 0 # Grab all existing sections, users, and enrollments as well as # their associated objects from the database existing_sections = get_existing_sections(settings.CURRENT_TERM, settings.CURRENT_YEAR) id_numbers = [] for e in data: id_numbers.append(e['student']) existing_users = get_existing_users(['Students'], id_numbers) existing_enrollments = get_existing_enrollments(settings.CURRENT_TERM, settings.CURRENT_YEAR) for e in data: key = '%s%s-%s-%s-%d' % (e['prefix'], e['number'], e['section'], e['term'], int(e['year'])) section = existing_sections.get(key) section_exists = True if not section: status.append('Section (%s%s-%s) does not exist' % ( e['prefix'], e['number'], e['section'])) section_exists = False student = existing_users.get(e['student']) student_exists = True if not student: status.append('Student (ID number %s) ' 'does not exist' % e['student']) student_exists = False if section_exists and student_exists: key = '%s-%s%s-%s-%s-%d' % (e['student'], e['prefix'], e['number'], e['section'], e['term'], int(e['year'])) enrollment = existing_enrollments.get(key) new_enrollment = False if not enrollment: enrollment = Enrollment(student=student, section=section) new_enrollment = True if new_enrollment: enrollments_created += 1 else: enrollments_updated += 1 # Only update metadata for enrollment if changed if enrollment.status != e['status']: enrollment.status = e['status'] enrollment.save() elif new_enrollment: enrollment.save() status.append('Received %d enrollment records' % len(data)) status.append('Updated %d enrollment objects' % enrollments_updated) status.append('Created %d enrollment objects' % enrollments_created) else: status.append('Invalid request') return HttpResponse('\n'.join(status), mimetype='text/plain')