source: cowsclient/trunk/cowsclient/lib/utils.py @ 5837

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cowsclient/trunk/cowsclient/lib/utils.py@5837
Revision 5837, 2.3 KB checked in by pnorton, 10 years ago (diff)

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

Line 
1
2from cowsclient.lib.base import config
3from cowsclient.lib.wmc_util import openURL
4
5import os
6import logging
7import urllib2 
8import simplejson as json
9from HTMLParser import HTMLParser
10
11log = logging.getLogger(__name__)
12
13def readEndpoints():
14    endpoints = {}
15   
16    if 'endpointList' in config.keys():
17        log.debug("config['endpointList'] = %s" % (config['endpointList'],))
18       
19       
20        currentKey = None
21        for l in open(config['endpointList']):
22            l = l.strip()
23            if l == '' or l[0] == '#':
24                continue
25           
26            if l[0] == '[' and l[-1] == ']':
27                currentKey = l[1:-1]
28                continue
29           
30            if currentKey != None:
31                if currentKey not in endpoints:
32                    endpoints[currentKey] = []
33                endpoints[currentKey].append(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               
53   
54    return endpoints
55
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)
75
76def toJSON(obj):
77    return json.dumps(obj).replace('"', '\\"')
78
79
Note: See TracBrowser for help on using the repository browser.