Example #1
0
        def _wrap(*args, **kwargs):

            if key:
                mc_key = key
            else:
                mc_key = "%s:%s-%s-%s" % ("cached", fn.func_name, "|".join(
                    [unicode2str(arg) for arg in args]), "|".join([
                        "%s:%s" % (unicode2str(n), unicode2str(v))
                        for n, v in kwargs.items()
                    ]))

            result = mc_client.get(mc_key)
            if result is not None:
                result = pickle.loads(result)
            else:
                result = fn(*args, **kwargs)

                try:
                    mc_client.set(mc_key,
                                  pickle.dumps(result),
                                  time=expiration)
                except ValueError:
                    pass

            return result
Example #2
0
 def get_value(self, name):
     stat_json = json.loads(self.kvdb.get(self._fpath(name)))
     blocks = stat_json['blocks']
     data = StringIO()
     for block_path in blocks:
         block_path = unicode2str(block_path)
         data.write(self.kvdb.get(block_path))
     value = data.getvalue()
     return value
Example #3
0
    def search(self, query_string, start=0, limit=10):
        """关键词搜索

        Args:
          query_string: str or unicode 搜索关键词
          start: int 起始位置
          limit: int 最大个数

        Returns:
          results: [] 形式如下:[{"news_id": 23, "title": "<mark>中国</mark>公惨淡",
                            "content": "<mark>中国</mark>人民名住..."}, {...}]

        Raises:
          AliSearchError: 如果搜索发生错误
        """
        # 构造uri
        url = "%s/search" % self._uri
        query_string = unicode2str(query_string)
        words = re.compile("\s+").split(query_string)
        # 构造参数
        params = {
            "query": "config=start:%s,hit:%s&&query=%s" % (start, limit, " OR ".join(words)),
            "index_name": self._app,
            "summary": "summary_field:content,summary_element:mark,"
                       "summary_len:300;summary_field:title,summary_element:mark",
        }

        # 请求
        r = request("GET", url, self._access_key, self._access_secret, params)
        results = []
        total_count = int(r['result']['total'])
        for item in r['result']['items']:
            results.append({
                "news_id": unicode2str(item['news_id']),
                "title": unicode2str(item['title']),
                "content": unicode2str(item['content']),
            })
        return LazyCollection(results, total_count)
Example #4
0
        def _wrap(*args, **kwargs):

            if key:
                mc_key = key
            else:
                mc_key = "%s:%s-%s-%s" % (
                    "cached", fn.func_name,
                    "|".join([unicode2str(arg) for arg in args]),
                    "|".join(["%s:%s" % (unicode2str(n), unicode2str(v))
                             for n, v in kwargs.items()]))

            result = mc_client.get(mc_key)
            if result is not None:
                result = pickle.loads(result)
            else:
                result = fn(*args, **kwargs)

                try:
                    mc_client.set(mc_key, pickle.dumps(result), time=expiration)
                except ValueError:
                    pass

            return result
Example #5
0
    def search(self, query_string, start=0, limit=10):
        # 构造uri
        url = "%s/search" % self.uri
        query_string = unicode2str(query_string)
        words = re.compile("\s+").split(query_string)
        # 构造参数
        params = {
            "query": "config=start:%s,hit:%s&&query=%s" % (start, limit, " OR ".join(words)),
            "index_name": self.app,
            "summary": "summary_field:content,summary_element:mark,"
                       "summary_len:300;summary_field:title,summary_element:mark",
        }

        # 请求
        r = request("GET", url, self.access_key, self.access_secret, params)
        results = []
        total_count = int(r['result']['total'])
        for item in r['result']['items']:
            results.append({
                "news_id": unicode2str(item['news_id']),
                "title": unicode2str(item['title']),
                "content": unicode2str(item['content']),
            })
        return LazyCollection(results, total_count)
Example #6
0
 def _fpath(self, name):
     name = unicode2str(name)
     return os.path.join(self.fpath, name)
Example #7
0
 def __init__(self, fpath):
     self.fpath = unicode2str(fpath)
     self.kvdb = sae.kvdb.KVClient()