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 @@ ...@@ -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 # # Contact: beat.support@idiap.ch #
# # # #
# This file is part of the beat.web module of the BEAT platform. # # This file is part of the beat.web module of the BEAT platform. #
...@@ -27,103 +27,135 @@ ...@@ -27,103 +27,135 @@
############################################################################### ###############################################################################
from django.core.management.base import BaseCommand, CommandError
from datetime import date
import datetime import datetime
import sys
from django.contrib.auth.models import User from django.core.management.base import BaseCommand
from django.conf import settings from django.conf import settings
from ....ui.registration.models import RegistrationProfile
from ...models import SupervisionTrack from ...models import SupervisionTrack
from ...models import Profile from ...models import Profile
from ....ui.registration.models import RegistrationProfile
import sys
import random
class Command(BaseCommand): class Command(BaseCommand):
help = 'Postpone user(s) validation process' help = "Postpone user(s) validation process"
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument('--noinput', action='store_false', dest='interactive', default=False, parser.add_argument(
help=('Tells Django to NOT prompt the user for input of any kind.')) "--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): def handle(self, *args, **options):
if options['interactive']: if options["interactive"]:
try: 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: except KeyboardInterrupt:
self.stderr.write("\nOperation canceled.") self.stderr.write("\nOperation canceled.")
sys.exit(1) sys.exit(1)
if answer != 'y': if answer != "y":
self.stdout.write('Postpone canceled') self.stdout.write("Postpone canceled")
sys.exit(0) sys.exit(0)
invalid_userprofiles_new_users = Profile.objects.filter(status=Profile.NEWUSER) 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 count = 0
postpone_count = 0 postpone_count = 0
now = datetime.datetime.now() now = datetime.datetime.now()
for invalid_profile in invalid_userprofiles_new_users: for invalid_profile in invalid_userprofiles_new_users:
user = invalid_profile.user user = invalid_profile.user
supervisiontracks = SupervisionTrack.objects.filter(supervision_key=invalid_profile.supervision_key) supervisiontracks = SupervisionTrack.objects.filter(
registration_profiles = RegistrationProfile.objects.filter(user=invalid_profile.user) 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: if user.profile.registration_date + expiration_date_delta <= now:
count += 1 count += 1
user.delete() user.delete()
invalid_profile.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() RegistrationProfile.objects.filter(user=invalid_profile.user).delete()
for invalid_profile in invalid_userprofiles_waiting_validation: for invalid_profile in invalid_userprofiles_waiting_validation:
user = invalid_profile.user user = invalid_profile.user
supervisiontracks = SupervisionTrack.objects.filter(supervision_key=invalid_profile.supervision_key) supervisiontracks = SupervisionTrack.objects.filter(
registration_profiles = RegistrationProfile.objects.filter(user=invalid_profile.user) 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: if user.profile.registration_date + expiration_date_delta <= now:
count += 1 count += 1
user.delete() user.delete()
invalid_profile.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() RegistrationProfile.objects.filter(user=invalid_profile.user).delete()
supervisiontracks = SupervisionTrack.objects.all() supervisiontracks = SupervisionTrack.objects.all()
expiration_date_delta = datetime.timedelta(days=settings.ACCOUNT_BLOCKAGE_AFTER_FIRST_REJECTION_DAYS) expiration_date_delta = datetime.timedelta(
extra_days_delta = datetime.timedelta(days=(settings.ACCOUNT_BLOCKAGE_AFTER_FIRST_REJECTION_DAYS + 1)) 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: 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_count += 1
postpone_date = now + extra_days_delta postpone_date = now + extra_days_delta
supervisiontrack.expiration_date = postpone_date supervisiontrack.expiration_date = postpone_date
supervisiontrack.save() supervisiontrack.save()
supervisee_profile = Profile.objects.get(user=supervisiontrack.supervisee) supervisee_profile = Profile.objects.get(
user=supervisiontrack.supervisee
)
if supervisee_profile.status == Profile.YEARREVALIDATION: if supervisee_profile.status == Profile.YEARREVALIDATION:
supervisee_profile.status = Profile.ACCEPTED supervisee_profile.status = Profile.ACCEPTED
supervisee_profile.save() supervisee_profile.save()
self.stdout.write(
self.stdout.write('{} Invalid user(s) successfully cleaned/{} Total user(s) checked'.format(count, invalid_userprofiles_new_users.count()+invalid_userprofiles_waiting_validation.count())) "{} Invalid user(s) successfully cleaned/{} Total user(s) checked".format(
self.stdout.write('{} Valid user(s) postponed/{} Total supervision track(s) checked'.format(postpone_count, supervisiontracks.count())) 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): def get_input_data(self, message, default=None):
""" """
Override this method if you want to customize data inputs or Override this method if you want to customize data inputs or
validation exceptions. validation exceptions.
""" """
raw_value = raw_input(message) raw_value = input(message)
if default and raw_value == '': if default and raw_value == "":
raw_value = default raw_value = default
return raw_value 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