Changeset 6016 for cowsclient


Ignore:
Timestamp:
16/11/09 16:29:20 (10 years ago)
Author:
pnorton
Message:

Fixed a url join problem in the cows index parsing code.

File:
1 edited

Legend:

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

    r6014 r6016  
    11 
    2 from cowsclient.lib.base import config 
    32from cowsclient.lib.wmc_util import openURL 
    43 
    5 import os 
    64import logging 
    75import urllib2  
     6import urlparse 
    87import simplejson as json 
    9 from HTMLParser import HTMLParser 
    108import libxml2dom 
    119 
    1210log = logging.getLogger(__name__) 
    13  
    14 def readEndpoints(): 
    15     endpoints = {} 
    16      
    17     if 'endpointList' in config.keys(): 
    18         log.debug("config['endpointList'] = %s" % (config['endpointList'],)) 
    19          
    20          
    21         currentKey = None 
    22         for l in open(config['endpointList']): 
    23             l = l.strip() 
    24             if l == '' or l[0] == '#': 
    25                 continue 
    26              
    27             if l[0] == '[' and l[-1] == ']': 
    28                 currentKey = l[1:-1] 
    29                 continue 
    30              
    31             if currentKey != None: 
    32                 if currentKey not in endpoints: 
    33                     endpoints[currentKey] = [] 
    34                 endpoints[currentKey].append(l) 
    35          
    36         if 'COWS' in endpoints: 
    37             for cowsEndpoint in endpoints['COWS']: 
    38                 try: 
    39                      
    40                     for linkName, linkDict in parseCowsCatalog(cowsEndpoint): 
    41                      
    42                         #grab the WMS and WCS links and add them to the dictionary 
    43                         if 'WMS' in linkDict.keys(): 
    44                             endpoints['WMS'].append(linkDict['WMS']) 
    45                         elif 'WCS' in linkDict.keys(): 
    46                             endpoints['WMS'].append(linkDict['WCS']) 
    47                 except: 
    48                     log.exception("Exception occurred reading enpoints from %s" % (cowsEndpoint,)) 
    49                  
    50      
    51     return endpoints 
    52  
    53 class _MyHTMLLinkFinder(HTMLParser): 
    54      
    55     def __init__(self, baseURL): 
    56         self.baseURL = baseURL 
    57         self.links = [] 
    58         HTMLParser.__init__(self) 
    59          
    60     def handle_starttag(self, tag, attrs): 
    61         atts = dict(attrs) 
    62         if tag == 'a' and 'href' in atts: 
    63             self.links.append(self._getLink(atts['href'])) 
    64  
    65     def _getLink(self, href): 
    66         if href[0:4] == 'http': 
    67             return href 
    68         else: 
    69             if href[0] == '/': 
    70                 href = href[1:] 
    71             return os.path.join(self.baseURL, href) 
    72  
    7311 
    7412def parseCowsCatalog(cowsEndpoint): 
     
    9836                liknName = str(''.join(c.textContent.split())) # removing whitespace and converting from unicode 
    9937                 
    100                 # remove leading '/' as it confuses os.path.join 
    10138                href = c.getAttribute('href') 
    102                 if href[0] == '/': 
    103                     href = href[1:] 
    10439                     
    105                 linkTarget =  os.path.join(cowsEndpoint, href) 
     40                linkTarget =  urlparse.urljoin(cowsEndpoint, href) 
    10641                links[liknName] = str(linkTarget) 
    10742     
Note: See TracChangeset for help on using the changeset viewer.