def index(request): ''' top page ''' browser_lang = request.lang results = memcache.get(CACHE_NAME_FOR_TOP_PAGE_RESULTS+'-'+browser_lang) if results is None: query_results = AdminPage.all().filter(u'lang =',DEFAULT_LANG).filter(u'display_page_flg =',True).order('page_order').fetch(limit=TOP_PAGE_CONTENT_NUM) results = [] for r in query_results: if browser_lang != DEFAULT_LANG: translations = AdminPage.all().ancestor(r.key()).fetch(1000) browser_lang_trans = None for trans in translations: if trans.lang == browser_lang: browser_lang_trans = trans break if browser_lang_trans: r.content = browser_lang_trans.content r.title = browser_lang_trans.title url = r.external_url if r.external_url else '/'+r.key().name()+'/' if browser_lang != DEFAULT_LANG: url += '?hl='+browser_lang snippet = html.strip_tags(markdown(r.content)).split('\n')[0] try: first_image = json.loads(r.images)['images'][0]['image_path'] except: first_image = None results.append({'title':r.title,'snippet':snippet,'url':url,'first_image':first_image}) if len(results) == 0:results = DUMMY_DATA_FOR_TOP_PAGE logging.info(results) memcache.set(CACHE_NAME_FOR_TOP_PAGE_RESULTS+'-'+browser_lang,results) article_results = get_article_list(browser_lang,1,4) return render_to_response('mainapp/index.html', {'results': results,'article_results':article_results})
def get_article_list(browser_lang,page,article_per_page,tag_name=False): if tag_name: tag_name_encoded = unicode(tag_name) else: tag_name_encoded = str(tag_name) memcache_key = u'article-'+str(page)+u'-'+str(article_per_page)+u'-'+urllib.quote(tag_name_encoded.encode('utf-8'))+u'-'+browser_lang logging.info(memcache_key) results_dic = memcache.get(memcache_key) #if memcache data exist return if results_dic: return results_dic #else memcach data is none,query from datastore now = datetime.datetime.now() logging.info(now) query = Article.all().filter(u'lang =',DEFAULT_LANG).filter(u'display_page_flg =',True) if tag_name: query.filter(u'tags =',tag_name) query.filter(u'display_time <',now).order('-display_time') paginator = Paginator(query,article_per_page) try: results = paginator.page(page) except (EmptyPage,InvalidPage): results = paginator.page(paginator.num_pages) return_list = [] for r in results.object_list: browser_lang_trans = None if browser_lang != DEFAULT_LANG: translations = Article.all().ancestor(r.key()).fetch(1000) #browser_lang_trans = None for trans in translations: if trans.lang == browser_lang: browser_lang_trans = trans break if browser_lang_trans: r.content = browser_lang_trans.content r.title = browser_lang_trans.title url = r.external_url if r.external_url else url_for('mainapp/show_each_article',key_name=r.key().name()) if browser_lang_trans and browser_lang != DEFAULT_LANG: url += '?hl='+browser_lang snippet = html.strip_tags(markdown(r.content)).split('\n')[0] try: first_image = json.loads(r.images)['images'][0]['image_path'] except: first_image = None return_list.append({'key':str(r.key()), 'id':r.key().name(), 'title':r.title, 'snippet':snippet, 'url':url, 'first_image':first_image, 'display_time':str(r.display_time)[:10]}) results_dic = {'articles':return_list, 'current_page':results.number, 'previous_page':results.previous_page_number, 'next_page':results.next_page_number, 'has_next':results.has_next, 'total_pages':results.paginator.num_pages, 'tag_name':tag_name} memcache.set(memcache_key,results_dic) return results_dic
def get_page_content(browser_lang,model_name,key_name,is_admin=False): default_page = MODEL_DICT[model_name].get_by_key_name(key_name) if default_page is None: return None return_page = default_page if is_admin is False and default_page.display_page_flg is False: return None if browser_lang != DEFAULT_LANG: logging.info('browser_lang:'+browser_lang) translations = MODEL_DICT[model_name].all().ancestor(default_page.key()).fetch(1000) for trans in translations: if trans.lang == browser_lang: return_page = trans if hasattr(default_page,'display_time'): return_page.display_time = default_page.display_time markdown_converted_content = markdown(return_page.content) snippet = html.strip_tags(markdown_converted_content).split('\n')[0] return_page.content = markdown_converted_content setattr(return_page,'snippet',snippet) try: first_image = json.loads(return_page.images)['images'][0]['image_path'] except: first_image = None setattr(return_page,'first_image',first_image) return return_page
def index(request): key_name = 'jfoottrade2013-2014' page = memcache.get(key_name) if page is None: page = Article.get_by_key_name(key_name) if page is None: return render_to_response('mainapp/404.html', {}) markdown_converted_content = markdown(page.content) snippet = html.strip_tags(markdown_converted_content).split('\n')[0] page.content = markdown_converted_content setattr(page,'snippet',snippet) try: first_image = json.loads(page.images)['images'][0]['image_path'] except: first_image = None setattr(page,'first_image',first_image) memcache.set(key_name,page) return render_to_response('vapp/index.html', {'page': page})
def get_search_list(keyword,browser_lang,page,article_per_page,cursor_string=None): limit = article_per_page timestamp_desc = search.SortExpression( expression='timestamp', direction=search.SortExpression.DESCENDING, default_value=0) sort = search.SortOptions(expressions=[timestamp_desc], limit=1000) if cursor_string is None: cursor = search.Cursor() else: cursor = search.Cursor(web_safe_string=cursor_string) options = search.QueryOptions( limit=limit, # the number of results to return cursor=cursor, sort_options=sort) if browser_lang == 'all': query_string = keyword +' display_page_flg:True' else: query_string = keyword +' lang:'+browser_lang+' display_page_flg:True' query = search.Query(query_string=query_string,options=options) index = search.Index(name='Pages') si_results = index.search(query) next_cursor_obj = si_results.cursor logging.info(next_cursor_obj) logging.info(si_results.number_found) if next_cursor_obj: next_cursor = next_cursor_obj.web_safe_string else: next_cursor = None return_list = [] for sr in si_results: title = None snippet = None url = None first_image = None display_time = None key = None for f in sr.fields: if f.name == 'content': snippet = html.strip_tags(markdown(f.value)).split('\n')[0] elif f.name == 'images': try: first_image = json.loads(f.value)['images'][0]['image_path'] except: pass elif f.name == 'title': title = f.value elif f.name == 'key': key = f.value elif f.name == 'url': url = f.value if browser_lang != DEFAULT_LANG: if url: url += '?hl='+browser_lang return_list.append({'key':key, 'id':sr.doc_id, 'title':title, 'snippet':snippet, 'url':url, 'first_image':first_image, 'display_time':display_time}) results_dic = {'articles':return_list, 'current_page':page, 'total_pages':si_results.number_found/article_per_page+1, 'tag_name':None, 'cursor':next_cursor, 'keyword':keyword} return results_dic
def toMarkdown(text): from mainapp.markdown2 import markdown return_html = markdown(text) return return_html