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(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, rest_url, username, password, stage=None): """ update a store """ if sync_job.get('geoserver_setting', None) is None: sync_job['geoserver_setting'] = {} res = requests.get(get_store_url(rest_url, sync_job['workspace'], sync_job['name']), auth=(username, password)) if res.status_code == 200: http_method = requests.put request_url = get_store_url(rest_url, sync_job['workspace'], sync_job['name']) else: http_method = requests.post request_url = get_stores_url(rest_url, sync_job['workspace']) template = settings.template_env.get_template('wms_store.xml') res = http_method(request_url, auth=(username, 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 remove_layer(sync_job,task_metadata,task_status): """ remove a layer """ 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: #store exist,delete it res = requests.delete(get_layer_url(sync_job['workspace'],sync_job['store'],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)))
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)))
def remove_store(sync_job,task_metadata,task_status): """ remove a store """ logger.info("Begin to remove store ({}).".format(sync_job['name'])) res = requests.get(get_store_url(sync_job['workspace'],sync_job['name']), auth=(GEOSERVER_USERNAME, GEOSERVER_PASSWORD)) if res.status_code == 200: #store exist,delete it res = requests.delete(get_store_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)))
def _remove_group(sync_job, task_metadata, task_status, rest_url, username, password, stage=None): """ remove a layer group """ logger.info("Begin to remove layer group ({}).".format(sync_job['name'])) res = requests.get(get_group_url(rest_url, sync_job['workspace'], sync_job['name']), auth=(username, password)) if res.status_code == 200: #store exist,delete it res = requests.delete(get_group_url(rest_url, sync_job['workspace'], sync_job['name']), auth=(username, password)) if res.status_code >= 400: raise Exception("{0}: {1}".format( res.status_code, get_http_response_exception(res)))
def _remove_layer(sync_job, task_metadata, task_status, rest_url, username, password, stage=None): """ remove a layer """ res = requests.get(get_layer_url(rest_url, sync_job['workspace'], sync_job['store'], sync_job['name']), auth=(username, password)) if res.status_code == 200: #layer exist,delete it res = requests.delete(get_layer_url(rest_url, sync_job['workspace'], sync_job['store'], sync_job['name']), auth=(username, password)) if res.status_code >= 400: raise Exception("{0}: {1}".format( res.status_code, get_http_response_exception(res)))
def _update_group(sync_job, task_metadata, task_status, rest_url, username, password, stage=None): """ 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(rest_url, sync_job['workspace'], sync_job['name']), auth=(username, password)) if res.status_code == 200: http_method = requests.put request_url = get_group_url(rest_url, sync_job['workspace'], sync_job['name']) else: http_method = requests.post request_url = get_groups_url(rest_url, sync_job['workspace']) template = settings.template_env.get_template('layergroup.xml') res = http_method(request_url, auth=(username, 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(rest_url, sync_job['workspace'], sync_job['name']), auth=(username, 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(rest_url, sync_job['workspace']) res = http_method(request_url, auth=(username, 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)))
def _update_layer(sync_job, task_metadata, task_status, rest_url, username, password, stage=None): """ update a layer """ sync_job['applications'] = sync_job.get('applications') or [] sync_job['keywords'] = sync_job.get('keywords') or [] if (sync_job.get('override_bbox', False)): #sync_job["bbox"] = json.loads(sync_job["bbox"]) pass template = settings.template_env.get_template('wms_layer.xml') xmlData = template.render(sync_job).encode("utf-8") failover = True while True: res = requests.get(get_layer_url(rest_url, sync_job['workspace'], sync_job['store'], sync_job['name']), auth=(username, password)) if res.status_code == 200: http_method = requests.put request_url = get_layer_url(rest_url, sync_job['workspace'], sync_job['store'], sync_job['name']) else: http_method = requests.post request_url = get_layers_url(rest_url, sync_job['workspace'], sync_job['store']) res = http_method(request_url, auth=(username, password), headers=update_headers, data=xmlData) if res.status_code >= 400: errMsg = get_http_response_exception(res) if failover and re_already_exist_in_workspace.search(errMsg): failover = False #check whether layer exist or not, if exist, delete it. res1 = requests.get(get_wmsstores_url(rest_url, sync_job['workspace'], 'json'), auth=(username, password)) if res1.status_code == 200: isExist = False for store in res1.json().get("wmsStores", {}).get("wmsStore", []): res2 = requests.get(get_layer_url( rest_url, sync_job['workspace'], store["name"], sync_job['name']), auth=(username, password)) if res2.status_code == 200: #layer exist,delete it isExist = True res3 = requests.delete(get_layer_url( rest_url, sync_job['workspace'], store['name'], sync_job['name']), auth=(username, password)) if res3.status_code >= 400: raise Exception("{0}: {1}".format( res3.status_code, get_http_response_exception(res3))) break if isExist: continue raise Exception("{0}: {1}".format( res.status_code, get_http_response_exception(res))) else: break