Ver código fonte

more tests, abstract, title

Jachym Cepicky 14 anos atrás
pai
commit
b14dc793af
8 arquivos alterados com 55 adições e 18 exclusões
  1. 7 3
      OWS.py
  2. 1 0
      config.cfg-template
  3. 2 0
      tests/mapfiles/ows.map
  4. 14 0
      tests/test_ows.py
  5. 5 0
      tests/test_wcs.py
  6. 7 13
      tests/test_wfs.py
  7. 4 2
      wcs/__init__.py
  8. 15 0
      wfs/__init__.py

+ 7 - 3
OWS.py

@@ -19,7 +19,8 @@ class OWS:
     requestUrl = None
     mapobj = None
     qstring = None
-    owsNs = "http://www.opengis.net/ows/1.1"
+    owsns11 = "http://www.opengis.net/ows/1.1"
+    owsns = "http://www.opengis.net/ows"
     cachedir = None
     mapfileName = "mapfile.map"
     config = None
@@ -185,13 +186,16 @@ class OWS:
         mapobj.setExtent(-180,-90,90,180)
 
         logging.debug("Setting ERRORFILE to %s"%self.config.get("MapServer","errorfile"))
-        mapobj.setConfigOption("MS_ERRORFILE",self.config.get("MapServer","errorfile"))
+        if os.access(self.config.get("MapServer","errorfile"), os.W_OK):
+            mapobj.setConfigOption("MS_ERRORFILE",self.config.get("MapServer","errorfile"))
+        else:
+            logging.warning("Cannot set ERRORFILE to %s: %s "%\
+                    (self.config.get("MapServer","errorfile"),"Write access denided"))
 
         logging.debug("Setting IMAGEPATH to %s"%self.config.get("MapServer","imagepath"))
         mapobj.web.imagepath=self.config.get("MapServer","imagepath")
 
         mapobj.setMetaData("ows_enable_request","*")
-        mapobj.setMetaData("wms_enable_request","*")
 
         return mapobj
 

+ 1 - 0
config.cfg-template

@@ -3,6 +3,7 @@ cachedir=/tmp/
 logging=DEBUG
 
 [MapServer]
+name=owsproxy
 tempdir=/tmp/
 errorfile=/tmp/mapserv.log
 imagepath=/tmp/mapserv/

+ 2 - 0
tests/mapfiles/ows.map

@@ -31,6 +31,7 @@ LAYER
     "wfs_srs"               "EPSG:4326" ## REQUIRED
     "gml_include_items"     "all" ## Optional (serves all attributes for layer)
     #"ows_feature_id"         "gml_id" ## REQUIRED
+    "wfs_abstract"         "My abstract"
   END
   TYPE LINE
   STATUS ON
@@ -68,6 +69,7 @@ LAYER
         "wcs_label"           "Elevation/Bathymetry"  ### required
         "wcs_rangeset_name"   "Range 1"               ### required to support DescribeCoverage request
         "wcs_rangeset_label"  "My Label"              ### required to support DescribeCoverage request
+        "wcs_abstract"         "My abstract"
     END
 END
 

+ 14 - 0
tests/test_ows.py

@@ -52,3 +52,17 @@ class TestOWS(unittest.TestCase):
 
         return urlparse.urlunparse((owsUrl[0],owsUrl[1],owsUrl[2], owsUrl[3],
                                      urllib.unquote(urllib.urlencode(owsParams,True)),owsUrl[5]))
+
+    def _getWMSCapabilities(self):
+        # download the WMS Capabilities
+        url = self._getURLWithMap(self.service.mapfilename)
+        url = urlparse.urlparse(url)
+        params = urlparse.parse_qs(url[4])
+        params["REQUEST"] = "GetCapabilities"
+        params["SERVICE"] = "WMS"
+        params = urllib.unquote(urllib.urlencode(params,True))
+        attrs = (url[0],url[1],url[2],url[3],params,url[5])
+        logging.debug("GetCapabilities URL: " + urlparse.urlunparse(attrs))
+        resp = objectify.parse(urllib.urlopen(urlparse.urlunparse(attrs)))
+        return resp.getroot()
+

+ 5 - 0
tests/test_wcs.py

@@ -21,5 +21,10 @@ class TestWCS(TestOWS):
         self.assertTrue(isinstance(mapObj, mapscript.mapObj))
         self.assertEquals(mapObj.numlayers,1)
 
+        self.capabilities = self._getWMSCapabilities()
+        self.assertEquals(self.capabilities.Capability.tag,"{http://www.opengis.net/wms}Capability")
+        self.assertEquals(self.capabilities.Capability.Layer.Layer.Name.text, "dem")
+        self.assertEquals(self.capabilities.Capability.Layer.Layer.Abstract.text, "My abstract")
+
 if __name__ == "__main__":
     unittest.main()

+ 7 - 13
tests/test_wfs.py

@@ -27,20 +27,14 @@ class TestWFS(TestOWS):
         layer = mapObj.getLayer(0)
         self.assertEquals(layer.type,mapscript.MS_LAYER_LINE)
 
-        # download the WMS Capabilities
-        url = self._getURLWithMap(self.service.mapfilename)
-        url = urlparse.urlparse(url)
-        params = urlparse.parse_qs(url[4])
-        params["REQUEST"] = "GetCapabilities"
-        params["SERVICE"] = "WMS"
-        params = urllib.unquote(urllib.urlencode(params,True))
-        attrs = (url[0],url[1],url[2],url[3],params,url[5])
-        resp = objectify.parse(urllib.urlopen(urlparse.urlunparse(attrs)))
-        capabilities = resp.getroot()
-
+        self.capabilities = self._getWMSCapabilities()
         # test the wms capabilities document
-        self.assertEquals(capabilities.Capability.tag,"{http://www.opengis.net/wms}Capability")
-        self.assertEquals(capabilities.Capability.Layer.Layer.Name.text, "line")
+        self.assertEquals(self.capabilities.Capability.tag,"{http://www.opengis.net/wms}Capability")
+        self.assertEquals(self.capabilities.Capability.Layer.Layer.Name.text, "line")
+        self.assertEquals(self.capabilities.Capability.Layer.Layer.Abstract.text, "My abstract")
+
+        # http://localhost/cgi-bin/owsproxy.cgi?owsUrl=http%3A//localhost/cgi-bin/mapserv%3Fmap=/home/jachym/usr/src/hsrs/owsproxy/tests/mapfiles/ows.map&owsService=WFS&version=1.3.0
+        # http://localhost/cgi-bin/owsproxy.cgi?owsUrl=http%3A//bnhelp.cz/ows/crwfs&owsService=WFS&version=1.1.0
 
 if __name__ == "__main__":
     unittest.main()

+ 4 - 2
wcs/__init__.py

@@ -34,8 +34,10 @@ class WCS(OWS):
             lyrobj = mapscript.layerObj(mapobj)
             lyrobj.name = name
             lyrobj.data = layerDefFile
-            lyrobj.title = layer["{%s}%s" % (self.owsNs,"Title")].text
-            lyrobj.setMetaData("wms_title",layer["{%s}%s" % (self.owsNs,"Title")].text)
+            lyrobj.title = layer["{%s}%s" % (self.owsns11,"Title")].text
+            lyrobj.setMetaData("wms_title",layer["{%s}%s" % (self.owsns11,"Title")].text)
+            if "{%s}%s" % (self.owsns11,"Abstract") in layer:
+                lyrobj.setMetaData("ows_abstract",  layer["{%s}%s" % (self.owsns11,"Abstract")].text)
             sr = osr.SpatialReference()
             sr.ImportFromWkt(ds.GetProjection())
             lyrobj.setProjection(sr.ExportToProj4())

+ 15 - 0
wfs/__init__.py

@@ -15,6 +15,7 @@ import os
 class WFS(OWS):
 
     service = "WFS"
+    wfsns = "http://www.opengis.net/wfs"
 
     def __init__(self,url=None,qstring=None,configFiles=None):
         OWS.__init__(self,url,qstring)
@@ -28,6 +29,8 @@ class WFS(OWS):
 
         ds = ogr.Open(layerDefFile)
 
+        self.setMapName(mapobj)
+
         for layer in self.capabilities.FeatureTypeList.getchildren():
             if layer.tag != "{http://www.opengis.net/wfs}FeatureType":
                 continue
@@ -39,6 +42,8 @@ class WFS(OWS):
             lyrobj.name = name
             lyrobj.title = layer.Title.text
             lyrobj.setMetaData("wms_title",layer.Title.text)
+            if "{%s}%s" % ("http://www.opengis.net/wfs","Abstract") in layer:
+                lyrobj.setMetaData("ows_abstract",  layer["{%s}%s" % ("http://www.opengis.net/wfs","Abstract")].text)
             lyrobj.setMetaData("wfs_typename",layer.Name.text)
             lyrobj.setMetaData("wfs_version",self.capabilities.attrib["version"])
             lyrobj.setConnectionType(mapscript.MS_OGR,'')
@@ -98,3 +103,13 @@ class WFS(OWS):
         else:
             return mapscript.MS_LAYER_POINT
 
+    def setMapName(self,mapobj):
+        mapobj.name = self.config.get("MapServer","name")
+
+        if self.capabilities.attrib["version"] == "1.0.0":
+            mapobj.setMetaData("wms_title",self.capabilities["{%s}%s"%(self.wfsns,"Service")].Title.text)
+            mapobj.setMetaData("wms_abstract",self.capabilities.Service.Abstract.text)
+
+        else:
+            mapobj.setMetaData("wms_title",self.capabilities["{%s}%s"%(self.owsns,"ServiceIdentification")].Title.text)
+            mapobj.setMetaData("wms_abstract",self.capabilities["{%s}%s"%(self.owsns,"ServiceIdentification")].Abstract.text)