code: def get_posts(self, count=10, offset=0, recent=True, tag=None,
                    user_id=None, include_draft=False):
          
          query = self._client.query(kind='Post')
  
          if tag:
              norm_tag = self.normalize_tag(tag)
              posts_ids = self._filter_posts_by_tag(norm_tag)
  
              if posts_ids:
                  keys = [self._client.key('Post', id) for id in posts_ids]
                  posts = self._client.get_multi(keys)
              else:
                  posts = []
          else:
              if user_id:
                  query.add_filter('user_id', '=', user_id)
              if include_draft:
                  query.add_filter('draft', '=', include_draft)
              if recent:
                  query.order = ['-post_date']
              posts = list(query.fetch(offset=offset, limit=count))
  
          if not posts:
              return []
  
          res = []
          for post in posts:
              p = dict(post)
              res.append(p)
  
          if tag and recent:
              res = sorted(res, key=itemgetter('post_date'), reverse=True)
          elif tag and not recent:
              res = sorted(res, key=itemgetter('post_date'))
  
          if tag:
              res = res[offset:offset+count]
  
          return res
docs: TODO: implement cursors support, if it will be needed.
             But for the regular blog, it is overhead and
             cost savings are minimal.