From 5882d8a8eeb808cc2ed13b790553beea2e61db58 Mon Sep 17 00:00:00 2001 From: m431m <m431m@tutanota.com> Date: Fri, 1 Jun 2018 17:08:35 +0200 Subject: [PATCH] Workspace as services/{ws}.map by default --- src/mra.py | 4 ++-- src/server.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/mra.py b/src/mra.py index 8fc2c17..f0f83a7 100644 --- a/src/mra.py +++ b/src/mra.py @@ -1035,7 +1035,7 @@ class MRA(object): # Services: def get_service_path(self, *args): - root = self.config["storage"].get("services", self.get_path("available")) + root = self.config["storage"].get("services", self.get_path("services")) return self.get_path(root, *args) def pub_service_path(self, path): @@ -1046,7 +1046,7 @@ class MRA(object): def get_service(self, name): path = self.get_service_path("%s.map" % name) - return Mapfile(path) + return Mapfile(self.mk_path(path), needed=True) # URL Helpers: diff --git a/src/server.py b/src/server.py index e643ff0..c60e992 100755 --- a/src/server.py +++ b/src/server.py @@ -117,6 +117,7 @@ class workspaces(object): with webapp.mightConflict(): mra.create_workspace(ws_name).save() + # TODO Create associated service webapp.Created("%s/workspaces/%s.%s" % (web.ctx.home, ws_name, format)) @@ -296,12 +297,19 @@ class featuretypes(object): ws.save() # Then creates the associated layer by default: + # - in layers.map model = ws.get_featuretypemodel(ds_name, data["name"]) mf = mra.get_available() with webapp.mightConflict(): mf.create_layer(model, data["name"], True) mf.save() + # - in {workspace}.map + wsmf = mra.get_service(ws_name) + with webapp.mightConflict(): + wsmf.create_layer(model, data["name"], True) + wsmf.save() + webapp.Created("%s/workspaces/%s/datastores/%s/featuretypes/%s.%s" % ( web.ctx.home, ws.name, ds_name, data["name"], format)) @@ -1296,6 +1304,42 @@ class OWSGlobalSettings(object): mf.save() +class OWSWorkspaceSettings(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, ws_name, ows, format): + """It returns the status of the OGC service.""" + + mf = mra.get_service(ws_name) + + return { + 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, ws_name, ows, format): + """To enable or disable OGC service...""" + + mf = mra.get_service(ws_name) + data = get_data(name=ows, mandatory=["enabled"], authorized=["enabled"]) + is_enabled = data.pop("enabled") + # 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) + mf.set_metadata("%s_enable_request" % ows, values[is_enabled]) + mf.save() + + # Index: urlmap(index, "") # About version: @@ -1333,6 +1377,7 @@ urlmap(layergroups, "layergroups") urlmap(layergroup, "layergroups", ()) # OGC Web Services: urlmap(OWSGlobalSettings, "services", "(wms|wfs|wcs)", "settings") +urlmap(OWSWorkspaceSettings, "services", "workspaces", (), "(wms|wfs|wcs)", "settings") urls = tuple(urlmap) -- GitLab