Hi all,

I didn't feel comfortable with version being mandatory in
WebCoverageService calls since it's provided in GetCapabilities
response. Or maybe I'm missing something?

Find attached patches for wcsBase.py and wcs.py which make this
parameter optional in WCSCapabilitiesReader.__init__ and
WebCoverageService. The first one is necessary for the second one to
work. I also modified the doctest test_idee.txt in order to test
WebCoverageService (and WCSCapabilitiesReader.__init__).

Cheers

Goyo

--- tmp/wcsBase-0.py 
+++ home/goyo/Programas/owslib/wc/owslib/coverage/wcsBase.py 
@@ -66,7 +66,7 @@
     """Read and parses WCS capabilities document into a lxml.etree infoset
     """
 
-    def __init__(self, version):
+    def __init__(self, version=None):
         """Initialize
         @type version: string
         @param version: WCS Version parameter e.g '1.0.0'
@@ -91,7 +91,7 @@
             qs.append(('service', 'WCS'))
         if 'request' not in params:
             qs.append(('request', 'GetCapabilities'))
-        if 'version' not in params:
+        if ('version' not in params) and (self.version is not None):
             qs.append(('version', self.version))
 
         urlqs = urlencode(tuple(qs))
--- tmp/wcs-HEAD.py 
+++ home/goyo/Programas/owslib/wc/owslib/wcs.py 
@@ -13,10 +13,25 @@
 Web Coverage Server (WCS) methods and metadata. Factory function.
 """
 
-from coverage import wcs100, wcs110 
-def WebCoverageService(url, version='1.1.0', xml=None):
+import urllib2
+import etree
+from coverage import wcs100, wcs110, wcsBase
+
+def WebCoverageService(url, version=None, xml=None):
     ''' wcs factory function, returns a version specific WebCoverageService object '''
+
+    if xml is None:
+        reader = wcsBase.WCSCapabilitiesReader()
+        request = reader.capabilities_url(url)
+        xml = urllib2.urlopen(request).read()
+
+    if version is None:
+        capabilities = etree.etree.fromstring(xml)
+        version = capabilities.get('version')
+        del capabilities
+
     if version == '1.0.0':
         return wcs100.WebCoverageService_1_0_0.__new__(wcs100.WebCoverageService_1_0_0, url, xml)
     elif version == '1.1.0':
         return wcs110.WebCoverageService_1_1_0.__new__(wcs110.WebCoverageService_1_1_0,url, xml)
+
--- tmp/wcs_idee-HEAD.txt 
+++ home/goyo/Programas/owslib/wc/tests/wcs_idee.txt 
@@ -6,6 +6,9 @@
 
 
     >>> from owslib.wcs import WebCoverageService
+    >>> wcs=WebCoverageService('http://www.idee.es/wcs/IDEE-WCS-UTM30N/wcsServlet')
+    >>> wcs.version
+    '1.0.0'
     >>> wcs=WebCoverageService('http://www.idee.es/wcs/IDEE-WCS-UTM30N/wcsServlet', version='1.0.0')
     >>> wcs.url
     'http://www.idee.es/wcs/IDEE-WCS-UTM30N/wcsServlet'
_______________________________________________
Community mailing list
[email protected]
http://lists.gispython.org/mailman/listinfo/community

Reply via email to