Changeset 1092

Show
Ignore:
Timestamp:
05/08/08 12:03:23
Author:
seang
Message:

Incorporated Paul Hiemstra's patch for basic authorization with modifications (#107), fixed up test expectations, upped version in setup

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • OWSLib/trunk/owslib/wms.py

    r984 r1092  
    1919from urllib import urlencode 
    2020from urllib2 import urlopen 
     21from urllib2 import HTTPPasswordMgrWithDefaultRealm 
     22from urllib2 import HTTPBasicAuthHandler 
     23from urllib2 import build_opener 
     24from urllib2 import install_opener 
    2125 
    2226from etree import etree 
     
    3741    """ 
    3842     
    39     def __init__(self, url, version='1.1.1', xml=None): 
     43    def __init__(self, url, version='1.1.1', xml=None,  
     44                 username=None, password=None 
     45                 ): 
    4046        """Initialize.""" 
    4147        self.url = url 
     48        self.username = username 
     49        self.password = password 
    4250        self.version = version 
    4351        self._capabilities = None 
     52        self._open = urlopen 
     53 
     54        if self.username and self.password: 
     55            # Provide login information in order to use the WMS server 
     56            # Create an OpenerDirector with support for Basic HTTP  
     57            # Authentication... 
     58            passman = HTTPPasswordMgrWithDefaultRealm() 
     59            passman.add_password(None, self.url, self.username, self.password) 
     60            auth_handler = HTTPBasicAuthHandler(passman) 
     61            opener = build_opener(auth_handler) 
     62            self._open = opener.open 
     63 
    4464        # initialize from saved capability document 
    45         if xml: 
    46             reader = WMSCapabilitiesReader(self.version) 
     65        elif xml: 
     66            reader = WMSCapabilitiesReader( 
     67                self.version, url=self.url, un=self.username, pw=self.password 
     68                ) 
    4769            self._capabilities = ServiceMetadata(reader.readString(xml)) 
    48          
     70 
    4971    def _getcapproperty(self): 
    5072        if not self._capabilities: 
    51             reader = WMSCapabilitiesReader(self.version) 
     73            reader = WMSCapabilitiesReader( 
     74                self.version, url=self.url, un=self.username, pw=self.password 
     75                ) 
    5276            self._capabilities = ServiceMetadata(reader.read(self.url)) 
    5377        return self._capabilities 
     
    5781        """Request and return capabilities document from the WMS as a  
    5882        file-like object.""" 
    59         reader = WMSCapabilitiesReader(self.version) 
    60         u = urlopen(reader.capabilities_url(self.url)) 
     83         
     84        reader = WMSCapabilitiesReader( 
     85            self.version, url=self.url, un=self.username, pw=self.password 
     86            ) 
     87        u = self._open(reader.capabilities_url(self.url)) 
    6188        # check for service exceptions, and return 
    6289        if u.info().gettype() == 'application/vnd.ogc.se_xml': 
     
    6895 
    6996    def getmap(self, layers=None, styles=None, srs=None, bbox=None, 
    70                format=None, size=None, transparent=False, bgcolor='#FFFFFF', 
     97               format=None, size=None, time=None, transparent=False, 
     98               bgcolor='#FFFFFF', 
    7199               exceptions='application/vnd.ogc.se_xml', 
    72                method='Get'): 
     100               method='Get' 
     101               ): 
    73102        """Request and return an image from the WMS as a file-like object. 
    74103         
     
    109138            >>> out.close() 
    110139 
    111         """ 
     140        """         
    112141        md = self.capabilities 
    113142        base_url = md.getOperationByName('GetMap').methods[method]['url'] 
     
    134163        request['exceptions'] = str(exceptions) 
    135164         
     165        if time is not None: 
     166            request['time'] = str(time) 
     167         
    136168        data = urlencode(request) 
    137169        if method == 'Post': 
    138             u = urlopen(base_url, data=data) 
     170            u = self._open(base_url, data=data) 
    139171        else: 
    140             u = urlopen(base_url + data) 
     172            u = self._open(base_url + data) 
    141173 
    142174        # check for service exceptions, and return 
     
    223255        raise KeyError, "No operation named %s" % name 
    224256 
    225     #def toXML(self): 
    226     #    """x 
    227     #    """ 
    228     #    top = etree.Element('a') 
    229     #    top.text = self.getName() 
    230     #    return etree.tostring(top) 
    231  
    232257 
    233258class ContentMetadata: 
     
    313338        def __str__(self): 
    314339                return 'Layer Name: %s Title: %s' % (self.name, self.title) 
     340 
    315341 
    316342class OperationMetadata: 
     
    365391                else: self.position = None 
    366392 
    367 # Deprecated classes follow 
    368 # TODO: remove 
    369393 
    370394class WMSCapabilitiesInfoset: 
     
    465489    """ 
    466490 
    467     def __init__(self, version='1.1.1'): 
     491    def __init__(self, version='1.1.1', url=None, un=None, pw=None): 
    468492        """Initialize""" 
    469493        self.version = version 
    470494        self._infoset = None 
     495        self.url = url 
     496        self.username = un 
     497        self.password = pw 
     498        self._open = urlopen 
     499 
     500        if self.username and self.password: 
     501            # Provide login information in order to use the WMS server 
     502            # Create an OpenerDirector with support for Basic HTTP  
     503            # Authentication... 
     504            passman = HTTPPasswordMgrWithDefaultRealm() 
     505            passman.add_password(None, self.url, self.username, self.password) 
     506            auth_handler = HTTPBasicAuthHandler(passman) 
     507            opener = build_opener(auth_handler) 
     508            self._open = opener.open 
    471509 
    472510    def capabilities_url(self, service_url): 
     
    497535        """ 
    498536        request = self.capabilities_url(service_url) 
    499         u = urlopen(request) 
     537        u = self._open(request) 
    500538        return WMSCapabilitiesInfoset(etree.fromstring(u.read())) 
    501539 
  • OWSLib/trunk/setup.py

    r799 r1092  
    33 
    44setup(name          = 'OWSLib', 
    5       version       = '0.2.1', 
     5      version       = '0.3', 
    66      description   = 'OGC Web Service utility library', 
    77      license       = 'BSD', 
     
    1111      maintainer        = 'Sean Gillies', 
    1212      maintainer_email  = 'sgillies@frii.com', 
    13       url           = 'http://trac.gispython.org/projects/PCL/wiki/OwsLib', 
     13      url           = 'http://trac.gispython.org/projects/PCL/wiki/OWSLib', 
    1414      packages      = ['owslib'], 
    15       tests_require = ['zope.testing']
     15      test_suite    = 'tests.test_suite'
    1616      classifiers   = [ 
    1717        'Development Status :: 3 - Alpha', 
  • OWSLib/trunk/tests/__init__.py

    r799 r1092  
    11# package 
     2from test_doctests import test_suite 
  • OWSLib/trunk/tests/JPLCapabilities.txt

    r799 r1092  
    3838 
    3939    >>> [layer.name for layer in wms.capabilities.contents] 
    40     ['global_mosaic', 'global_mosaic_base', 'us_landsat_wgs84', 'srtm_mag', 'daily_terra_721', 'daily_aqua_721', 'daily_terra_ndvi', 'daily_aqua_ndvi', 'daily_terra', 'daily_aqua', 'BMNG', 'modis', 'huemapped_srtm', 'srtmplus', 'worldwind_dem', 'us_ned', 'us_elevation', 'us_colordem'] 
     40    [None, 'global_mosaic', 'global_mosaic_base', 'us_landsat_wgs84', 'srtm_mag', 'daily_terra_721', 'daily_aqua_721', 'daily_terra_ndvi', 'daily_aqua_ndvi', 'daily_terra', 'daily_aqua', 'BMNG', 'modis', 'huemapped_srtm', 'srtmplus', 'worldwind_dem', 'us_ned', 'us_elevation', 'us_colordem'] 
    4141     
    4242    >>> [layer.title for layer in wms.capabilities.contents] 
    43     ['WMS Global Mosaic, pan sharpened', 'WMS Global Mosaic, not pan sharpened', 'CONUS mosaic of 1990 MRLC dataset', 'SRTM reflectance magnitude, 30m', 'Daily composite of MODIS-TERRA 721 pseudocolor', 'Daily composite of MODIS-AQUA 721 pseudocolor', 'Daily composite of MODIS-TERRA images, NDVI processing', 'Daily composite of MODIS-AQUA images, NDVI processing', 'Daily composite of MODIS-TERRA images', 'Daily composite of MODIS-AQUA images', 'Blue Marble Next Generation, Global MODIS derived image', 'Blue Marble, Global MODIS derived image', 'SRTM derived global elevation, 3 arc-second, hue mapped', 'Global 1km elevation, seamless SRTM land elevation and ocean depth', 'SRTM derived global elevation, 3 arc-second', 'United States elevation, 30m', 'Digital Elevation Map of the United States, DTED dataset, 3 second resolution, grayscale', 'Digital Elevation Map of the United States, DTED dataset, 3 second resolution, hue mapped'] 
     43    ['OnEarth Web Map Server', 'WMS Global Mosaic, pan sharpened', 'WMS Global Mosaic, not pan sharpened', 'CONUS mosaic of 1990 MRLC dataset', 'SRTM reflectance magnitude, 30m', 'Daily composite of MODIS-TERRA 721 pseudocolor', 'Daily composite of MODIS-AQUA 721 pseudocolor', 'Daily composite of MODIS-TERRA images, NDVI processing', 'Daily composite of MODIS-AQUA images, NDVI processing', 'Daily composite of MODIS-TERRA images', 'Daily composite of MODIS-AQUA images', 'Blue Marble Next Generation, Global MODIS derived image', 'Blue Marble, Global MODIS derived image', 'SRTM derived global elevation, 3 arc-second, hue mapped', 'Global 1km elevation, seamless SRTM land elevation and ocean depth', 'SRTM derived global elevation, 3 arc-second', 'United States elevation, 30m', 'Digital Elevation Map of the United States, DTED dataset, 3 second resolution, grayscale', 'Digital Elevation Map of the United States, DTED dataset, 3 second resolution, hue mapped'] 
    4444     
    4545Test single item accessor 
  • OWSLib/trunk/tests/TelaCapabilities.txt

    r799 r1092  
    3636 
    3737    >>> [layer.name for layer in wms.capabilities.contents] 
    38     ['world.topo.bathy.200409', 'USGS_1ft_San_Diego'] 
     38    ['ngBM', 'world.topo.bathy.200409', 'USGS_1ft_San_Diego'] 
    3939     
    4040    >>> [layer.title for layer in wms.capabilities.contents] 
    41     ['world.topo.bathy.200409', 'USGS 1ft San Diego'] 
     41    ['BM', 'world.topo.bathy.200409', 'USGS 1ft San Diego'] 
    4242     
    4343Test single item accessor 
     
    5353     
    5454    >>> wms.capabilities.getContentByName('world.topo.bathy.200409').crsOptions 
    55     ['EPSG:4326'] 
     55    ['init=epsg:4326'] 
    5656     
    5757    >>> wms.capabilities.getContentByName('world.topo.bathy.200409').styles 
  • OWSLib/trunk/tests/test_doctests.py

    r799 r1092  
    2424import glob 
    2525import os 
    26  
    27 from zope.testing import doctest 
     26import doctest 
    2827 
    2928optionflags = (doctest.REPORT_ONLY_FIRST_FAILURE |