source: cows/trunk/cows/service/imps/data_reader_geoplot_backend/slab_options_parser.py @ 6123

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cows/trunk/cows/service/imps/data_reader_geoplot_backend/slab_options_parser.py@6123
Revision 6123, 2.2 KB checked in by pnorton, 11 years ago (diff)

Added the interval geoplot renderer, also improved the slab option parser and moved the responsibility for generating the colour bars to the slabs.

Line 
1import logging
2import urllib2
3
4from matplotlib import cm
5from cows.service.imps.csmlbackend.config import config
6
7log = logging.getLogger(__name__)
8
9class SlabOptionsParser(object):
10   
11    def __init__(self, slabOptions, renderOptions):
12       
13        self._slabOptionsLookup = {}
14        for option in slabOptions:
15            self._slabOptionsLookup[option.name.lower()] = option
16       
17       
18       
19        self._renderOptions = {}
20        for k, v in renderOptions.items():
21            self._renderOptions[k.lower()] = urllib2.unquote(v)
22       
23    def getOption(self, optionName):
24        return self._getOption(optionName)
25   
26    def _getOption(self, optionName):
27       
28        name = optionName.lower()
29
30        if name not in self._slabOptionsLookup:
31            log.warning("Unknown option %s received, returning None" % (name,))
32            return None
33       
34        value = None;
35        if name in self._renderOptions:
36            value = self._getOptionFromDict(name)
37       
38        if value == None:
39            value = self._getDefaultForOption(name)
40       
41        return value
42   
43    def _getOptionFromDict(self, optionName):
44       
45        value = None
46       
47        try:
48            stringValue = self._renderOptions[optionName]
49            type = self._slabOptionsLookup[optionName].type
50            log.debug("optionName = %s, stringValue = %s" % (optionName, stringValue,))
51           
52             
53           
54            if type == bool :
55                value = stringValue.lower() == 'true'
56            else:
57                value = type(stringValue)
58               
59            renderOpt = self._slabOptionsLookup[optionName]
60           
61            if not renderOpt.options is None:
62                if value not in renderOpt.options:
63                    log.debug("value %s not in options %s" % (value, renderOpt.options,))
64                    value = None
65
66        except:
67            log.exception("Error getting option %s from renderOptions=%s" % (optionName, self._renderOptions))
68            value = None
69           
70        return value
71
72    def _getDefaultForOption(self, optionName):
73        return self._slabOptionsLookup[optionName].default
74       
Note: See TracBrowser for help on using the repository browser.