diff --git a/beat/web/accounts/management/commands/postpone_users_validation.py b/beat/web/accounts/management/commands/postpone_users_validation.py index 20ce92217f0f355f5896fe3c32c6057863acf708..9e698f7f7b3681754eeb3ed22422b03b77896e4d 100644 --- a/beat/web/accounts/management/commands/postpone_users_validation.py +++ b/beat/web/accounts/management/commands/postpone_users_validation.py @@ -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