Commit 58a61be82f0efef2e3014fe4f41fe4176950341f

Authored by Sergio Oliveira
1 parent a991d922

Adding script to erase inactive accounts

src/accounts/management/__init__.py 0 → 100644
src/accounts/management/commands/__init__.py 0 → 100644
src/accounts/management/commands/delete_invalid.py 0 → 100644
... ... @@ -0,0 +1,42 @@
  1 +
  2 +
  3 +from django.db.models import F
  4 +from django.utils import timezone
  5 +from django.utils.translation import ugettext as _
  6 +from django.core.management.base import BaseCommand, CommandError
  7 +
  8 +
  9 +from ...models import User
  10 +
  11 +
  12 +class Command(BaseCommand):
  13 + """Delete user accounts that have never logged in.
  14 +
  15 + Delete from database user accounts that have never logged in
  16 + and are at least 24h older.
  17 +
  18 + """
  19 +
  20 + help = __doc__
  21 +
  22 + def handle(self, *args, **kwargs):
  23 + seconds = timezone.timedelta(seconds=1)
  24 + now = timezone.now()
  25 + one_day_ago = timezone.timedelta(days=1)
  26 +
  27 + # Query for users that have NEVER logged in
  28 + #
  29 + # By default django sets the last_login as auto_now and then
  30 + # last_login is pretty much the same than date_joined
  31 + # (instead of null as I expected). Because of that we query
  32 + # for users which last_login is between date_joined - N and
  33 + # date_joined + N, where N is a small constant in seconds.
  34 + users = User.objects.filter(last_login__gt=(F('date_joined') - seconds),
  35 + last_login__lt=(F('date_joined') + seconds),
  36 + date_joined__lt=now-one_day_ago)
  37 + count = 0
  38 + for user in users:
  39 + count += 1
  40 + user.delete()
  41 +
  42 + print _(u'%(count)s users deleted.') % {'count': count}
... ...