예제 #1
0
    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)))
예제 #4
0
    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)))