From e8cbd7f0db633b122d868fe1c1cfd61263e45c84 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20K=C3=B6gl?= Date: Sun, 3 Mar 2013 12:40:00 +0100 Subject: [PATCH] carry out full sync of a user in background --- mygpo/api/advanced/sync.py | 4 +++- mygpo/cel.py | 1 + mygpo/core/models.py | 5 +++-- mygpo/users/sync.py | 9 --------- mygpo/users/tasks.py | 11 +++++++++++ mygpo/web/views/device.py | 3 ++- 6 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 mygpo/users/tasks.py diff --git a/mygpo/api/advanced/sync.py b/mygpo/api/advanced/sync.py index 582f2981..aba44351 100644 --- a/mygpo/api/advanced/sync.py +++ b/mygpo/api/advanced/sync.py @@ -24,6 +24,7 @@ from mygpo.core.json import json, JSONDecodeError from mygpo.api.basic_auth import require_valid_user, check_username from mygpo.api.httpresponse import JsonResponse from mygpo.users.models import DeviceDoesNotExist, User +from mygpo.users.tasks import sync_user @csrf_exempt @@ -113,4 +114,5 @@ def update_sync_status(user, synclist, stopsync): pass user.save() - user.sync_all() + + sync_user.delay(user) diff --git a/mygpo/cel.py b/mygpo/cel.py index f2e4ff15..8ee7bee9 100644 --- a/mygpo/cel.py +++ b/mygpo/cel.py @@ -13,6 +13,7 @@ celery = Celery('mygpo.celery', backend=settings.BACKEND_URL, include=[ 'mygpo.core.tasks', + 'mygpo.users.tasks', 'mygpo.data.tasks', 'mygpo.admin.tasks', 'mygpo.directory.tasks', diff --git a/mygpo/core/models.py b/mygpo/core/models.py index fd876d11..0c0ec6e6 100644 --- a/mygpo/core/models.py +++ b/mygpo/core/models.py @@ -16,6 +16,7 @@ from mygpo.core.proxy import DocumentABCMeta from mygpo.core.slugs import SlugMixin from mygpo.core.oldid import OldIdMixin from mygpo.web.logo import CoverArt +from mygpo.users.tasks import sync_user class SubscriptionException(Exception): @@ -309,7 +310,7 @@ class Podcast(Document, SlugMixin, OldIdMixin): state.subscribe(device) try: state.save() - user.sync_all() + sync_user.delay(user) except Unauthorized as ex: raise SubscriptionException(ex) @@ -321,7 +322,7 @@ class Podcast(Document, SlugMixin, OldIdMixin): state.unsubscribe(device) try: state.save() - user.sync_all() + sync_user.delay(user) except Unauthorized as ex: raise SubscriptionException(ex) diff --git a/mygpo/users/sync.py b/mygpo/users/sync.py index 8b44df2b..115f83af 100644 --- a/mygpo/users/sync.py +++ b/mygpo/users/sync.py @@ -136,15 +136,6 @@ class SyncedDevicesMixin(DocumentSchema): return map(self.get_device, ids) - def sync_all(self): - """ Syncs all of the user's device groups """ - - for group in self.get_grouped_devices(): - if group.is_synced: - device = group.devices[0] - self.sync_group(device) - - def sync_group(self, device): """ Sync the group of the device """ diff --git a/mygpo/users/tasks.py b/mygpo/users/tasks.py new file mode 100644 index 00000000..78f22ec3 --- /dev/null +++ b/mygpo/users/tasks.py @@ -0,0 +1,11 @@ +from mygpo.cel import celery + + +@celery.task(max_retries=5, default_retry_delay=60) +def sync_user(user): + """ Syncs all of the user's device groups """ + + for group in user.get_grouped_devices(): + if group.is_synced: + device = group.devices[0] + user.sync_group(device) diff --git a/mygpo/web/views/device.py b/mygpo/web/views/device.py index 9f102bd5..1892389c 100644 --- a/mygpo/web/views/device.py +++ b/mygpo/web/views/device.py @@ -36,6 +36,7 @@ from mygpo.api import simple from mygpo.decorators import allowed_methods, repeat_on_conflict from mygpo.users.models import Device, DeviceUIDException, \ DeviceDoesNotExist +from mygpo.users.tasks import sync_user from mygpo.db.couchdb.podcast_state import podcast_states_for_device @@ -333,7 +334,7 @@ def sync(request, device): except DeviceDoesNotExist as e: messages.error(request, str(e)) - request.user.sync_all() + sync_user.delay(request.user) return HttpResponseRedirect(reverse('device', args=[device.uid])) -- 2.11.4.GIT