def update_student_details(student_details): from academics.models import Student for batch_name in student_details: batch = get_batch(batch_name) for record in student_details[batch_name]: try: student = Student.objects.get(roll_no=record['RollNo']) if student.batch != batch: raise Exception("Student '%s' doesn't belong to batch '%s'" % (record['RollNo'],batch_name)) except Student.DoesNotExist: student = Student() student.roll_no = record['RollNo'] student.batch = batch if 'RegNo' in record: student.reg_no = str(int(record['RegNo'])) if 'Admission' in record: student.admission = record['Admission'] if 'Staying' in record: student.staying = record['Staying'] if 'Gender' in record: student.gender = record['Gender'] if 'StudentName' in record: student.name = record['StudentName'] student.save()
def handle(self, *args, **kwargs): logger.info("Beginning student import routine") data = fmpxmlparser.parse_from_file(kwargs['filename']) results = data['results'] seen_ids = set() with transaction.atomic(): for row in results: fields = row['parsed_fields'] nameFirst = fields['NameFirst'] or "" nameLast = fields['NameLast'] or "" nameNickname = fields['NameNickname'] or "" email = fields['EMailSchool'] or "" studentID = fields['IDSTUDENT'] password = fields["PasswordActiveDirctory"] or "" username = fields["Network_User_Name"] or "" gender = fields["Sex"] or "" if not studentID: continue seen_ids.add(studentID) if username: if len(username) > 20: username = username[0:20] logger.warn("Username {username:} was truncated to 20 characters".format(username=username)) if email: validEmail = validate_email(email) if not validEmail: email = "" logger.warn("E-mail address {email:} for {id:} ({first:} {last:}) is invalid; address blanked".format(email=email, id=studentID, first=nameFirst, last=nameLast)) try: student = Student.objects.get(student_id=studentID) logger.info("Found student {studentID:}".format(studentID=studentID)) forceSave = False except Student.DoesNotExist: student = Student(student_id=studentID) logger.info("Creating student {studentID:}".format(studentID=studentID)) forceSave = True attrMap = { 'first_name': nameFirst, 'last_name': nameLast, 'nickname': nameNickname, 'email': email, 'rectory_password': password, 'username': username, 'gender': gender, } for attr in attrMap: dbValue = getattr(student, attr) if dbValue != attrMap[attr]: setattr(student, attr, attrMap[attr]) logger.info("Updating {attr:} on {studentID:} from {oldValue:} to {newValue:}".format(attr=attr, studentID=studentID, oldValue=dbValue, newValue=attrMap[attr])) forceSave = True if forceSave: student.save() self.sync_relations(student, fields) extra_students = Student.objects.exclude(student_id__in=seen_ids) for extra_student in extra_students: logger.warn("Deleting extra student {}".format(extra_student.id)) extra_student.delete()
def handle(self, *args, **kwargs): logger.info("Beginning student import routine") data = fmpxmlparser.parse_from_file(kwargs['filename']) results = data['results'] seen_ids = set() with transaction.atomic(): for row in results: fields = row['parsed_fields'] nameFirst = fields['NameFirst'] or "" nameLast = fields['NameLast'] or "" nameNickname = fields['NameNickname'] or "" email = fields['EMailSchool'] or "" studentID = fields['IDSTUDENT'] password = fields["PasswordActiveDirctory"] or "" username = fields["Network_User_Name"] or "" gender = fields["Sex"] or "" if not studentID: continue seen_ids.add(studentID) if username: if len(username) > 20: username = username[0:20] logger.warn( "Username {username:} was truncated to 20 characters" .format(username=username)) if email: validEmail = validate_email(email) if not validEmail: email = "" logger.warn( "E-mail address {email:} for {id:} ({first:} {last:}) is invalid; address blanked" .format(email=email, id=studentID, first=nameFirst, last=nameLast)) try: student = Student.objects.get(student_id=studentID) logger.info("Found student {studentID:}".format( studentID=studentID)) forceSave = False except Student.DoesNotExist: student = Student(student_id=studentID) logger.info("Creating student {studentID:}".format( studentID=studentID)) forceSave = True attrMap = { 'first_name': nameFirst, 'last_name': nameLast, 'nickname': nameNickname, 'email': email, 'rectory_password': password, 'username': username, 'gender': gender, } for attr in attrMap: dbValue = getattr(student, attr) if dbValue != attrMap[attr]: setattr(student, attr, attrMap[attr]) logger.info( "Updating {attr:} on {studentID:} from {oldValue:} to {newValue:}" .format(attr=attr, studentID=studentID, oldValue=dbValue, newValue=attrMap[attr])) forceSave = True if forceSave: student.save() self.sync_relations(student, fields) extra_students = Student.objects.exclude(student_id__in=seen_ids) for extra_student in extra_students: logger.warn("Deleting extra student {}".format( extra_student.id)) extra_student.delete()