From 46c294f29825fa36bc8e29ce49a035aba1f7a4bf Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Mon, 19 Mar 2012 21:29:19 -0700 Subject: [PATCH] Collecting orphaned feeds for users. These somehow got lost, and I'm not sure how. Eventually I'd like to run this on every user account. --- apps/reader/models.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/apps/reader/models.py b/apps/reader/models.py index 2a082ef07..94110df06 100644 --- a/apps/reader/models.py +++ b/apps/reader/models.py @@ -360,7 +360,37 @@ class UserSubscription(models.Model): switch_feed_for_classifier(MClassifierAuthor) switch_feed_for_classifier(MClassifierFeed) switch_feed_for_classifier(MClassifierTag) + + @classmethod + def collect_orphan_feeds(cls, user): + us = cls.objects.filter(user=user) + usf = UserSubscriptionFolders.objects.get(user=user) + us_feed_ids = set([sub.feed_id for sub in us]) + folders = json.decode(usf.folders) + def collect_ids(folders, found_ids): + for item in folders: + # print ' --> %s' % item + if isinstance(item, int): + # print ' --> Adding feed: %s' % item + found_ids.add(item) + elif isinstance(item, dict): + # print ' --> Descending folder dict: %s' % item.values() + found_ids.update(collect_ids(item.values(), found_ids)) + elif isinstance(item, list): + # print ' --> Descending folder list: %s' % len(item) + found_ids.update(collect_ids(item, found_ids)) + # print ' --> Returning: %s' % found_ids + return found_ids + found_ids = collect_ids(folders, set()) + + logging.info(" ---> Collecting orphans. %s feeds with %s orphans" % (len(us_feed_ids), len(us_feed_ids) - len(found_ids))) + + orphan_ids = us_feed_ids - found_ids + folders.extend(list(orphan_ids)) + usf.folders = json.encode(folders) + usf.save() + class Meta: unique_together = ("user", "feed")