From d748a41d85fa8bbf832282d6d787bb53b1155e7d Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Tue, 26 Jan 2010 19:59:43 -0500 Subject: [PATCH] Trimming > 1000 stories from feeds. --- apps/reader/models.py | 1 - .../management/commands/trim_feeds.py | 21 +++++++++++++++++++ apps/rss_feeds/models.py | 20 +++++++++++++----- 3 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 apps/rss_feeds/management/commands/trim_feeds.py diff --git a/apps/reader/models.py b/apps/reader/models.py index d00587575..a7a41d23c 100644 --- a/apps/reader/models.py +++ b/apps/reader/models.py @@ -99,7 +99,6 @@ class UserSubscription(models.Model): stories_db = Story.objects.filter(story_feed=self.feed, story_date__gte=date_delta)[:100] # .exclude(id__in=[rs.story.id for rs in read_stories]) - print 'Stories_db: %s' % stories_db.count() stories = self.feed.format_stories(stories_db) classifier_feeds = ClassifierFeed.objects.filter(user=self.user, feed=self.feed) classifier_authors = ClassifierAuthor.objects.filter(user=self.user, feed=self.feed) diff --git a/apps/rss_feeds/management/commands/trim_feeds.py b/apps/rss_feeds/management/commands/trim_feeds.py new file mode 100644 index 000000000..2bc9e1542 --- /dev/null +++ b/apps/rss_feeds/management/commands/trim_feeds.py @@ -0,0 +1,21 @@ +from django.core.management.base import BaseCommand +from django.core.handlers.wsgi import WSGIHandler +from apps.rss_feeds.models import Feed, Story +from django.core.cache import cache +from apps.rss_feeds.models import Feed +from optparse import OptionParser, make_option +import os +import logging +import errno + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option("-f", "--feed", dest="feed", default=None), + ) + + def handle(self, *args, **options): + + feeds = Feed.objects.all() + for f in feeds: + f.trim_feed() + \ No newline at end of file diff --git a/apps/rss_feeds/models.py b/apps/rss_feeds/models.py index 336ba6a1d..f9becbfaf 100644 --- a/apps/rss_feeds/models.py +++ b/apps/rss_feeds/models.py @@ -157,12 +157,22 @@ class Feed(models.Model): return author, created def trim_feed(self): - date_diff = datetime.datetime.now() - datetime.timedelta(self.days_to_trim) - stories = Story.objects.filter(story_feed=self, story_date__lte=date_diff) - for story in stories: - story.story_past_trim_date = True - story.save() + from apps.reader.models import UserStory + stories_deleted_count = 0 + stories = Story.objects.filter(story_feed=self).order_by('-story_date') + for story in stories[1000:]: + user_stories = UserStory.objects.filter(story=story) + user_stories_count = user_stories.count() + user_stories.delete() + story.delete() + stories_deleted_count += 1 + if stories_deleted_count: + print "Trimming %s stories from %s. %s user stories." % ( + stories_deleted_count, + self, + user_stories_count) + def get_stories(self, offset=0, limit=25): stories = cache.get('feed_stories:%s-%s-%s' % (self.id, offset, limit), [])