Example #1
0
    def switch_feed(cls, user_id, old_feed_id, new_feed_id):
        r = redis.Redis(connection_pool=settings.REDIS_STORY_HASH_POOL)
        # r2 = redis.Redis(connection_pool=settings.REDIS_STORY_HASH_POOL2)
        p = r.pipeline()
        # p2 = r2.pipeline()
        story_hashes = cls.get_stories(user_id, old_feed_id, r=r)
        
        for story_hash in story_hashes:
            _, hash_story = MStory.split_story_hash(story_hash)
            new_story_hash = "%s:%s" % (new_feed_id, hash_story)
            read_feed_key = "RS:%s:%s" % (user_id, new_feed_id)
            p.sadd(read_feed_key, new_story_hash)
            # p2.sadd(read_feed_key, new_story_hash)
            p.expire(read_feed_key, settings.DAYS_OF_STORY_HASHES*24*60*60)
            # p2.expire(read_feed_key, settings.DAYS_OF_STORY_HASHES*24*60*60)

            read_user_key = "RS:%s" % (user_id)
            p.sadd(read_user_key, new_story_hash)
            # p2.sadd(read_user_key, new_story_hash)
            p.expire(read_user_key, settings.DAYS_OF_STORY_HASHES*24*60*60)
            # p2.expire(read_user_key, settings.DAYS_OF_STORY_HASHES*24*60*60)
        
        p.execute()
        # p2.execute()
        
        if len(story_hashes) > 0:
            logging.info(" ---> %s read stories" % len(story_hashes))
Example #2
0
    def mark_story_hashes_read(cls, user_id, story_hashes, r=None, s=None):
        if not r:
            r = redis.Redis(connection_pool=settings.REDIS_STORY_HASH_POOL)
        if not s:
            s = redis.Redis(connection_pool=settings.REDIS_POOL)
        # if not r2:
        #     r2 = redis.Redis(connection_pool=settings.REDIS_STORY_HASH_POOL2)
        
        p = r.pipeline()
        # p2 = r2.pipeline()
        feed_ids = set()
        friend_ids = set()
        
        if not isinstance(story_hashes, list):
            story_hashes = [story_hashes]
        
        for story_hash in story_hashes:
            feed_id, _ = MStory.split_story_hash(story_hash)
            feed_ids.add(feed_id)

            # Find other social feeds with this story to update their counts
            friend_key = "F:%s:F" % (user_id)
            share_key = "S:%s" % (story_hash)
            friends_with_shares = [int(f) for f in s.sinter(share_key, friend_key)]
            friend_ids.update(friends_with_shares)
            cls.mark_read(user_id, feed_id, story_hash, social_user_ids=friends_with_shares, r=p)
        
        p.execute()
        # p2.execute()
        
        return list(feed_ids), list(friend_ids)
Example #3
0
def more_like_this(request):
    user = get_user(request)
    get_post = getattr(request, request.method)
    order = get_post.get('order', 'newest')
    page = int(get_post.get('page', 1))
    limit = int(get_post.get('limit', 10))
    offset = limit * (page - 1)
    story_hash = get_post.get('story_hash')

    feed_ids = [
        us.feed_id for us in UserSubscription.objects.filter(user=user)
    ]
    feed_ids, _ = MStory.split_story_hash(story_hash)
    story_ids = SearchStory.more_like_this([feed_ids],
                                           story_hash,
                                           order,
                                           offset=offset,
                                           limit=limit)
    stories_db = MStory.objects(story_hash__in=story_ids).order_by(
        '-story_date' if order == "newest" else 'story_date')
    stories = Feed.format_stories(stories_db)

    return {
        "stories": stories,
    }
Example #4
0
    def switch_feed(cls, user_id, old_feed_id, new_feed_id):
        r = redis.Redis(connection_pool=settings.REDIS_STORY_HASH_POOL)
        p = r.pipeline()
        story_hashes = cls.get_stories(user_id, old_feed_id, r=r)

        for story_hash in story_hashes:
            _, hash_story = MStory.split_story_hash(story_hash)
            new_story_hash = "%s:%s" % (new_feed_id, hash_story)
            p.sadd("RS:%s:%s" % (user_id, new_feed_id), new_story_hash)
        
        p.execute()
        
        if len(story_hashes) > 0:
            logging.info(" ---> %s read stories" % len(story_hashes))
Example #5
0
    def switch_feed(cls, user_id, old_feed_id, new_feed_id):
        r = redis.Redis(connection_pool=settings.REDIS_STORY_HASH_POOL)
        p = r.pipeline()
        story_hashes = cls.get_stories(user_id, old_feed_id, r=r)

        for story_hash in story_hashes:
            _, hash_story = MStory.split_story_hash(story_hash)
            new_story_hash = "%s:%s" % (new_feed_id, hash_story)
            p.sadd("RS:%s:%s" % (user_id, new_feed_id), new_story_hash)

        p.execute()

        if len(story_hashes) > 0:
            logging.info(" ---> %s read stories" % len(story_hashes))