Example #1
0
  def get_tweets(self, limit=10, offset=0):
    from tweet import Tweet

    new_tweets = []

    cached_media = memcache.get(self.id) or {}
    cached_tweets_json = cached_media.get('tweets') or []
    if not cached_tweets_json or limit + offset > len(cached_tweets_json):
      tweets = Tweet.all().filter('media =', self)
      if len(cached_tweets_json) and offset < len(cached_tweets_json):
        latest_time = iso8601.parse_date(cached_tweets_json[0]['time']).replace(tzinfo=None)
        tweets = tweets.filter('time >', latest_time)
      tweets = tweets.order('-time').fetch(limit, offset=offset)

      if tweets and len(tweets):
        new_time = tweets[0].time
        inserted = False
        # Insert by timestamp
        for i in range(len(cached_tweets_json)):
          time = iso8601.parse_date(cached_tweets_json[i]['time']).replace(tzinfo=None)
          if new_time > time:
            for t in tweets:
              if t.id == cached_tweets_json[i]['id']:
                break
              new_tweets.append(t.to_json())
            inserted = True
          if inserted:
            new_tweets += cached_tweets_json[i:]
            break
          new_tweets.append(cached_tweets_json[i])

        if not cached_tweets_json or not inserted:
          new_tweets = cached_tweets_json + [t.to_json() for t in tweets]
      cached_tweets_json = new_tweets if len(new_tweets) else cached_tweets_json
      cached_media['tweets'] = cached_tweets_json
      memcache.set(self.id, cached_media)

    return cached_tweets_json[offset:offset+limit]