def layer_style_upload(request, layername): def respond(*args, **kw): kw['content_type'] = 'text/html' return json_response(*args, **kw) form = LayerStyleUploadForm(request.POST, request.FILES) if not form.is_valid(): return respond(errors="Please provide an SLD file.") data = form.cleaned_data layer = _resolve_layer( request, layername, 'base.change_resourcebase', _PERMISSION_MSG_MODIFY) sld = request.FILES['sld'].read() try: dom = etree.XML(sld) except Exception: return respond(errors="The uploaded SLD file is not valid XML") el = dom.findall( "{http://www.opengis.net/sld}NamedLayer/{http://www.opengis.net/sld}Name") if len(el) == 0 and not data.get('name'): return respond( errors="Please provide a name, unable to extract one from the SLD.") name = data.get('name') or el[0].text if data['update']: match = None styles = list(layer.styles) + [layer.default_style] for style in styles: if style.sld_name == name: match = style break if match is None: return respond(errors="Cannot locate style : " + name) match.update_body(sld) else: try: cat = gs_catalog cat.create_style(name, sld) layer.styles = layer.styles + \ [type('style', (object,), {'name': name})] cat.save(layer.publishing) except ConflictingDataError: return respond(errors="""A layer with this name exists. Select the update option if you want to update.""") return respond( body={ 'success': True, 'style': name, 'updated': data['update']})
def layer_style_upload(req, layername): def respond(*args,**kw): kw['content_type'] = 'text/html' return json_response(*args,**kw) form = LayerStyleUploadForm(req.POST,req.FILES) if not form.is_valid(): return respond(errors="Please provide an SLD file.") data = form.cleaned_data layer = _resolve_layer(req, layername, 'layers.change_layer',_PERMISSION_MSG_MODIFY) sld = req.FILES['sld'].read() try: dom = etree.XML(sld) except Exception,ex: return respond(errors="The uploaded SLD file is not valid XML")
def dataset_style_upload(request, layername): def respond(*args, **kw): kw['content_type'] = 'text/html' return json_response(*args, **kw) form = LayerStyleUploadForm(request.POST, request.FILES) if not form.is_valid(): return respond(errors="Please provide an SLD file.") data = form.cleaned_data layer = _resolve_dataset(request, layername, 'base.change_resourcebase', _PERMISSION_MSG_MODIFY) sld = request.FILES['sld'].read() sld_name = None try: # Check SLD is valid try: if sld: if isfile(sld): with open(sld) as sld_file: sld = sld_file.read() etree.XML(sld) except Exception: logger.exception("The uploaded SLD file is not valid XML") raise Exception("The uploaded SLD file is not valid XML") sld_name = extract_name_from_sld(gs_catalog, sld, sld_file=request.FILES['sld']) except Exception as e: respond(errors=f"The uploaded SLD file is not valid XML: {e}") name = data.get('name') or sld_name set_dataset_style(layer, data.get('title') or name, sld) return respond( body={ 'success': True, 'style': data.get('title') or name, 'updated': data['update'] })
def layer_style_upload(req, layername): def respond(*args, **kw): kw['content_type'] = 'text/html' return json_response(*args, **kw) form = LayerStyleUploadForm(req.POST, req.FILES) if not form.is_valid(): return respond(errors="Please provide an SLD file.") data = form.cleaned_data layer = _resolve_layer(req, layername, 'base.change_resourcebase', _PERMISSION_MSG_MODIFY) sld = req.FILES['sld'].read() try: dom = etree.XML(sld) except Exception, ex: return respond(errors="The uploaded SLD file is not valid XML")
def layer_style_upload(request, layername): def respond(*args, **kw): kw['content_type'] = 'text/html' return json_response(*args, **kw) form = LayerStyleUploadForm(request.POST, request.FILES) if not form.is_valid(): return respond(errors="Please provide an SLD file.") data = form.cleaned_data layer = _resolve_layer( request, layername, 'base.change_resourcebase', _PERMISSION_MSG_MODIFY) sld = request.FILES['sld'].read() sld_name = None try: # Check SLD is valid try: if sld: if isfile(sld): sld = open(sld, "r").read() etree.XML(sld) except Exception: logger.exception("The uploaded SLD file is not valid XML") raise Exception( "The uploaded SLD file is not valid XML") sld_name = extract_name_from_sld( gs_catalog, sld, sld_file=request.FILES['sld']) except Exception as e: respond(errors="The uploaded SLD file is not valid XML: {}".format(e)) name = data.get('name') or sld_name set_layer_style(layer, data.get('title') or name, sld) return respond( body={ 'success': True, 'style': data.get('title') or name, 'updated': data['update']})
def layer_style_upload(request, layername): def respond(*args, **kw): kw['content_type'] = 'text/html' return json_response(*args, **kw) form = LayerStyleUploadForm(request.POST, request.FILES) if not form.is_valid(): return respond(errors="Please provide an SLD file.") data = form.cleaned_data layer = _resolve_layer( request, layername, 'base.change_resourcebase', _PERMISSION_MSG_MODIFY) sld = request.FILES['sld'].read() sld_name = None try: # Check SLD is valid sld_name = extract_name_from_sld(gs_catalog, sld, sld_file=request.FILES['sld']) except Exception, e: respond(errors="The uploaded SLD file is not valid XML: {}".format(e))
def layer_style_upload(request, layername): def respond(*args, **kw): kw['content_type'] = 'text/html' return json_response(*args, **kw) form = LayerStyleUploadForm(request.POST, request.FILES) if not form.is_valid(): return respond(errors="Please provide an SLD file.") data = form.cleaned_data layer = _resolve_layer(request, layername, 'base.change_resourcebase', _PERMISSION_MSG_MODIFY) sld = request.FILES['sld'].read() sld_name = None try: # Check SLD is valid try: if sld: if isfile(sld): sld = open(sld, "r").read() etree.XML(sld) except Exception: logger.exception("The uploaded SLD file is not valid XML") raise Exception("The uploaded SLD file is not valid XML") sld_name = extract_name_from_sld(gs_catalog, sld, sld_file=request.FILES['sld']) except Exception as e: respond(errors="The uploaded SLD file is not valid XML: {}".format(e)) name = data.get('name') or sld_name if data['update']: match = None styles = list(layer.styles) + [layer.default_style] for style in styles: if style.sld_name == name: match = style break if match is None: return respond(errors="Cannot locate style : " + name) match.update_body(sld) else: try: cat = gs_catalog cat.create_style(name, sld, raw=True, workspace=settings.DEFAULT_WORKSPACE) layer.styles = layer.styles + \ [type('style', (object,), {'name': name})] cat.save(layer.publishing) except ConflictingDataError: return respond(errors="""A layer with this name exists. Select the update option if you want to update.""" ) # Invalidate GeoWebCache for the updated resource try: _stylefilterparams_geowebcache_layer(layer.alternate) _invalidate_geowebcache_layer(layer.alternate) except BaseException: pass return respond(body={ 'success': True, 'style': name, 'updated': data['update'] })
def layer_style_upload(request, layername): def respond(*args, **kw): kw['content_type'] = 'text/html' return json_response(*args, **kw) form = LayerStyleUploadForm(request.POST, request.FILES) if not form.is_valid(): return respond(errors="Please provide an SLD file.") data = form.cleaned_data layer = _resolve_layer( request, layername, 'base.change_resourcebase', _PERMISSION_MSG_MODIFY) sld = request.FILES['sld'].read() sld_name = None try: # Check SLD is valid try: if sld: if isfile(sld): sld = open(sld, "r").read() etree.XML(sld) except Exception: logger.exception("The uploaded SLD file is not valid XML") raise Exception( "The uploaded SLD file is not valid XML") sld_name = extract_name_from_sld( gs_catalog, sld, sld_file=request.FILES['sld']) except Exception as e: respond(errors="The uploaded SLD file is not valid XML: {}".format(e)) name = data.get('name') or sld_name if data['update']: match = None styles = list(layer.styles) + [layer.default_style] for style in styles: if style.sld_name == name: match = style break if match is None: return respond(errors="Cannot locate style : " + name) match.update_body(sld) else: try: cat = gs_catalog cat.create_style( name, sld, raw=True, workspace=settings.DEFAULT_WORKSPACE) layer.styles = layer.styles + \ [type('style', (object,), {'name': name})] cat.save(layer.publishing) except ConflictingDataError: return respond(errors="""A layer with this name exists. Select the update option if you want to update.""") # Invalidate GeoWebCache for the updated resource try: _stylefilterparams_geowebcache_layer(layer.alternate) _invalidate_geowebcache_layer(layer.alternate) except BaseException: pass return respond( body={ 'success': True, 'style': name, 'updated': data['update']})