示例#1
0
    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)