Display progress updates during registration
This commit is contained in:
@@ -11,7 +11,7 @@ from rest_auth.serializers import PasswordChangeSerializer, PasswordResetSeriali
|
||||
from rest_auth.serializers import UserDetailsSerializer
|
||||
import re
|
||||
|
||||
from . import models, fields, utils, utils_ldap, utils_auth
|
||||
from . import models, fields, utils, utils_ldap, utils_auth, utils_stats
|
||||
from .. import settings, secrets
|
||||
|
||||
#class UsageSerializer(serializers.ModelSerializer):
|
||||
@@ -515,6 +515,7 @@ class MyRegisterSerializer(RegisterSerializer):
|
||||
first_name = serializers.CharField(max_length=32)
|
||||
last_name = serializers.CharField(max_length=32)
|
||||
existing_member = serializers.ChoiceField(['true', 'false'])
|
||||
request_id = serializers.CharField(required=False)
|
||||
|
||||
def validate_username(self, username):
|
||||
if re.search(r'[^a-z.]', username):
|
||||
@@ -539,6 +540,8 @@ class MyRegisterSerializer(RegisterSerializer):
|
||||
user.delete()
|
||||
raise ValidationError(dict(non_field_errors='Can only register from Protospace.'))
|
||||
|
||||
if data['request_id']: utils_stats.set_progress(data['request_id'], 'Registering...')
|
||||
|
||||
utils.register_user(data, user)
|
||||
|
||||
class MyPasswordChangeSerializer(PasswordChangeSerializer):
|
||||
|
@@ -18,7 +18,7 @@ from django.db.models import Sum
|
||||
from django.core.cache import cache
|
||||
from django.utils.timezone import now, pytz
|
||||
|
||||
from . import models, serializers, utils_ldap
|
||||
from . import models, serializers, utils_ldap, utils_stats
|
||||
|
||||
STATIC_FOLDER = 'data/static/'
|
||||
|
||||
@@ -311,6 +311,7 @@ def link_old_member(data, user):
|
||||
raise ValidationError(dict(email=msg))
|
||||
|
||||
if utils_ldap.is_configured():
|
||||
if data['request_id']: utils_stats.set_progress(data['request_id'], 'Finding LDAP account...')
|
||||
result = utils_ldap.find_user(user.username)
|
||||
if result == 200:
|
||||
if utils_ldap.set_password(data) != 200:
|
||||
@@ -331,6 +332,8 @@ def link_old_member(data, user):
|
||||
raise ValidationError(dict(non_field_errors=msg))
|
||||
|
||||
|
||||
if data['request_id']: utils_stats.set_progress(data['request_id'], 'Linking old member data...')
|
||||
|
||||
member.user = user
|
||||
member.first_name = data['first_name'].title()
|
||||
member.last_name = data['last_name'].title()
|
||||
@@ -349,6 +352,7 @@ def create_new_member(data, user):
|
||||
raise ValidationError(dict(email=msg))
|
||||
|
||||
if utils_ldap.is_configured():
|
||||
if data['request_id']: utils_stats.set_progress(data['request_id'], 'Creating LDAP account...')
|
||||
result = utils_ldap.find_user(user.username)
|
||||
if result == 200:
|
||||
msg = 'Username was found in old portal.'
|
||||
@@ -368,6 +372,8 @@ def create_new_member(data, user):
|
||||
logger.info(msg)
|
||||
raise ValidationError(dict(non_field_errors=msg))
|
||||
|
||||
if data['request_id']: utils_stats.set_progress(data['request_id'], 'Creating new member...')
|
||||
|
||||
models.Member.objects.create(
|
||||
user=user,
|
||||
first_name=data['first_name'].title(),
|
||||
@@ -387,6 +393,9 @@ def register_user(data, user):
|
||||
user.delete()
|
||||
raise
|
||||
|
||||
if data['request_id']: utils_stats.set_progress(data['request_id'], 'Done!')
|
||||
|
||||
|
||||
BLANK_FORM = 'misc/blank_member_form.pdf'
|
||||
def gen_member_forms(member):
|
||||
serializer = serializers.MemberSerializer(member)
|
||||
|
@@ -149,3 +149,12 @@ def calc_card_scans():
|
||||
date=today_alberta_tz(),
|
||||
defaults=dict(card_scans=count),
|
||||
)
|
||||
|
||||
def get_progress(request_id):
|
||||
return cache.get('request-progress-' + request_id, [])
|
||||
|
||||
def set_progress(request_id, data):
|
||||
logger.info('Request %s progress: %s', request_id, data)
|
||||
progress = get_progress(request_id)
|
||||
progress.append(data)
|
||||
cache.set('request-progress-' + request_id, progress)
|
||||
|
@@ -506,6 +506,14 @@ class StatsViewSet(viewsets.ViewSet, List):
|
||||
|
||||
return Response(stats)
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def progress(self, request):
|
||||
try:
|
||||
request_id = request.query_params['request_id']
|
||||
return Response(utils_stats.get_progress(request_id))
|
||||
except KeyError:
|
||||
raise exceptions.ValidationError(dict(request_id='This field is required.'))
|
||||
|
||||
@action(detail=False, methods=['post'])
|
||||
def bay_108_temp(self, request):
|
||||
try:
|
||||
|
Reference in New Issue
Block a user