Skip to content
Snippets Groups Projects
Commit 7645d476 authored by Flavio TARSETTI's avatar Flavio TARSETTI Committed by Flavio Tarsetti
Browse files

[accounts] code refactoring for postpone_users_validation command

parent cd7b0b2d
No related branches found
No related tags found
1 merge request!312Postpone date of users validation and clean out layer profiles after a crash
Pipeline #35989 passed
......@@ -4,7 +4,7 @@
###############################################################################
# #
# Copyright (c) 2016 Idiap Research Institute, http://www.idiap.ch/ #
# Copyright (c) 2019 Idiap Research Institute, http://www.idiap.ch/ #
# Contact: beat.support@idiap.ch #
# #
# This file is part of the beat.web module of the BEAT platform. #
......@@ -27,103 +27,135 @@
###############################################################################
from django.core.management.base import BaseCommand, CommandError
from datetime import date
import datetime
import sys
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from django.conf import settings
from ....ui.registration.models import RegistrationProfile
from ...models import SupervisionTrack
from ...models import Profile
from ....ui.registration.models import RegistrationProfile
import sys
import random
class Command(BaseCommand):
help = 'Postpone user(s) validation process'
help = "Postpone user(s) validation process"
def add_arguments(self, parser):
parser.add_argument('--noinput', action='store_false', dest='interactive', default=False,
help=('Tells Django to NOT prompt the user for input of any kind.'))
parser.add_argument(
"--noinput",
action="store_false",
dest="interactive",
default=False,
help=("Tells Django to NOT prompt the user for input of any kind."),
)
def handle(self, *args, **options):
if options['interactive']:
if options["interactive"]:
try:
answer = self.get_input_data('Postpone user(s) validation process? (y/n)? ', 'y').lower()
answer = self.get_input_data(
"Postpone user(s) validation process? (y/n)? ", "y"
).lower()
except KeyboardInterrupt:
self.stderr.write("\nOperation canceled.")
sys.exit(1)
if answer != 'y':
self.stdout.write('Postpone canceled')
if answer != "y":
self.stdout.write("Postpone canceled")
sys.exit(0)
invalid_userprofiles_new_users = Profile.objects.filter(status=Profile.NEWUSER)
invalid_userprofiles_waiting_validation = Profile.objects.filter(status=Profile.WAITINGVALIDATION)
invalid_userprofiles_waiting_validation = Profile.objects.filter(
status=Profile.WAITINGVALIDATION
)
count = 0
postpone_count = 0
now = datetime.datetime.now()
for invalid_profile in invalid_userprofiles_new_users:
user = invalid_profile.user
supervisiontracks = SupervisionTrack.objects.filter(supervision_key=invalid_profile.supervision_key)
registration_profiles = RegistrationProfile.objects.filter(user=invalid_profile.user)
supervisiontracks = SupervisionTrack.objects.filter(
supervision_key=invalid_profile.supervision_key
)
expiration_date_delta = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS)
expiration_date_delta = datetime.timedelta(
days=settings.ACCOUNT_ACTIVATION_DAYS
)
if user.profile.registration_date + expiration_date_delta <= now:
count += 1
user.delete()
invalid_profile.delete()
SupervisionTrack.objects.filter(supervision_key=invalid_profile.supervision_key).delete()
SupervisionTrack.objects.filter(
supervision_key=invalid_profile.supervision_key
).delete()
RegistrationProfile.objects.filter(user=invalid_profile.user).delete()
for invalid_profile in invalid_userprofiles_waiting_validation:
user = invalid_profile.user
supervisiontracks = SupervisionTrack.objects.filter(supervision_key=invalid_profile.supervision_key)
registration_profiles = RegistrationProfile.objects.filter(user=invalid_profile.user)
supervisiontracks = SupervisionTrack.objects.filter(
supervision_key=invalid_profile.supervision_key
)
expiration_date_delta = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS_FROM_SUPERVISOR)
expiration_date_delta = datetime.timedelta(
days=settings.ACCOUNT_ACTIVATION_DAYS_FROM_SUPERVISOR
)
if user.profile.registration_date + expiration_date_delta <= now:
count += 1
user.delete()
invalid_profile.delete()
SupervisionTrack.objects.filter(supervision_key=invalid_profile.supervision_key).delete()
SupervisionTrack.objects.filter(
supervision_key=invalid_profile.supervision_key
).delete()
RegistrationProfile.objects.filter(user=invalid_profile.user).delete()
supervisiontracks = SupervisionTrack.objects.all()
expiration_date_delta = datetime.timedelta(days=settings.ACCOUNT_BLOCKAGE_AFTER_FIRST_REJECTION_DAYS)
extra_days_delta = datetime.timedelta(days=(settings.ACCOUNT_BLOCKAGE_AFTER_FIRST_REJECTION_DAYS + 1))
expiration_date_delta = datetime.timedelta(
days=settings.ACCOUNT_BLOCKAGE_AFTER_FIRST_REJECTION_DAYS
)
extra_days_delta = datetime.timedelta(
days=(settings.ACCOUNT_BLOCKAGE_AFTER_FIRST_REJECTION_DAYS + 1)
)
for supervisiontrack in supervisiontracks:
if supervisiontrack.is_valid and supervisiontrack.expiration_date < now + expiration_date_delta:
if (
supervisiontrack.is_valid
and supervisiontrack.expiration_date < now + expiration_date_delta
):
postpone_count += 1
postpone_date = now + extra_days_delta
supervisiontrack.expiration_date = postpone_date
supervisiontrack.save()
supervisee_profile = Profile.objects.get(user=supervisiontrack.supervisee)
supervisee_profile = Profile.objects.get(
user=supervisiontrack.supervisee
)
if supervisee_profile.status == Profile.YEARREVALIDATION:
supervisee_profile.status = Profile.ACCEPTED
supervisee_profile.save()
self.stdout.write('{} Invalid user(s) successfully cleaned/{} Total user(s) checked'.format(count, invalid_userprofiles_new_users.count()+invalid_userprofiles_waiting_validation.count()))
self.stdout.write('{} Valid user(s) postponed/{} Total supervision track(s) checked'.format(postpone_count, supervisiontracks.count()))
self.stdout.write(
"{} Invalid user(s) successfully cleaned/{} Total user(s) checked".format(
count,
invalid_userprofiles_new_users.count()
+ invalid_userprofiles_waiting_validation.count(),
)
)
self.stdout.write(
"{} Valid user(s) postponed/{} Total supervision track(s) checked".format(
postpone_count, supervisiontracks.count()
)
)
def get_input_data(self, message, default=None):
"""
Override this method if you want to customize data inputs or
validation exceptions.
"""
raw_value = raw_input(message)
raw_value = input(message)
if default and raw_value == '':
if default and raw_value == "":
raw_value = default
return raw_value
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment