diff --git a/docs/source/user/management_commands.rst b/docs/source/user/management_commands.rst index e3ac28a7..6426a16e 100644 --- a/docs/source/user/management_commands.rst +++ b/docs/source/user/management_commands.rst @@ -79,11 +79,12 @@ This command deactivates expired user accounts which were created temporarily -------------------------------- This command deletes users that have expired (and should have been deactivated by -``deactivate_expired_users``) for more than the specified ````. +``deactivate_expired_users``) for more than the duration specified by ``--older-than-days `` +or ``--older-than-months ```. .. code-block:: shell - ./manage.py delete_old_radiusbatch_users --older-than-months + ./manage.py delete_old_radiusbatch_users --older-than-days Note that the default duration is set to 18 months. diff --git a/openwisp_radius/management/commands/base/delete_old_radiusbatch_users.py b/openwisp_radius/management/commands/base/delete_old_radiusbatch_users.py index b3504e7f..c65817d1 100644 --- a/openwisp_radius/management/commands/base/delete_old_radiusbatch_users.py +++ b/openwisp_radius/management/commands/base/delete_old_radiusbatch_users.py @@ -13,18 +13,32 @@ class BaseDeleteOldRadiusBatchUsersCommand(BaseCommand): help = 'Deactivating users added in batches which have expired' def add_arguments(self, parser): + parser.add_argument( + '--older-than-days', + action='store', + type=int, + default=30 * BATCH_DELETE_EXPIRED, + help='Delete users that are older than days provided', + ) parser.add_argument( '--older-than-months', action='store', - default=BATCH_DELETE_EXPIRED, - help='delete users which have expired before this time', + type=int, + help='Delete users that are older than months provided', ) def handle(self, *args, **options): - months = now() - timedelta(days=30 * int(options['older_than_months'])) - batches = RadiusBatch.objects.filter(expiration_date__lt=months) + days = options.get('older_than_days') + months = options.get('older_than_months') + + if months is not None: + threshold_date = now() - timedelta(days=30 * months) + else: + threshold_date = now() - timedelta(days=days) + + batches = RadiusBatch.objects.filter(expiration_date__lt=threshold_date) + time_period = threshold_date.strftime('%Y-%m-%d %H:%M:%S') + for b in batches: b.delete() - self.stdout.write( - f'Deleted accounts older than {options["older_than_months"]} months' - ) + self.stdout.write(f'Deleted accounts older than {time_period}') diff --git a/openwisp_radius/tasks.py b/openwisp_radius/tasks.py index 85e34384..cef2c67a 100644 --- a/openwisp_radius/tasks.py +++ b/openwisp_radius/tasks.py @@ -43,9 +43,11 @@ def deactivate_expired_users(): @shared_task -def delete_old_radiusbatch_users(older_than_months=12): +def delete_old_radiusbatch_users( + older_than_days=30 * app_settings.BATCH_DELETE_EXPIRED, +): management.call_command( - 'delete_old_radiusbatch_users', older_than_months=older_than_months + 'delete_old_radiusbatch_users', older_than_days=older_than_days ) diff --git a/openwisp_radius/tests/static/test_batch_users.csv b/openwisp_radius/tests/static/test_batch_users.csv new file mode 100644 index 00000000..5bb142c0 --- /dev/null +++ b/openwisp_radius/tests/static/test_batch_users.csv @@ -0,0 +1,3 @@ +rahulyadav,cleartext$password,rahul.yadav@openwisp.com,Rahul,Yadav +rahulyadav,pbkdf2_sha256$100000$x3DUBnOFwraV$PU2dZZq1FcuBjagxVLPhhFvpicLn18fFCN5xiLsxATc=,rahul@openwisp.com,, +,,rahul.rajput@openwisp.com,, diff --git a/openwisp_radius/tests/test_commands.py b/openwisp_radius/tests/test_commands.py index 14de1e9a..31483c17 100644 --- a/openwisp_radius/tests/test_commands.py +++ b/openwisp_radius/tests/test_commands.py @@ -171,10 +171,21 @@ def test_delete_old_radiusbatch_users_command(self): name='test1', ) self._call_command('batch_add_users', **options) - self.assertEqual(get_user_model().objects.all().count(), 6) + path = self._get_path('static/test_batch_users.csv') + expiration_date = (now() - timedelta(days=10)).strftime('%d-%m-%Y') + options = dict( + organization=self.default_org.slug, + file=path, + expiration=expiration_date, + name='test2', + ) + self._call_command('batch_add_users', **options) + self.assertEqual(get_user_model().objects.all().count(), 9) call_command('delete_old_radiusbatch_users') - self.assertEqual(get_user_model().objects.all().count(), 3) + self.assertEqual(get_user_model().objects.all().count(), 6) call_command('delete_old_radiusbatch_users', older_than_months=12) + self.assertEqual(get_user_model().objects.all().count(), 3) + call_command('delete_old_radiusbatch_users', older_than_days=9) self.assertEqual(get_user_model().objects.all().count(), 0) @capture_stdout() diff --git a/openwisp_radius/tests/test_tasks.py b/openwisp_radius/tests/test_tasks.py index 97d9459e..b7915a10 100644 --- a/openwisp_radius/tests/test_tasks.py +++ b/openwisp_radius/tests/test_tasks.py @@ -70,7 +70,7 @@ def test_deactivate_expired_users(self): def test_delete_old_radiusbatch_users(self): self._get_expired_user_from_radius_batch() self.assertEqual(User.objects.all().count(), 1) - result = tasks.delete_old_radiusbatch_users.delay(1) + result = tasks.delete_old_radiusbatch_users.delay(30) self.assertTrue(result.successful()) self.assertEqual(User.objects.all().count(), 0)