示例#1
0
    def __result_set(self):
        log.debug("querying %s" % self.query_string)
        self._check_client()
        params = dict()
        if not self.__index_name:
            raise ValueError("must provide an index_name at least")
        params["index_name"] = self.__index_name
        params["query"] = self.query_string

        if self.__fetch_fields:
            params["fetch_fields"] = self.__fetch_fields

        if self.__qp:
            params["qp"] = self.__qp

        if self.__disable:
            params["disable"] = self.__disable

        if self.__first_formula_name:
            params["first_formula_name"] = self.__first_formula_name

        if self.__formula_name:
            params["formula_name"] = self.__formula_name

        if self.__summary:
            params["summary"] = self.__summary

        url = "%s" % Search.BASE_URL

        resp = self.__client.send_message(url, method="GET", params=params)
        resp_info = self.wrap_result(resp)

        return resp_info
示例#2
0
    def get_log(self, app_name, page, page_size, sort_mod="DESC"):

        log.debug("get error log of %s" % (app_name))

        self._check_client()

        if not app_name:
            raise ValueError("app_name must be assigned")

        if type(page_size) is not int or page_size < 1:
            raise ValueError("invalid page_size, please set a integer bigger than 0")

        if page_size > 100:
            log.warning("page_size bigger than 100, this may not be a good idea")

        if type(page) is not int or page < 1:
            raise ValueError("invalid page, please set a integer bigger than 0")

        params = dict()
        params['page'] = str(page)
        params['page_size'] = str(page_size)
        params['sort_mode'] = sort_mod

        url = "%s/%s" % (ErrorLog.BASE_URL, app_name)

        resp = self.__client.send_message(url, method='GET', params=params)
        resp_info = self.wrap_result(resp)

        return resp_info
示例#3
0
    def upload(self, app_name, table_name, items, retries=3, wait_time=1):
        """
        upload doc, if items is a json string, it will be uploaded, else it will raise
        a error
        if the item's length exceed 2M, it will not be uploaded
        if server returns 3007, it will retry 3 times (including the first time), retry times could be modified.
        it will wait 1 second between 2 retries

        sdk cannot assure users multi thread, so, sdk api doesn't query error log to

        :param app_name:  application name
        :param table_name: table name
        :param items: json string
        :param retries: retry times
        :return:
        """

        try:
            item_length = len(items)
            if item_length > Config.UPLOAD_MAX_LENGTH:
                log.error("items length %s cannot be more than %s" % (item_length, Config.UPLOAD_MAX_LENGTH))
        except TypeError:
            log.error("invalid json string when upload, please check param: items")
            return None

        try:
            json.dumps(items)
        except ValueError:
            log.error("invalid json string when upload")
            return None

        log.debug("Upload data %s / %s / %s" % (app_name, table_name, items))

        self._check_client()

        params = dict()
        params['action'] = 'push'
        params['table_name'] = table_name
        params['items'] = items

        url = "%s/%s" % (DataMgr.BASE_URL, app_name)

        retry = 0
        resp_info = None
        while retry < retries:
            retry += 1
            resp = self.__client.send_message(url, method='POST', params=params)
            resp_info = self.wrap_result(resp)
            if resp_info.success():
                break
            else:
                if resp_info.error_code() == "3007":
                    time.sleep(wait_time)
                    continue
                else:
                    log.error("upload failed, but the error code is not 3007, please check debug log")
                    break

        return resp_info
示例#4
0
    def list(self, page, page_size):
        """
        get applications' list
        :return:
        """
        log.debug("View Application %s" % app_name)

        self._check_client()

        params = dict()
        params['page'] = page
        params['page_size'] = page_size

        url = "%s/%s" % (ApplicationMgr.BASE_URL, app_name)

        resp = self.__client.send_message(url, method='GET', params=params)
        resp_info = self.wrap_result(resp)

        return resp_info
示例#5
0
    def view(self, app_name):
        """
        show an application's information by application name
        :param app_name: application's name
        :return:
        """
        log.debug("View Application %s" % app_name)

        self._check_client()

        params = dict()
        params['action'] = 'status'

        url = "%s/%s" % (ApplicationMgr.BASE_URL, app_name)

        resp = self.__client.send_message(url, method='GET', params=params)
        resp_info = self.wrap_result(resp)

        return resp_info
示例#6
0
    def delete(self, app_name):
        """
        delete an application by application name
        :param app_name: application's name
        :return:
        """

        log.debug("Delete Application %s" % app_name)

        self._check_client()

        params = dict()
        params['action'] = 'delete'

        url = "%s/%s" % (ApplicationMgr.BASE_URL, app_name)

        resp = self.__client.send_message(url, method='GET', params=params)
        resp_info = self.wrap_result(resp)

        return resp_info
示例#7
0
    def create(self, app_name, template_name="default"):
        """
        create an application according to template name
        :param template_name: template's name, you could pick up one from Constants
        :return: success, application's name; fail, error code
        """

        log.debug("Create Application %s / %s" % (app_name, template_name))

        self._check_client()

        params = dict()
        params['action'] = 'create'
        params['template'] = template_name

        url = "%s/%s" % (ApplicationMgr.BASE_URL, app_name)

        resp = self.__client.send_message(url, method='GET', params=params)
        resp_info = self.wrap_result(resp)

        return resp_info
示例#8
0
    def suggest(self, query, index_name, suggest_name, hit=5):
        """
        suggest method
        :param query: the text you want to search
        :param index_name: the app name you want to search
        :param suggest_name: the suggest rule's name
        :param hit: suggest number
        :return:
        """
        if not query:
            raise ValueError("invalid query")

        if not index_name:
            raise ValueError("invalid index name")

        if not suggest_name:
            raise ValueError("invalid suggest name")

        if type(hit) is not int or hit > 10 or hit < 1:
            raise ValueError("invalid hit, please set a integer between [1, 10]")

        log.debug("Suggest %s / %s" % (index_name, suggest_name))

        self._check_client()

        params = dict()
        params['query'] = query
        params['index_name'] = index_name
        params['suggest_name'] = suggest_name
        params['hit'] = str(hit)

        url = SuggestMgr.BASE_URL

        resp = self.__client.send_message(url, method='GET', params=params)
        resp_info = self.wrap_result(resp)

        return resp_info