def render_comment_list(req, all_threads_cached, host_url, bbs, show_comment_form, logined, is_admin, user_name, user): edit_flag = False show_ip = False bbs_key = bbs.key() #コメントとレスを先行して全て取得 entry_key_list = [] for thread in all_threads_cached: if not thread: continue for entry in thread.cached_entry_key: entry_key_list.append(entry) entry_hash = ApiObject.get_cached_object_hash(entry_key_list) res_hash = ShowEntry._get_entry_res(entry_hash) #コメントをレンダリング for thread in all_threads_cached: if not thread: continue entry_list = [] for entry in thread.cached_entry_key: one_entry = entry_hash[entry] entry_list.append(one_entry) thread.cached_render_comment = ShowEntry._render_comment_core( req, host_url, bbs, thread, entry_list, edit_flag, bbs_key, logined, show_comment_form, is_admin, user_name, user, res_hash, show_ip)
def _get_entry_res(entry_list): res_id_list = [] if (type(entry_list) == dict): for com in entry_list: for res in entry_list[com].res_list: res_id_list.append(res) else: for com in entry_list: for res in com.res_list: res_id_list.append(res) return ApiObject.get_cached_object_hash(res_id_list)
def _get_entry_core(bbs,display_n,key): #コメントを取得 entry_query = db.Query(Entry,keys_only=True) entry_query.order("-date"); entry_query.filter("del_flag =",BbsConst.ENTRY_EXIST) entry_query.filter('bbs_key =', bbs) entry_key_list=entry_query.fetch(display_n) entry_list=ApiObject.get_cached_object_list(entry_key_list) #コメントに紐付いたスレッドを取得 thread_key_list=[] for entry in entry_list: thread_key=Entry.thread_key.get_value_for_datastore(entry) thread_key_list.append(thread_key) thread_list=ApiObject.get_cached_object_hash(thread_key_list) #コメントに紐付いたレスを取得 res_key_list=[] res_to_entry={} for entry in entry_list: entry_key=entry.key() res_n=len(entry.res_list) for i in range(0,display_n): no=res_n-1-i if(no>=0): res_key=entry.res_list[no] res_to_entry[res_key]=entry res_key_list.append(res_key) res_list=ApiObject.get_cached_object_list(res_key_list) #EntryとResでソートをかける sort_list=[] for entry in entry_list: if(entry.create_date): obj=(entry,entry.create_date,entry.editor) sort_list.append(obj) for res in res_list: if(res.date): obj=(res_to_entry[res.key()],res.date,res.editor) sort_list.append(obj) sort_list=sorted(sort_list, key=lambda temp: temp[1], reverse=True) sort_list=sort_list[:display_n] #出力する entry_array=[] for tp in sort_list: #ソートした値を取得 entry=tp[0]; editor=tp[2]; #コメントのURLを計算するためにスレッドを取得 try: thread_key=Entry.thread_key.get_value_for_datastore(entry) except: continue thread=thread_list[thread_key] if(not thread): continue thread_title=thread.title #URLに使用するキーを決定 if(thread.short): thread_short=thread.short else: thread_short=thread_key #表示 mee={'short': str(bbs.short), 'bbs_key' : str(bbs.key()), 'thread_key':thread_short, 'entry_key': str(entry.key()), 'thread_title':thread_title, 'editor':editor, 'date':entry.date} entry_array.append(mee) memcache.add(key, entry_array, BbsConst.SIDEBAR_RECENT_ENTRY_CACHE_TIME) return entry_array