def bulk_add(request): if request.method == 'GET': form = UserBulkAddForm() return render(request, 'accounts/bulk_add_form.html', {'form': form}) else: # bulk adding time form = UserBulkAddForm(request.POST) if not form.is_valid(): return render(request, 'accounts/bulk_add_form.html', { 'form': form, 'message': 'Invalid form. Are you missing a field?' }) # todo(mglidden): use a regex instead of three replace statements users = form.cleaned_data['users'].replace(' ', ',').replace( '\t', ',').replace('\r\n', ',').replace('\n', ',').replace(', ', ',').split(',') semester = form.cleaned_data['semester'] existing_users = 0 created_users = 0 existing_memberships = 0 created_memberships = 0 for user_str in users: if '@' in user_str: user_email = user_str user_str = user_email[:user_email.index('@')] else: user_email = user_str + '@mit.edu' # In production, we should never have more than one user for a given email. The dev DB has some bad data, so we're using filter instead of get. # We filter by username since that's the unique key. users = User.objects.filter(username=user_str) if users: user = users[0] existing_users += 1 else: user = User(username=user_str, email=user_email) user.save() user.profile.role = 'S' user.profile.save() created_users += 1 if not user.membership.filter(semester=semester): membership = Member(role=Member.STUDENT, user=user, semester=semester) membership.save() created_memberships += 1 else: existing_memberships += 1 return render( request, 'accounts/bulk_add_form.html', { 'form': form, 'message': 'Created %s users, %s already existed. Added %s users to %s, %s were already members.' % (created_users, existing_users, created_memberships, semester, existing_memberships), })