diff --git a/src/mra.py b/src/mra.py index fab07cad365d128732224c98e052fe1cb172c166..1eb99ff0eda2dc84700754c5fce7dda6775b859f 100644 --- a/src/mra.py +++ b/src/mra.py @@ -545,9 +545,6 @@ class FeatureTypeModel(LayerModel): self.ms.data += ' USING UNIQUE %s' % ft.get_fid_column() if ft.get_authority_code() is not None: self.ms.data += ' USING SRID=%s' % ft.get_authority_code() - # self.set_metadata("ows_extent", "%s %s %s %s" % - # (ft.get_extent().minX(), ft.get_extent().minY(), - # ft.get_extent().maxX(), ft.get_extent().maxY())) # elif cpram["dbtype"] in ["shp", "shapefile"]: # TODO: clean up this fallback. else: @@ -592,20 +589,29 @@ class FeatureTypeModel(LayerModel): # Configure the different fields. field_names = [] for field in ft.iterfields(): + field_name = field.get_name() + field_names.append(field_name) layer.set_metadatas({ - "ows_name": layer_name, - "ows_title": layer.get_metadata("ows_title", None) or layer_name, - "ows_abstract": layer.get_metadata("ows_abstract", None) or layer_name, - "gml_%s_alias" % field.get_name(): field.get_name(), - "gml_%s_type" % field.get_name(): field.get_type_gml(), - # TODO: Add gml_<field name>_precision, gml_<field name>_width + "gml_%s_alias" % field_name: field_name, + "gml_%s_type" % field_name: field.get_type_gml(), + # "gml_%s_precision" % field_name + # "gml_%s_width" % field_name }) - field_names.append(field.get_name()) geometry_column = ft.get_geometry_column() if geometry_column is None: geometry_column = "geometry" + layer.set_metadatas({ + "ows_name": layer_name, + "ows_title": layer.get_metadata("ows_title", None) or layer_name, + "ows_abstract": layer.get_metadata("ows_abstract", None) or layer_name, + "ows_extent": "%s %s %s %s" % ( + self.ms.extent.minx, + self.ms.extent.miny, + self.ms.extent.maxx, + self.ms.extent.maxy, + ), "ows_include_items": ",".join(field_names), "gml_include_items": ",".join(field_names), "gml_geometries": geometry_column, @@ -719,6 +725,12 @@ class CoverageModel(LayerModel): "ows_name": layer_name, "ows_title": layer.get_metadata("ows_title", None) or layer_name, "ows_abstract": layer.get_metadata("ows_abstract", None) or layer_name, + "ows_extent": "%s %s %s %s" % ( + self.ms.extent.minx, + self.ms.extent.miny, + self.ms.extent.maxx, + self.ms.extent.maxy, + ), "wcs_name": layer.get_metadata("wcs_name", None) or layer_name, "wcs_label": layer.get_metadata("wcs_label", None) or layer_name, "wcs_description": layer.get_metadata("wcs_description", None) or layer_name @@ -985,7 +997,7 @@ class MRA(object): try: self.config = yaml.load( open(config_path, "r"), - # Loader=yaml.FullLoader # Deprecated + # Loader=yaml.FullLoader ) except yaml.YAMLError as e: exit("Error in configuration file: %s" % e) diff --git a/src/server.py b/src/server.py index 80ac871f60ad3581251450a2dcdfb5ea2ea1aa55..8aef27fa952d5671d85c9912ea4007b4cf8155bc 100755 --- a/src/server.py +++ b/src/server.py @@ -1114,13 +1114,6 @@ class layer(object): layer.enable(l_enabled) wslayer.enable(l_enabled) - for k in data: - if k in ("title", "abstract"): - layer.set_metadata("ows_%s" % k, data.get(k)) - wslayer.set_metadata("ows_%s" % k, data.get(k)) - - # update resource if changed - href = data.get("resource", {}).get("href") if href: try: ws_name, st_type, st_name, r_type, r_name = mra.href_parse(href, 5) @@ -1128,25 +1121,38 @@ class layer(object): raise webapp.NotFound(message="resource \"%s\" was not found." % href) st_type, r_type = st_type[:-1], r_type[:-1] # Remove trailing s. + else: + ws_name = layer.get_mra_metadata("workspace") + r_type, st_type = { + "featuretype": ("featuretype", "datastore"), + "coverage": ("coverage", "coveragestore") + }[layer.get_mra_metadata("type")] + r_name = layer.get_mra_metadata("name") - ws = get_workspace(ws_name) - with webapp.mightNotFound(r_type, workspace=ws_name): - try: - model = ws.get_layermodel(r_type, st_name, r_name) - except ValueError: - raise KeyError(r_type) - - if layer.get_mra_metadata("type") != r_type: - raise webapp.BadRequest( - "Can't change a \"%s\" layer into a \"%s\"." - % (layer.get_mra_metadata("type"), r_type)) - if wslayer.get_mra_metadata("type") != r_type: - raise webapp.BadRequest( - "Can't change a \"%s\" layer into a \"%s\"." - % (wslayer.get_mra_metadata("type"), r_type)) - - model.configure_layer(layer, l_enabled) - model.configure_layer(wslayer, l_enabled) + ws = get_workspace(ws_name) + with webapp.mightNotFound(r_type, workspace=ws_name): + try: + model = ws.get_layermodel(r_type, st_name, r_name) + except ValueError: + raise KeyError(r_type) + + if layer.get_mra_metadata("type") != r_type: + raise webapp.BadRequest( + "Can't change a \"%s\" layer into a \"%s\"." + % (layer.get_mra_metadata("type"), r_type)) + if wslayer.get_mra_metadata("type") != r_type: + raise webapp.BadRequest( + "Can't change a \"%s\" layer into a \"%s\"." + % (wslayer.get_mra_metadata("type"), r_type)) + + model.configure_layer(layer, l_enabled) + model.configure_layer(wslayer, l_enabled) + + # Change some value + for k in data: + if k in ("title", "abstract"): + layer.set_metadata("ows_%s" % k, data.get(k)) + wslayer.set_metadata("ows_%s" % k, data.get(k)) # If we have a defaultStyle apply it. s_name = data.get("defaultStyle", {}).get("name")