def getTrendingStreams():
    trending = memcache.get('TrendingStat')
    if trending:
        return trending
    trending = [
        (x.key.id(), 0)
        for x in Stream.query(ancestor=getStreamKey()).order(Stream.viewCount)
    ]
    updateTrendingStreams(trending)
    return trending
예제 #2
0
def getTrie():
    trie = memcache.get('search')
    if trie:
        return trie
    trie = Trie()
    for stream in Stream.query(ancestor=getStreamKey()):
        sid = stream.key.id()
        for str in formatSearchContent(stream.name):
            trie.add(str, sid)
        for str in formatSearchContent(stream.tag):
            trie.add(str, sid)
        for str in formatSearchContent("".join(
                re.findall(r'(.+)@', stream.user))):
            trie.add(str, sid)
        updateTrie(trie)
    return trie
    def get(self):
        queue = getQueue()
        stat = getStat()
        now = datetime.now()
        while len(queue) > 0 and now - queue[0][1] > timedelta(hours=1):
            if queue[0][0] in stat:
                stat[queue[0][0]] = stat[queue[0][0]] - 1
                if stat[queue[0][0]] == 0:
                    del (stat[queue[0][0]])
            else:
                logging.error(
                    "Fatal error with trending stream data. Data in queue but does not in stat."
                )
            queue.popleft()
        trending = [(x.key.id(), stat[x.key.id()] if x.key.id() in stat else 0)
                    for x in Stream.query(
                        ancestor=getStreamKey()).order(-Stream.viewCount)]
        trending.sort(key=lambda x: -x[1])
        updateQueue(queue)
        updateStat(stat)
        updateTrendingStreams(trending)
        n = 0
        trendingStreams = []
        for stat in trending:
            stream = Stream.get_by_id(stat[0], getStreamKey())
            if stream:
                trendingStreams.append((stream, stat[1]))
                n = n + 1
                if n == Trending_Stream_Handler.digest_num:
                    break
        for frequency in Trending_Stream_Handler.email_digest_counter.keys():
            Trending_Stream_Handler.email_digest_counter[
                frequency] = Trending_Stream_Handler.email_digest_counter[
                    frequency] + 1
            if Trending_Stream_Handler.email_digest_counter[
                    frequency] == Trending_Stream_Handler.email_digest_bound[
                        frequency]:
                Trending_Stream_Handler.email_digest_counter[frequency] = 0
                for userSetting in UserEmailSetting.query(
                        UserEmailSetting.email_update_rate == frequency):
                    emails.sendTrendingStreamEmails(userSetting.user,
                                                    userSetting.name,
                                                    trendingStreams)

        self.response.write(str(trending))