From 29cfe0ab25a427571fc060d5e49ec8ab4f209fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20M=C3=A9liani?= <m.meliani@neogeo-online.net> Date: Mon, 14 Oct 2013 18:13:32 +0200 Subject: [PATCH] Fixed bugs about OWS activation for the main mapfile (layers.map)... --- src/mra.py | 50 ++++++++++++++++++++------------------- src/server.py | 65 ++++++++++++++------------------------------------- 2 files changed, 43 insertions(+), 72 deletions(-) diff --git a/src/mra.py b/src/mra.py index c11b00f..7be7789 100644 --- a/src/mra.py +++ b/src/mra.py @@ -76,9 +76,11 @@ class Layer(MetadataMixin): self.update_metadatas(metadata) def enable(self, enabled=True): - requests = ["GetCapabilities", "GetMap", "GetFeatureInfo", "GetLegendGraphic"] self.ms.status = mapscript.MS_ON if enabled else mapscript.MS_OFF - self.set_metadata("wms_enable_request", " ".join(("%s" if enabled else "!%s") % c for c in requests)) + + # TODO: later... + # requests = ["GetCapabilities", "GetMap", "GetFeatureInfo", "GetLegendGraphic"] + # self.set_metadata("wms_enable_request", " ".join(("%s" if enabled else "!%s") % c for c in requests)) def get_type_name(self): return { @@ -284,15 +286,16 @@ class Mapfile(MetadataMixin): if create: self.ms = mapscript.mapObj() + # and adding some default values... + self.ms.name = self.name + self.ms.setProjection("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") + self.ms.setExtent(-180,-90,180,90) + self.ms.units = mapscript.MS_DD + for ows in ("wms", "wfs", "wcs"): + self.set_metadata("%s_enable_request" % ows, "") else: self.ms = mapscript.mapObj(self.path) - # adding some default values... - self.ms.name = self.name - self.ms.setProjection("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") - self.ms.setExtent(-180,-90,180,90) - self.ms.units = mapscript.MS_DD - def save(self, path=None): self.ms.save(path or self.path) @@ -444,9 +447,9 @@ class FeatureTypeModel(LayerModel): connection += " ".join("%s=%s" % (p, cparam[p]) for p in ["user", "password"] if p in cparam) self.ms.connection = connection self.ms.data = "%s FROM %s.%s" % (ds[ft_name].get_geometry_column(), cparam["schema"], ft_name) - 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())) + # 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: @@ -455,10 +458,10 @@ class FeatureTypeModel(LayerModel): self.ms.data = self.ws.mra.get_file_path(url.path) # Deactivate wms and wfs requests, because we are a virtual layer. - self.set_metadatas({ - "wms_enable_request": "!GetCapabilities !GetMap !GetFeatureInfo !GetLegendGraphic", - "wfs_enable_request": "!GetCapabilities !DescribeFeatureType !GetFeature", - }) + # self.set_metadatas({ + # "wms_enable_request": "!GetCapabilities !GetMap !GetFeatureInfo !GetLegendGraphic", + # "wfs_enable_request": "!GetCapabilities !DescribeFeatureType !GetFeature", + # }) # Update mra metadata, and make sure the mandatory ones are left untouched. self.update_mra_metadatas(metadata) @@ -492,9 +495,8 @@ class FeatureTypeModel(LayerModel): "wfs_abstract": layer.get_metadata("wms_abstract"), }) - if enabled: - layer.set_metadata("wfs_enable_request", - "GetCapabilities DescribeFeatureType GetFeature") + # if enabled: + # layer.set_metadata("wfs_enable_request", "GetCapabilities DescribeFeatureType GetFeature") # Configure the layer based on information from the store. ds = ws.get_datastore(self.get_mra_metadata("storage")) @@ -561,10 +563,10 @@ class CoverageModel(LayerModel): # raise ValueError("Unhandled type \"%s\"." % cparam["dbtype"]) # Deactivate wms and wcs requests, because we are a virtual layer. - self.set_metadatas({ - "wms_enable_request": "!GetCapabilities !GetMap !GetFeatureInfo !GetLegendGraphic", - "wcs_enable_request": "!GetCapabilities !DescribeCoverage !GetCoverage", - }) + # self.set_metadatas({ + # "wms_enable_request": "!GetCapabilities !GetMap !GetFeatureInfo !GetLegendGraphic", + # "wcs_enable_request": "!GetCapabilities !DescribeCoverage !GetCoverage", + # }) # Update mra metadatas, and make sure the mandatory ones are left untouched. self.update_mra_metadatas(metadata) @@ -601,8 +603,8 @@ class CoverageModel(LayerModel): "wcs_description": layer.get_metadata("wms_abstract") }) - if enabled: - layer.set_metadata("wcs_enable_request", "GetCapabilities DescribeCoverage GetCoverage") + # if enabled: + # layer.set_metadata("wcs_enable_request", "GetCapabilities DescribeCoverage GetCoverage") plugins.extend("post_configure_raster_layer", self, ws, layer) diff --git a/src/server.py b/src/server.py index b1bec29..0bb34b4 100755 --- a/src/server.py +++ b/src/server.py @@ -64,6 +64,9 @@ class index(object): "styles": href("styles/"), "layers": href("layers/"), "layergroups": href("layergroups/"), + "services/wms/settings": href("services/wms/settings"), + "services/wcs/settings": href("services/wcs/settings"), + "services/wfs/settings": href("services/wfs/settings") } class workspaces(object): @@ -1136,72 +1139,39 @@ class layergroup(object): class OWSGlobalSettings(object): + """Control settings of the main OWS service, i.e. the mapfile: layers.map + http://hostname/mra/services/[wms|wfs|wcs]/settings<lg> + + """ @HTTPCompatible() def GET(self, ows, format): + """It returns the status of the OGC service.""" + mf = mra.get_available() - try: - if mf.get_metadata("%s_enable_request" % ows) == "*": - is_enabled = True - except: - is_enabled = False return { - ows: { - "enabled": is_enabled, + ows: Entries({ + "enabled": mf.get_metadata("%s_enable_request" % ows) == "*" and True or False, "name": ows, "schemaBaseURL": mf.get_metadata("ows_schemas_location", "http://schemas.opengis.net"), } - } + )} @HTTPCompatible() def PUT(self, ows, format): + """To enable or disable OGC service...""" + mf = mra.get_available() data = get_data(name=ows, mandatory=["enabled"], authorized=["enabled"]) is_enabled = data.pop("enabled") - values = {True: "*", "true": "*", False: "", "false": ""} + # TODO: That would be cool to be able to control each operation... + values = {True: "*", "True": "*", "true": "*", False: "", "False": "", "false": ""} if is_enabled not in values: - raise KeyError("'%s' is not valid" % is_enabled) + raise KeyError("\"%s\" is not valid" % is_enabled) mf.set_metadata("%s_enable_request" % ows, values[is_enabled]) mf.save() - -class OWSSettings(object): - - @HTTPCompatible() - def GET(self, ows, ws_name, format): - ws = get_workspace(ws_name) - try: - if ws.get_metadata("%s_enable_request" % ows) == "*": - is_enabled = True - except: - is_enabled = False - - return { - ows: { - "enabled": is_enabled, - "name": ows, - "schemaBaseURL": ws.get_metadata("ows_schemas_location", "http://schemas.opengis.net"), - } - } - - @HTTPCompatible() - def PUT(self, ows, ws_name, format): - ws = get_workspace(ws_name) - data = get_data(name=ows, mandatory=["enabled"], authorized=["enabled"]) - is_enabled = data.pop("enabled") - values = {True: "*", "true": "*", False: "", "false": ""} - if is_enabled not in values: - raise KeyError("'%s' is not valid" % is_enabled) - ws.set_metadata("%s_enable_request" % ows, values[is_enabled]) - ws.save() - - @HTTPCompatible() - def DELETE(self, ows, ws_name, format): - ws = get_workspace(ws_name) - ws.set_metadata("%s_enable_request" % ows, "") - ws.save() - # Index: urlmap(index, "") # Workspaces: @@ -1235,7 +1205,6 @@ urlmap(layergroups, "layergroups") urlmap(layergroup, "layergroups", ()) # OGC Web Services: urlmap(OWSGlobalSettings, "services", "(wms|wfs|wcs)", "settings") -urlmap(OWSSettings, "services", "(wms|wfs|wcs)", (), "settings") urls = tuple(urlmap) -- GitLab