Merge pull request #793 from gpodder/remove-advertise
[mygpo.git] / mygpo / users / tasks.py
blobeef2b5c73acacd63816bc0d83f45563da88ae4ab
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 mygpo.celery import celery
11 from . import models
13 from celery.utils.log import get_task_logger
15 logger = get_task_logger(__name__)
18 @shared_task(max_retries=5, default_retry_delay=60)
19 @close_connection
20 def sync_user(user_pk):
21 """Syncs all of the user's sync groups"""
22 from mygpo.users.models import SubscriptionException
24 User = get_user_model()
25 user = User.objects.get(pk=user_pk)
27 groups = models.SyncGroup.objects.filter(user=user)
28 for group in groups:
30 try:
31 group.sync()
33 except SubscriptionException:
34 # no need to retry on SubscriptionException
35 pass
37 except Exception as e:
38 logger.exception("retrying task")
39 raise sync_user.retry()
42 @shared_task(run_every=timedelta(hours=1))
43 @close_connection
44 def remove_inactive_users():
45 """Remove users that have not been activated"""
46 User = get_user_model()
48 # time for which to keep unactivated and deleted users
49 valid_days = settings.ACTIVATION_VALID_DAYS
50 remove_before = datetime.utcnow() - timedelta(days=valid_days)
51 logger.warning("Removing unactivated users before %s", remove_before)
53 users = User.objects.filter(is_active=False, date_joined__lt=remove_before)
55 for user in users:
56 clients = models.Client.objects.filter(user=user)
57 logger.warning('Deleting %d clients of user "%s"', len(clients), user.username)
58 clients.delete()
59 logger.warning('Deleting user "%s"', user.username)
60 user.delete()
63 @shared_task(run_every=timedelta(hours=1))
64 @close_connection
65 def clearsessions():
66 """Clear expired sessions
68 This runs code that should normally be run by ``manage.py clearsessions``.
69 If Django's internals change, see
70 django/contrib/sessions/management/commands/clearsessions.py for the
71 current implementation."""
73 engine = import_module(settings.SESSION_ENGINE)
74 engine.SessionStore.clear_expired()