def getPostsForUser(profile, include_alliance_posts, page_no, page_size): """Gets the posts that the given user has made. Args: profile The profile of the user whose posts we're after. include_alliance_posts: If True, we'll include posts the user has made to their alliance forum.""" if not profile.user: # The user will need to log in to the website in order to set the user. return [] user_id = profile.key().name() keyname = 'forum:threads-per-user:%s:%d:%d:%d' % (str(user_id), int(include_alliance_posts), page_no, page_size) posts = memcache.get(keyname) if not posts: query = model.forum.ForumPost.all().filter("user", profile.user) if not include_alliance_posts and profile.alliance_id: alliance = model.profile.Alliance.Fetch(profile.realm_name, profile.alliance_id) if alliance: alliance_forum = getAllianceForum(profile.realm_name, alliance) query.filter("forum !=", alliance_forum).order("forum") query = query.order("-posted") if page_no == 0: it = query.run(limit=page_size) else: cursor = ctrl.findCursor(query, "forum-posts-for-user:%s:%d" % (str(user_id), int(include_alliance_posts)), page_no, page_size) it = query.with_cursor(cursor) posts = [] for post in it: posts.append(post) memcache.set(keyname, posts) return posts
def getPosts(pageNo=0, pageSize=5, includeUnpublished=False): keyname = 'posts:%d:%d:%d' % (pageNo, pageSize, int(includeUnpublished)) posts = memcache.get(keyname) if not posts: query = model.blog.Post.all() if not includeUnpublished: query = query.filter("isPublished", True) query = query.order('-posted') if pageNo == 0: it = query.run(limit=pageSize) else: cursor = ctrl.findCursor( query, "blog-posts:%d" % (int(includeUnpublished)), pageNo, pageSize) it = query.with_cursor(cursor) posts = [] for post in it: posts.append(post) if len(posts) >= pageSize: break # also, save the cursor for the next page, since it's likely that the user will want to navigate to the # next page anyway memcache.set( 'post-page-cursor:%d:%d:%d' % (pageNo + 1, pageSize, int(includeUnpublished)), query.cursor()) memcache.set(keyname, posts) return posts
def getThreads(forum, page_no, page_size): keyname = 'forum:threads:%s:%d:%d' % (str(forum.key()), page_no, page_size) threads = memcache.get(keyname) if not threads: query = model.forum.ForumThread.all().filter("forum", forum) query = query.order("-last_post") if page_no == 0: it = query.run(limit=page_size) else: cursor = ctrl.findCursor(query, "forum-threads:%s" % (str(forum.key())), page_no, page_size) it = query.with_cursor(cursor) threads = [] n = 0 for thread in it: n += 1 if thread.is_sticky: # note: stickies will make the page slightly smaller, but it should # only ever be one or two anyway... continue threads.append(thread) if n >= page_size: break memcache.set(keyname, threads) return threads
def getPosts(pageNo=0, pageSize=5, includeUnpublished=False): keyname = 'posts:%d:%d:%d' % (pageNo, pageSize, int(includeUnpublished)) posts = memcache.get(keyname) if not posts: query = model.blog.Post.all() if not includeUnpublished: query = query.filter("isPublished", True) query = query.order('-posted') if pageNo == 0: it = query.run(limit=pageSize) else: cursor = ctrl.findCursor(query, "blog-posts:%d" % (int(includeUnpublished)), pageNo, pageSize) it = query.with_cursor(cursor) posts = [] for post in it: posts.append(post) if len(posts) >= pageSize: break # also, save the cursor for the next page, since it's likely that the user will want to navigate to the # next page anyway memcache.set('post-page-cursor:%d:%d:%d' % (pageNo+1, pageSize, int(includeUnpublished)), query.cursor()) memcache.set(keyname, posts) return posts
def getPosts(forum, forum_thread, page_no, page_size): keyname = 'forum:posts:%s:%d:%d' % (str(forum_thread.key()), page_no, page_size) posts = memcache.get(keyname) if not posts: query = model.forum.ForumPost.all().ancestor(forum_thread) query = query.order("posted") if page_no == 0: it = query.run(limit=page_size) else: cursor = ctrl.findCursor(query, "forum-posts:%s" % (str(forum_thread.key())), page_no, page_size) it = query.with_cursor(cursor) posts = [] for post in it: posts.append(post) if len(posts) >= page_size: break memcache.set(keyname, posts) return posts