Merge pull request #699 from JuanCanham/lint/cleanup-unused-imports
[mygpo.git] / mygpo / users / tasks.py
blobf1f328f5af17e4821464aa4b4763e83213e3e83d
1 from datetime import datetime, timedelta
2 from importlib import import_module
4 from celery import shared_task
5 from django_db_geventpool.utils import close_connection
7 from django.contrib.auth import get_user_model
8 from django.conf import settings
10 from . import models
12 from celery.utils.log import get_task_logger
14 logger = get_task_logger(__name__)
17 @shared_task(max_retries=5, default_retry_delay=60)
18 @close_connection
19 def sync_user(user_pk):
20 """Syncs all of the user's sync groups"""
21 from mygpo.users.models import SubscriptionException
23 User = get_user_model()
24 user = User.objects.get(pk=user_pk)
26 groups = models.SyncGroup.objects.filter(user=user)
27 for group in groups:
29 try:
30 group.sync()
32 except SubscriptionException:
33 # no need to retry on SubscriptionException
34 pass
36 except Exception:
37 logger.exception("retrying task")
38 raise sync_user.retry()
41 @shared_task(run_every=timedelta(hours=1))
42 @close_connection
43 def remove_inactive_users():
44 """Remove users that have not been activated"""
45 User = get_user_model()
47 # time for which to keep unactivated and deleted users
48 valid_days = settings.ACTIVATION_VALID_DAYS
49 remove_before = datetime.utcnow() - timedelta(days=valid_days)
50 logger.warning("Removing unactivated users before %s", remove_before)
52 users = User.objects.filter(is_active=False, date_joined__lt=remove_before)
54 for user in users:
55 clients = models.Client.objects.filter(user=user)
56 logger.warning('Deleting %d clients of user "%s"', len(clients), user.username)
57 clients.delete()
58 logger.warning('Deleting user "%s"', user.username)
59 user.delete()
62 @shared_task(run_every=timedelta(hours=1))
63 @close_connection
64 def clearsessions():
65 """Clear expired sessions
67 This runs code that should normally be run by ``manage.py clearsessions``.
68 If Django's internals change, see
69 django/contrib/sessions/management/commands/clearsessions.py for the
70 current implementation."""
72 engine = import_module(settings.SESSION_ENGINE)
73 engine.SessionStore.clear_expired()