def empty_layer(self,layer): http_method = requests.post url = "{0}/seed/{1}:{2}.xml".format(self._rest_url,layer["workspace"],layer["name"]) #launch the truncate task template = template_env.get_template('gwc_layer_empty.xml') for gridset in ("gda94","mercator"): for f in ("image/png","image/jpeg"): data = template.render({'layer':layer,'format':f,'gridset':gridset}) resp = http_method(url, auth=(self._user, self._password), headers={'content-type':'text/xml'}, data=data) if resp.status_code >= 400: raise Exception("Empty gwc failed. ({0}: {1})".format(resp.status_code, resp.content)) #check whether the task is finished or not. finished = False while(finished): finished = True resp = requests.get(self.get_layer_url(layer['workspace'],layer['name']), auth=(self._user, self._password), headers={'content-type':'application/json'}) if resp.status_code >= 400: raise Exception("Empty gwc failed. ({0}: {1})".format(resp.status_code, resp.content)) tasks=json.loads(resp.content).get("long-array-array",[]) for t in tasks: if t[3] == -1: #aborted raise Exception("Some task is aborted.") elif t[3] in (0,1): finished = False break if not finished: time.sleep(1)
def update_layer(sync_job, task_metadata, task_status): """ update a layer """ sync_job["applications"] = sync_job["applications"] or [] res = requests.get( get_layer_url(sync_job["workspace"], sync_job["store"], sync_job["name"]), auth=(GEOSERVER_USERNAME, GEOSERVER_PASSWORD), ) if res.status_code == 200: http_method = requests.put request_url = get_layer_url(sync_job["workspace"], sync_job["store"], sync_job["name"]) else: http_method = requests.post request_url = get_layers_url(sync_job["workspace"], sync_job["store"]) template = template_env.get_template("wms_layer.xml") res = http_method( request_url, auth=(GEOSERVER_USERNAME, GEOSERVER_PASSWORD), headers=update_headers, data=template.render(sync_job), ) if res.status_code >= 400: raise Exception("{0}: {1}".format(res.status_code, get_http_response_exception(res)))
def update_store(sync_job, task_metadata, task_status): """ update a store """ if sync_job.get("geoserver_setting", None) is None: sync_job["geoserver_setting"] = {} res = requests.get( get_store_url(sync_job["workspace"], sync_job["name"]), auth=(GEOSERVER_USERNAME, GEOSERVER_PASSWORD) ) if res.status_code == 200: http_method = requests.put request_url = get_store_url(sync_job["workspace"], sync_job["name"]) else: http_method = requests.post request_url = get_stores_url(sync_job["workspace"]) template = template_env.get_template("wms_store.xml") res = http_method( request_url, auth=(GEOSERVER_USERNAME, GEOSERVER_PASSWORD), headers=update_headers, data=template.render(sync_job), ) if res.status_code >= 400: raise Exception("{0}: {1}".format(res.status_code, get_http_response_exception(res)))
def update_layer(self,layer): if self.get_layer(layer['workspace'],layer['name']): #layer exist, update http_method = requests.post else: #layer not exist, add http_method = requests.put template = template_env.get_template('gwc_layer_setting.xml') resp = http_method(self.get_layer_url(layer['workspace'],layer['name']), auth=(self._user, self._password), headers={'content-type':'text/xml'}, data=template.render(layer)) if resp.status_code >= 400: raise Exception("Update cached layer failed. ({0}: {1})".format(resp.status_code, resp.content)) if not self.get_layer(layer['workspace'],layer['name']): raise Exception("Update cached layer failed. ({0}: {1})".format(resp.status_code, resp.content))
def update_group(sync_job,task_metadata,task_status): """ update a layer group """ #update the dependent group first sub_task = None for group in sync_job.get('dependent_groups',{}): sub_task = get_task("update_layer_group",task_name(group)) if sub_task: #dependent task exist,execute it. execute_task(*sub_task) if sub_task[0]["status"].is_not_succeed: #sub task failed, raise Exception("update sub group ({0}) failed.".format(sub_task[0]["name"])) #after update all dependent groups, begin to update current group res = requests.get(get_group_url(sync_job['workspace'],sync_job['name']), auth=(GEOSERVER_USERNAME, GEOSERVER_PASSWORD)) if res.status_code == 200: http_method = requests.put request_url = get_group_url(sync_job['workspace'],sync_job['name']) else: http_method = requests.post request_url = get_groups_url(sync_job['workspace']) template = template_env.get_template('layergroup.xml') res = http_method(request_url, auth=(GEOSERVER_USERNAME, GEOSERVER_PASSWORD), headers=update_headers, data=template.render(sync_job)) if res.status_code >= 400: if http_method == requests.put: logger.warning("update group({0}) failed, try to delete and readd it".format(sync_job['name'])) #update layergroup with different number of layers will cause "Layer group has different number of styles than layers" #so delete layergroup first and then readd it. res = requests.delete(get_group_url(sync_job['workspace'],sync_job['name']), auth=(GEOSERVER_USERNAME, GEOSERVER_PASSWORD)) if res.status_code >= 400: raise Exception("{0}: {1}".format(res.status_code, get_http_response_exception(res))) http_method = requests.post request_url = get_groups_url(sync_job['workspace']) res = http_method(request_url, auth=(GEOSERVER_USERNAME, GEOSERVER_PASSWORD), headers=update_headers, data=template.render(sync_job)) if res.status_code >= 400: raise Exception("{0}: {1}".format(res.status_code, get_http_response_exception(res))) else: raise Exception("{0}: {1}".format(res.status_code, get_http_response_exception(res)))