source: cowsclient/trunk/cowsclient/lib/display_options_config.py @ 5836

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

Added regular expression matching to the layer defaults settings, also added urllib unquoting of values from the displayOptions file (to allow commas to be passed through to the actual value sent.)

Line 
1'''
2Created on 7 Sep 2009
3
4@author: pnorton
5'''
6
7from cowsclient.lib.base import config
8
9from ConfigParser import SafeConfigParser
10import logging
11import urllib
12
13log = logging.getLogger(__name__)
14
15class DisplayOptionsConfigBuilder(object):
16   
17    def __init__(self, filePath):
18        self.filePath = filePath
19        self._config = SafeConfigParser()
20
21    def build(self):
22       
23        self._config.read(self.filePath)
24       
25        displayOptions = {}
26       
27        if self._config.has_section('HideOptions'):
28            displayOptions['HideOptions'] = self._buildHideOptions()
29       
30        if self._config.has_section('DefaultOptions'):
31            displayOptions['DefaultOptions'] = self._buildDefaultOptions()
32       
33        return displayOptions
34   
35    def _buildHideOptions(self):
36       
37        hideList = []
38       
39        namedHideOptions = self._config.get('HideOptions','rules').split(',')
40       
41        for name in namedHideOptions:
42           
43            sectionName = 'HideOptions:' + name
44           
45            d = {}
46            d['endpoint'] = self._config.get(sectionName, 'endpoint').strip()
47            d['options'] = self._config.get(sectionName, 'options').split(',')
48           
49            #trim any whitespace
50            d['options'] = [x.strip() for x in d['options']]
51           
52            hideList.append(d)
53           
54        return hideList
55   
56    def _buildDefaultOptions(self):
57       
58        defaultOptions = []
59       
60        namedDefaultOptions = self._config.get('DefaultOptions','rules').split(',')
61       
62        for name in namedDefaultOptions:
63           
64            sectionName = 'DefaultOptions:' + name
65           
66            d = {}
67            d['endpoint'] = self._config.get(sectionName, 'endpoint')
68            d['layers'] = self._config.get(sectionName, 'layers').split(',')
69            d['values'] = self._buildDefaultValuesDict(self._config.get(sectionName, 'values'))
70           
71            #trim any whitespace
72            d['endpoint'] = d['endpoint'].strip()
73            d['layers'] = [x.strip() for x in d['layers']]
74           
75            defaultOptions.append(d)
76           
77        return defaultOptions
78   
79    def _buildDefaultValuesDict(self, defaultValsString):
80        d = {}
81        for defaultItem in defaultValsString.split(','):
82            log.debug("defaultItem = %s" % (defaultItem,))
83            key, value = defaultItem.split('|')
84            d[key.strip()] = urllib.unquote(value.strip())
85           
86        return d
87
88_displayOptionsConfig = None
89
90def getDisplayOptionsConfig():
91    global _displayOptionsConfig
92   
93    if _displayOptionsConfig == None:
94
95        if 'displayOptionsConfig' in config.keys():
96            builder = DisplayOptionsConfigBuilder(config['displayOptionsConfig'])
97            _displayOptionsConfig = builder.build()
98        else:
99            _displayOptionsConfig = {}
100       
101    return _displayOptionsConfig
102    _
103       
Note: See TracBrowser for help on using the repository browser.