source: cows/trunk/cows/service/imps/data_reader_geoplot_backend/slab_options_json_generator.py @ 5755

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

Modified the browser sniffing code so that it dosen't trigger for IE 8. Also made some changes to the slab option parsers.

Line 
1import logging
2import simplejson as json
3
4log = logging.getLogger(__name__)
5
6class SlabJSONGenerator(object):
7   
8    def __init__(self, styleOptionsMap):
9               
10        self.commonOptions = []
11        self.styleOptions = {}
12       
13        #for each of the styles mentioned
14        for style in styleOptionsMap.keys():
15           
16            #create an empty list to hold each styles specific options
17            self.styleOptions[style] = []
18           
19            #for each of the options in this style
20            for option in styleOptionsMap[style]:
21               
22                #check if this option appears in all the others
23                isCommon = True
24                for styleNames in styleOptionsMap.values():
25                    if option.name not in styleNames:
26                        isCommon = False
27               
28                #add the option to one of the lists
29                if isCommon:
30                    if option.name not in [x.name for x in self.commonOptions]:
31                        self.commonOptions.append(option)
32                else:
33                    self.styleOptions[style].append(option)
34           
35       
36    def generateJSON(self):
37
38        displayOptions = {}
39       
40        displayOptions['common'] = self._buildOptionsList(self.commonOptions)
41       
42        for style, optionsList in self.styleOptions.items():
43            displayOptions[style] = self._buildOptionsList(optionsList)
44           
45        return json.dumps(displayOptions)
46
47    def _buildOptionsList(self, optionsList):
48       
49        list = [self._buildOptionDict(opt) for opt in optionsList]
50           
51        return list
52   
53    def _buildOptionDict(self, renderOption):
54       
55        optionDict = {}
56        optionDict['name'] = renderOption.name
57        optionDict['title'] = renderOption.title
58        optionDict['defaultVal'] = renderOption.default
59       
60        if optionDict['defaultVal'] == None:
61            optionDict['defaultVal'] = ''
62       
63        if renderOption.options != None:
64            optionDict['options'] = renderOption.options
65            optionDict['type'] = 'select'
66           
67        elif renderOption.type == bool:
68            optionDict['type'] = 'bool'
69           
70        else:
71            optionDict["type"] ="value"
72       
73        return optionDict
Note: See TracBrowser for help on using the repository browser.