def GET(self): u = web.input() pg, sl, with_img = u['pg'] if 'pg' in u else None, u['sl'] if 'sl' in u else None, u['with_img'] if 'with_img' in u else None current_page = int(pg) sites_for_now = parts_model.Sites().show_sites() if sl: new_sites = [] for site in sl.split(","): new_sites.append("'%s'" % site) sites_for_now = new_sites site_select = ",".join(sites_for_now) img_post_ids = "" if with_img: sk = SkuInfo() sk.cl.SetLimits(0, 1000) res = sk.cl.Query('.jpg') img_post = [("'%s'" % i['id']) for i in res['matches']] img_post_ids = "AND SUBSTRING_INDEX( SUBSTRING_INDEX(listings_posts.idlistings_posts, ':', 2), ':', -1) IN (" + ",".join(img_post) + ")" values = {'site_select': site_select, 'img': img_post_ids} sc = sphinxapi.SphinxClient() sc.SetServer("127.0.0.1", 3312) #sc.SetSortMode(sphinxapi.SPH_SORT_ATTR_DESC, "post_date") sql_id = """SELECT site_id FROM site WHERE site_nm IN (%(site_select)s)""" % ({'site_select': site_select}) id_rows = db.bind.execute(sql_id) site_ids = [int(i[0]) for i in id_rows] limit = 50 sc.SetFilter('site_id', site_ids) #sc.SetLimits(int(pg) * 10, limit) res = sc.Query("") num_rows = res['total_found'] pg = Pageset(num_rows, limit) pg.current_page(current_page) option_select_key = "%s:%s:%s" % (":".join(sites_for_now), pg.skipped(), pg.entries_per_page()) option_select_key_browse = "%s:%s:%s:browse" % (":".join(sites_for_now), pg.skipped(), pg.entries_per_page()) #sk = SkuInfo() #ids_list = sk.sku_info(','.join([str(i['id']) for i in res['matches']]), None, sc) # d = OrderedDict() # for i in ids_list: # d.setdefault(i['date'], []) # d[i['date']].append((i['title'], i['sku'])) if r_server.get(option_select_key): print "cache_hit:browsedata-date:retrieve" date_result = cPickle.loads(str(r_server.get(option_select_key))) else: print "cache_hit:browsedata-date:set" date_sql = """ SELECT dp.list_date AS list_date , dp.list_title AS title , dp.list_sku AS sku , SUBSTRING_INDEX( SUBSTRING_INDEX(lp.idlistings_posts, ':', 2), ':', -1) AS post_id FROM ( SELECT list_date, list_title, list_sku FROM data_prep WHERE 1=1 AND SUBSTRING_INDEX(list_sku, ":", 1) IN (%(site_select)s) ) AS dp INNER JOIN ( SELECT list_sku, idlistings_posts FROM listings_posts WHERE 1=1 AND list_starter = 1 ) As lp ON lp.list_sku = dp.list_sku ORDER BY list_date DESC LIMIT %(offset)i, %(limit)i """ % ({'site_select': site_select, 'offset': pg.skipped(), 'limit': pg.entries_per_page()}) date_result = db.bind.execute(date_sql).fetchall() r_server.set(option_select_key, cPickle.dumps(date_result)) pages = pg.pages_in_set() first = pg.first_page() last = pg.last_page() sites_alpha = parts_model.Sites().show_sites(with_quotes=False) chosen = [] if sl: chosen = sl.split(',') if chosen != None: remaining = filter(lambda x : x not in chosen, sites_alpha) else: remaining = sites_alpha selected = filter(lambda x : x in chosen, sites_alpha) connect_str = "" if len(selected) == 1 or len(selected) == 0 else "&sl=" img_str = "&with_img=1" if with_img else "" img_str_sl = "&sl=" if len(selected) > 0 else "" if r_server.get(option_select_key_browse): print "cache_hit:browsedata-browse:retrieve" d = cPickle.loads(str(r_server.get(option_select_key_browse))) else: print "cache_hit:browsedata-browse:set" d = OrderedDict() for i in date_result: d.setdefault(i[0], []) d[i[0]].append((i[1], i[2])) r_server.set(option_select_key_browse, cPickle.dumps(d)) r_server.expire(option_select_key, cache_timeout) r_server.expire(option_select_key_browse, cache_timeout) return render('browse_view.mako', pages=pages, date_result=d, first=first, last=last, current_page=current_page, sl=sl, with_img=with_img, chosen=chosen, remaining=remaining, selected=selected, connect_str=connect_str, img_str_sl=img_str_sl, img_str=img_str)