source: qesdi/graphplotter/trunk/graphplotter/controllers/buildplot.py @ 6522

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/qesdi/graphplotter/trunk/graphplotter/controllers/buildplot.py
Revision 6522, 4.1 KB checked in by pnorton, 10 years ago (diff)

Sorted the options in the data, variable and axis select boxes.

Line 
1import logging
2
3from pylons import request, response, session, tmpl_context as c
4from pylons.controllers.util import abort, redirect_to
5
6from graphplotter.lib.base import BaseController, render
7
8from graphplotter.lib.df_config_reader import DFConfigReader
9from graphplotter.lib.data_reader import DataReader
10
11from graphplotter.lib.utils import getParams
12
13log = logging.getLogger(__name__)
14
15class BuildplotController(BaseController):
16
17    def index(self):
18       
19        # need a list of all the available data files
20        cr = DFConfigReader()
21       
22        c.dataFiles = [''] + sorted(cr.getDataFileList())
23       
24        params = getParams(request)
25       
26        c.selectedDataFile = params.get('datafile', '')
27       
28        # if datafile is selected,
29        if c.selectedDataFile != '':
30           
31            log.debug("c.selectedDataFile = %s" % (c.selectedDataFile,))
32           
33            self._addDataFileSelection(params, cr)
34           
35       
36        return render('buildplot.html')
37
38    def _addDataFileSelection(self, params, cr):
39       
40        dfConfig = cr.getConfig(c.selectedDataFile)
41        reader = DataReader(dfConfig['path'], dfConfig['axisLookup'])
42        log.debug("dfConfig = %s" % (dfConfig,))
43       
44        log.debug("'dataVariables' in dfConfig = %s" % ('dataVariables' in dfConfig,))
45        log.debug("dfConfig = %s" % (dfConfig,))
46       
47        allVars = reader.getVariableNames()
48       
49        # if there is a dataVariables section, only include the variables
50        # in this section, all others are to be ignored.
51        if 'dataVariables' in dfConfig:
52           
53            c.variables = []
54           
55            dataVaraibleKeys = sorted(dfConfig['dataVariables'].keys())
56           
57            for k in dataVaraibleKeys:
58               
59                v = dfConfig['dataVariables'][k]
60               
61                assert k in allVars, 'Variable %s not found in file. Variables found = %s' % (v, allVars)
62               
63                # the @ sign means use an attribute as the name
64                if v.find('@') == 0:
65                    name = reader.getVariableAttribute(k, v[1:])
66                else:
67                    name = v
68                   
69                c.variables.append( (k, name) )
70           
71           
72           
73            c.variables.insert(0, ('',''))
74           
75        else:
76            c.variables = [''] + sorted(reader.getVariableNames())
77       
78       
79        c.selectedVariable = params.get('variable', '')
80       
81        if c.selectedVariable != '' and c.selectedVariable in allVars:
82            log.debug("c.selectedVariable = %s" % (c.selectedVariable,))
83            self._addVariableSelection(params, reader)
84        else:
85            c.selectedVariable = ''
86           
87    def _addVariableSelection(self, params, reader):
88        axisNames = reader.getAxisNames(c.selectedVariable)
89        c.axis = [''] + sorted(axisNames)
90        c.selectedAxis = params.get('axis', '')
91       
92        log.debug("c.selectedAxis = %s" % (c.selectedAxis,))
93        log.debug("c.axis = %s" % (c.axis,))
94       
95        # if this axis is the result of a previous selection get rid of it
96        if c.selectedAxis not in axisNames:
97            c.selectedAxis = ''
98           
99        if c.selectedAxis != '' :
100            self._addAxisSelection(params, reader)
101           
102                   
103    def _addAxisSelection(self, params, reader):
104       
105        for k in params:
106            if k[:4] == 'sel_':
107                setattr(c, k, params[k])
108                               
109        c.axisSelect = {}
110        c.axisSelectUnits = {}
111       
112        for ax in c.axis:
113            if ax in ['', c.selectedAxis]:
114                continue
115           
116            vals = reader.getAxisValues(c.selectedVariable, ax)
117                       
118            #c.axisSelect[ax] = [''] + [str(x) for x in vals]
119            c.axisSelect[ax] = [str(x) for x in vals]
120           
121            units = reader.getAxisUnits(c.selectedVariable, ax)
122            c.axisSelectUnits[ax] = units
123       
124#        log.debug("c.axisSelect = %s" % (c.axisSelect,))
Note: See TracBrowser for help on using the repository browser.