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.

RevLine 
[5692]1import logging
[6123]2import urllib2
[5692]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:
[5697]15            self._slabOptionsLookup[option.name.lower()] = option
[5692]16       
17       
[5755]18       
19        self._renderOptions = {}
20        for k, v in renderOptions.items():
[6123]21            self._renderOptions[k.lower()] = urllib2.unquote(v)
[5755]22       
[5692]23    def getOption(self, optionName):
24        return self._getOption(optionName)
25   
26    def _getOption(self, optionName):
27       
[5697]28        name = optionName.lower()
29
30        if name not in self._slabOptionsLookup:
[5877]31            log.warning("Unknown option %s received, returning None" % (name,))
[5692]32            return None
33       
34        value = None;
[5697]35        if name in self._renderOptions:
36            value = self._getOptionFromDict(name)
[5692]37       
38        if value == None:
[5697]39            value = self._getDefaultForOption(name)
[5692]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
[5697]50            log.debug("optionName = %s, stringValue = %s" % (optionName, stringValue,))
[6102]51           
52             
53           
[5697]54            if type == bool :
55                value = stringValue.lower() == 'true'
56            else:
57                value = type(stringValue)
58               
[6102]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
[5692]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.