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
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
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
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
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
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
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
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