From 493cde0f7b8a54f6d802f9c0b5574af2b82f6dac Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20K=C3=B6gl?= Date: Tue, 12 Nov 2013 18:04:58 +0100 Subject: [PATCH] refactor retrieval of devices --- mygpo/users/models.py | 17 ++++++++++++++--- mygpo/users/sync.py | 2 +- mygpo/web/views/podcast.py | 4 ++-- mygpo/web/views/subscriptions.py | 2 +- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/mygpo/users/models.py b/mygpo/users/models.py index 4ed90b30..a2354c56 100644 --- a/mygpo/users/models.py +++ b/mygpo/users/models.py @@ -504,18 +504,29 @@ class User(BaseUser, SyncedDevicesMixin, SettingsMixin): return filter(deleted, self.devices) - def get_devices_by_id(self): - return dict( (device.id, device) for device in self.devices) + def get_devices_by_id(self, device_ids=None): + """ Returns a dict of {devices_id: device} """ + if device_ids is None: + # return all devices + devices = self.devices + else: + devices = self.get_devices(device_ids) + + return {device.id: device for device in devices} def get_device(self, id): if not hasattr(self, '__device_by_id'): - self.__devices_by_id = dict( (d.id, d) for d in self.devices) + self.__devices_by_id = self.get_devices_by_id() return self.__devices_by_id.get(id, None) + def get_devices(self, ids): + return filter(None, (self.get_device(dev_id) for dev_id in ids)) + + def get_device_by_uid(self, uid, only_active=True): if not hasattr(self, '__devices_by_uio'): diff --git a/mygpo/users/sync.py b/mygpo/users/sync.py index bbd5a104..402ef005 100644 --- a/mygpo/users/sync.py +++ b/mygpo/users/sync.py @@ -193,7 +193,7 @@ class SyncedDevicesMixin(DocumentSchema): The state is represented by the latest actions for each podcast """ device_ids = self.sync_groups[group_index] - devices = [self.get_device(device_id) for device_id in device_ids] + devices = self.get_devices(device_ids) state = {} diff --git a/mygpo/web/views/podcast.py b/mygpo/web/views/podcast.py index 453348eb..f07d396e 100644 --- a/mygpo/web/views/podcast.py +++ b/mygpo/web/views/podcast.py @@ -83,7 +83,7 @@ def show(request, podcast): if user.is_authenticated(): state = podcast_state_for_user_podcast(user, podcast) subscribed_devices = state.get_subscribed_device_ids() - subscribed_devices = [user.get_device(x) for x in subscribed_devices] + subscribed_devices = user.get_devices(subscribed_devices) subscribe_targets = podcast.subscribe_targets(user) @@ -361,7 +361,7 @@ def unsubscribe_all(request, podcast): state = podcast_state_for_user_podcast(user, podcast) dev_ids = state.get_subscribed_device_ids() - devs = [user.get_device(x) for x in dev_ids] + devs = user.get_devices(dev_ids) # ungroup groups devs = [dev[0] if isinstance(dev, list) else dev for dev in devs] diff --git a/mygpo/web/views/subscriptions.py b/mygpo/web/views/subscriptions.py index a62a6666..1502b5e8 100644 --- a/mygpo/web/views/subscriptions.py +++ b/mygpo/web/views/subscriptions.py @@ -89,7 +89,7 @@ def create_subscriptionlist(request): device_ids = list(set(device_ids)) podcasts = podcasts_to_dict(podcast_ids) - devices = dict([ (id, user.get_device(id)) for id in device_ids]) + devices = user.get_devices_by_id(device_ids) subscription_list = {} for public, podcast_id, device_id in subscriptions: -- 2.11.4.GIT