mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
Phase 2: switching to using story_hash index instead of compound unique story_feed_id/story_guid index.
This commit is contained in:
parent
fc8b2bd4ec
commit
a2c1eb8ae3
3 changed files with 23 additions and 23 deletions
|
@ -356,13 +356,8 @@ class UserSubscription(models.Model):
|
|||
logging.user(request, "~FYRead story in feed: %s" % (self.feed))
|
||||
|
||||
for story_id in set(story_ids):
|
||||
try:
|
||||
story = MStory.objects.get(story_feed_id=self.feed_id, story_guid=story_id)
|
||||
except MStory.DoesNotExist:
|
||||
# Story has been deleted, probably by feed_fetcher.
|
||||
continue
|
||||
except MStory.MultipleObjectsReturned:
|
||||
story = MStory.objects.filter(story_feed_id=self.feed_id, story_guid=story_id)[0]
|
||||
story, _ = MStory.find_story(story_feed_id=self.feed_id, story_id=story_id)
|
||||
if not story: continue
|
||||
now = datetime.datetime.utcnow()
|
||||
date = now if now > story.story_date else story.story_date # For handling future stories
|
||||
m, _ = MUserStory.objects.get_or_create(story_id=story_id, user_id=self.user_id,
|
||||
|
@ -510,11 +505,12 @@ class UserSubscription(models.Model):
|
|||
duplicate_story = user_story.story
|
||||
if duplicate_story:
|
||||
story_guid = duplicate_story.story_guid if hasattr(duplicate_story, 'story_guid') else duplicate_story.id
|
||||
original_story = MStory.objects(story_feed_id=new_feed.pk,
|
||||
story_guid=story_guid)
|
||||
original_story, _ = MStory.find_story(story_feed_id=new_feed.pk,
|
||||
story_id=story_guid,
|
||||
original_only=True)
|
||||
|
||||
if original_story:
|
||||
user_story.story = original_story[0]
|
||||
user_story.story = original_story
|
||||
try:
|
||||
user_story.save()
|
||||
except OperationError:
|
||||
|
|
|
@ -843,11 +843,13 @@ class Feed(models.Model):
|
|||
try:
|
||||
existing_story = MStory.objects.get(id=existing_story.id)
|
||||
except ValidationError:
|
||||
existing_story = MStory.objects.get(story_feed_id=existing_story.story_feed_id,
|
||||
story_guid=existing_story.id)
|
||||
existing_story, _ = MStory.find_story(existing_story.story_feed_id,
|
||||
existing_story.id,
|
||||
original_only=True)
|
||||
elif existing_story and existing_story.story_guid:
|
||||
existing_story = MStory.objects.get(story_feed_id=existing_story.story_feed_id,
|
||||
story_guid=existing_story.story_guid)
|
||||
existing_story, _ = MStory.find_story(existing_story.story_feed_id,
|
||||
existing_story.story_guid,
|
||||
original_only=True)
|
||||
else:
|
||||
raise MStory.DoesNotExist
|
||||
except (MStory.DoesNotExist, OperationError):
|
||||
|
@ -923,7 +925,8 @@ class Feed(models.Model):
|
|||
|
||||
def save_popular_tags(self, feed_tags=None, verbose=False):
|
||||
if not feed_tags:
|
||||
all_tags = MStory.objects(story_feed_id=self.pk, story_tags__exists=True).item_frequencies('story_tags')
|
||||
all_tags = MStory.objects(story_feed_id=self.pk,
|
||||
story_tags__exists=True).item_frequencies('story_tags')
|
||||
feed_tags = sorted([(k, v) for k, v in all_tags.items() if int(v) > 0],
|
||||
key=itemgetter(1),
|
||||
reverse=True)[:25]
|
||||
|
@ -1426,7 +1429,7 @@ class MFeedPage(mongo.Document):
|
|||
|
||||
class MStory(mongo.Document):
|
||||
'''A feed item'''
|
||||
story_feed_id = mongo.IntField(unique_with='story_guid')
|
||||
story_feed_id = mongo.IntField()
|
||||
story_date = mongo.DateTimeField()
|
||||
story_title = mongo.StringField(max_length=1024)
|
||||
story_content = mongo.StringField()
|
||||
|
@ -1501,9 +1504,10 @@ class MStory(mongo.Document):
|
|||
def find_story(cls, story_feed_id, story_id, original_only=False):
|
||||
from apps.social.models import MSharedStory
|
||||
original_found = True
|
||||
|
||||
story = cls.objects(story_feed_id=story_feed_id,
|
||||
story_guid=story_id).limit(1).first()
|
||||
|
||||
guid_hash = hashlib.sha1(story_id).hexdigest()[:6]
|
||||
story_hash = "%s:%s" % (story_feed_id, guid_hash)
|
||||
story = cls.objects(story_hash=story_hash).limit(1).first()
|
||||
|
||||
if not story:
|
||||
original_found = False
|
||||
|
|
|
@ -575,10 +575,10 @@ def mark_story_as_unshared(request):
|
|||
format = request.REQUEST.get('format', 'json')
|
||||
original_story_found = True
|
||||
|
||||
story = MStory.objects(story_feed_id=feed_id, story_guid=story_id).limit(1).first()
|
||||
if not story:
|
||||
original_story_found = False
|
||||
|
||||
story, original_story_found = MStory.find_story(story_feed_id=feed_id,
|
||||
story_id=story_id,
|
||||
original_only=True)
|
||||
|
||||
shared_story = MSharedStory.objects(user_id=request.user.pk,
|
||||
story_feed_id=feed_id,
|
||||
story_guid=story_id).limit(1).first()
|
||||
|
|
Loading…
Add table
Reference in a new issue