def new_func(*args, **kwargs): response = func(*args, **kwargs) if response.headers['Content-Type'] == 'text/html': raise leancloud.LeanCloudError(-1, 'Bad Request') content = utils.response_to_json(response) if 'error' in content: raise leancloud.LeanCloudError( content.get('code', 1), content.get('error', 'Unknown Error')) return response
def new_func(*args, **kwargs): response = func(*args, **kwargs) assert isinstance(response, requests.Response) if response.headers.get('Content-Type') == 'text/html': raise leancloud.LeanCloudError(-1, 'Bad Request') content = response.json() if 'error' in content: raise leancloud.LeanCloudError( content.get('code', 1), content.get('error', 'Unknown Error')) return response
def new_func(*args, **kwargs): response = func(*args, **kwargs) assert isinstance(response, requests.Response) if response.headers.get("Content-Type") == "text/html": raise leancloud.LeanCloudError(-1, "Bad Request") content = response.json() if "error" in content: raise leancloud.LeanCloudError( content.get("code", 1), content.get("error", "Unknown Error")) return response
def destroy_all(cls, objs): """ 在一个请求中 destroy 多个 leancloud.Object 对象实例。 :param objs: 需要 destroy 的对象 :type objs: list """ if not objs: return if any(x.is_new() for x in objs): raise ValueError("Could not destroy unsaved object") dumped_objs = [] for obj in objs: dumped_obj = { 'method': 'DELETE', 'path': '/{0}/classes/{1}/{2}'.format(client.SERVER_VERSION, obj._class_name, obj.id), 'body': obj._flags, } dumped_objs.append(dumped_obj) response = client.post('/batch', params={'requests': dumped_objs}).json() errors = [] for idx, obj in enumerate(objs): content = response[idx] error = content.get('error') if error: errors.append(leancloud.LeanCloudError(error.get('code'), error.get('error'))) if errors: # TODO: how to raise list of errors? # raise MultipleValidationErrors(errors) # add test raise errors[0]
def _deep_save(self, unsaved_children, unsaved_files, exclude=None, ignore_failed=True): import leancloud from leancloud import client if exclude: # unsaved_children = [x for x in unsaved_children if x != exclude] unsaved_children = filter(lambda x: x != exclude, unsaved_children) for f in unsaved_files: f.save() if not unsaved_children: return dumped_objs = [] for obj in unsaved_children: method = ('PUT', 'POST')[obj.id is None] path = '/{0}/classes/{1}'.format(client.SERVER_VERSION, obj._class_name) path += ("/{}".format(obj.id), "")[obj.id is None] body = obj._dump_save() dumped_obj = { 'method': method, 'path': path, 'body': body, } dumped_objs.append(dumped_obj) response = client.post('/batch', params={'requests': dumped_objs}).json() errors = [] for idx, obj in enumerate(unsaved_children): content = response[idx] if not content.get('success'): errors.append( leancloud.LeanCloudError(content.get('code'), content.get('error'))) else: obj._update_data(content['success']) if errors: # TODO: how to raise list of errors? # raise MultipleValidationErrors(errors) # add test if ignore_failed: continue raise errors[0]
def _deep_save(self, unsaved_children, unsaved_files, exclude=None): if exclude: unsaved_children = [x for x in unsaved_children if x != exclude] for f in unsaved_files: f.save() if not unsaved_children: return dumped_objs = [] for obj in unsaved_children: if obj.id is None: method = 'POST' path = '/{0}/classes/{1}'.format(client.SERVER_VERSION, obj._class_name) else: method = 'PUT' path = '/{0}/classes/{1}/{2}'.format(client.SERVER_VERSION, obj._class_name, obj.id) body = obj._dump_save() dumped_obj = { 'method': method, 'path': path, 'body': body, } dumped_objs.append(dumped_obj) response = client.post('/batch', params={ 'requests': dumped_objs }).json() errors = [] for idx, obj in enumerate(unsaved_children): content = response[idx] error = content.get('error') if error: errors.append( leancloud.LeanCloudError(error.get('code'), error.get('error'))) else: obj._update_data(content['success']) if errors: # TODO: how to raise list of errors? # raise MultipleValidationErrors(errors) # add test raise errors[0]
def _deep_save(self, unsaved_children, unsaved_files, exclude=None): if exclude: unsaved_children = [x for x in unsaved_children if x != exclude] for f in unsaved_files: f.save() if not unsaved_children: return dumped_objs = [] for obj in unsaved_children: if obj.id is None: method = "POST" path = "/{0}/classes/{1}".format(client.SERVER_VERSION, obj._class_name) else: method = "PUT" path = "/{0}/classes/{1}/{2}".format(client.SERVER_VERSION, obj._class_name, obj.id) body = obj._dump_save() dumped_obj = { "method": method, "path": path, "body": body, } dumped_objs.append(dumped_obj) response = client.post("/batch", params={ "requests": dumped_objs }).json() errors = [] for idx, obj in enumerate(unsaved_children): content = response[idx] error = content.get("error") if error: errors.append( leancloud.LeanCloudError(error.get("code"), error.get("error"))) else: obj._update_data(content["success"]) if errors: # TODO: how to raise list of errors? # raise MultipleValidationErrors(errors) # add test raise errors[0]
def destroy_all(cls, objs): """ 在一个请求中 destroy 多个 leancloud.Object 对象实例。 :param objs: 需要 destroy 的对象 :type objs: list """ if not objs: return if any(x.is_new() for x in objs): raise ValueError("Could not destroy unsaved object") dumped_objs = [] for obj in objs: dumped_obj = { "method": "DELETE", "path": "/{0}/classes/{1}/{2}".format(client.SERVER_VERSION, obj._class_name, obj.id), "body": obj._flags, } dumped_objs.append(dumped_obj) response = client.post("/batch", params={ "requests": dumped_objs }).json() errors = [] for idx in range(len(objs)): content = response[idx] error = content.get("error") if error: errors.append( leancloud.LeanCloudError(error.get("code"), error.get("error"))) if errors: # TODO: how to raise list of errors? # raise MultipleValidationErrors(errors) # add test raise errors[0]
def _deep_save(self, unsaved_children, unsaved_files, exclude=None): if exclude: unsaved_children = [x for x in unsaved_children if x != exclude] for f in unsaved_files: f.save() if not unsaved_children: return dumped_objs = [] for obj in unsaved_children: obj._start_save() method = 'POST' if obj.id is None else 'PUT' path = '/{0}/classes/{1}'.format(client.SERVER_VERSION, obj._class_name) body = obj._dump_save() dumped_obj = { 'method': method, 'path': path, 'body': body, } dumped_objs.append(dumped_obj) response = client.post('/batch', params={ 'requests': dumped_objs }).json() errors = [] for idx, obj in enumerate(unsaved_children): content = response[idx] if not content.get('success'): errors.append( leancloud.LeanCloudError(content.get('code'), content.get('error'))) obj._cancel_save() else: result = obj.parse(content['success']) obj._finish_save(result) if errors: # TODO: how to raise list of errors? # http://stackoverflow.com/questions/9875660/idiomatic-way-to-collect-report-multiple-exceptions-in-python raise errors[0]
def _deep_save(self, exclude=None): # TODO: chunk unsaved_children = [] unsaved_files = [] self._find_unsaved_children(self.attributes, unsaved_children, unsaved_files) if exclude: unsaved_children = [x for x in unsaved_children if x != exclude] for f in unsaved_files: f.save() dumped_objs = [] for obj in unsaved_children: obj._start_save() method = 'POST' if obj.id is None else 'PUT' path = '/{0}/classes/{1}'.format(client.SERVER_VERSION, obj._class_name) body = obj._dump_save() dumped_obj = { 'method': method, 'path': path, 'body': body, } dumped_objs.append(dumped_obj) response = utils.response_to_json(client.post('/batch', params={'requests': dumped_objs})) errors = [] for idx, obj in enumerate(unsaved_children): content = response[idx] if not content.get('success'): errors.append(leancloud.LeanCloudError(content.get('code'), content.get('error'))) obj._cancel_save() else: result = obj.parse(content['success']) obj._finish_save(result) if errors: # TODO: how to raise list of errors? raise errors[0]