Ignore:
Timestamp:
13/10/09 11:59:29 (10 years ago)
Author:
pnorton
Message:

Added the ability to find WMS and WCS links form a cows server catalog page.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cowsclient/trunk/cowsclient/lib/utils.py

    r5698 r5837  
    11 
    22from cowsclient.lib.base import config 
     3from cowsclient.lib.wmc_util import openURL 
    34 
    4 import logging  
     5import os 
     6import logging 
     7import urllib2  
    58import simplejson as json 
     9from HTMLParser import HTMLParser 
    610 
    711log = logging.getLogger(__name__) 
     
    2226            if l[0] == '[' and l[-1] == ']': 
    2327                currentKey = l[1:-1] 
    24                 log.debug("currentKey = %s" % (currentKey,)) 
    2528                continue 
    2629             
     
    2932                    endpoints[currentKey] = [] 
    3033                endpoints[currentKey].append(l) 
    31                 log.debug("l = %s" % (l,)) 
     34         
     35        if 'COWS' in endpoints: 
     36            for cowsEndpoint in endpoints['COWS']: 
     37                try: 
     38                    req = urllib2.Request(cowsEndpoint) 
     39                    fh = openURL(req) 
     40                     
     41                    lf = _MyHTMLLinkFinder(cowsEndpoint) 
     42                    lf.feed(fh.read()) 
     43                     
     44                    #grab the WMS and WCS links and add them to the dictionary 
     45                    for link in lf.links: 
     46                        if link.lower().find('service=wms') > 0: 
     47                            endpoints['WMS'].append(link) 
     48                        elif link.lower().find('service=wcs') > 0: 
     49                            endpoints['WCS'].append(link) 
     50                except: 
     51                    log.exception("Exception occurred reading enpoints from %s" % (cowsEndpoint,)) 
     52                 
    3253     
    3354    return endpoints 
    3455 
     56class _MyHTMLLinkFinder(HTMLParser): 
     57     
     58    def __init__(self, baseURL): 
     59        self.baseURL = baseURL 
     60        self.links = [] 
     61        HTMLParser.__init__(self) 
     62         
     63    def handle_starttag(self, tag, attrs): 
     64        atts = dict(attrs) 
     65        if tag == 'a' and 'href' in atts: 
     66            self.links.append(self._getLink(atts['href'])) 
     67 
     68    def _getLink(self, href): 
     69        if href[0:4] == 'http': 
     70            return href 
     71        else: 
     72            if href[0] == '/': 
     73                href = href[1:] 
     74            return os.path.join(self.baseURL, href) 
    3575 
    3676def toJSON(obj): 
Note: See TracChangeset for help on using the changeset viewer.