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

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

Added the ability to replace a data variables name with a attribute from the variable by putting an '@' character before the alias in the config file.

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 = [''] + 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       
48        # if there is a dataVariables section, only include the variables
49        # in this section, all others are to be ignored.
50        if 'dataVariables' in dfConfig:
51            allVars = reader.getVariableNames()
52           
53            c.variables = [('','')]
54           
55            for k, v in dfConfig['dataVariables'].items():
56               
57                assert k in allVars, 'Variable %s not found in file. Variables found = %s' % (v, allVars)
58               
59                # the @ sign means use an attribute as the name
60                if v.find('@') == 0:
61                    name = reader.getVariableAttribute(k, v[1:])
62                else:
63                    name = v
64                   
65                c.variables.append( (k, name) )
66           
67           
68        else:
69            c.variables = [''] + reader.getVariableNames()
70       
71       
72        c.selectedVariable = params.get('variable', '')
73       
74        if c.selectedVariable != '':
75            log.debug("c.selectedVariable = %s" % (c.selectedVariable,))
76            self._addVariableSelection(params, reader)
77           
78
79
80    def _addVariableSelection(self, params, reader):
81        axisNames = reader.getAxisNames(c.selectedVariable)
82        c.axis = [''] + axisNames
83        c.selectedAxis = params.get('axis', '')
84       
85        log.debug("c.selectedAxis = %s" % (c.selectedAxis,))
86        log.debug("c.axis = %s" % (c.axis,))
87       
88        # if this axis is the result of a previous selection get rid of it
89        if c.selectedAxis not in axisNames:
90            c.selectedAxis = ''
91           
92        if c.selectedAxis != '' :
93            self._addAxisSelection(params, reader)
94           
95                   
96    def _addAxisSelection(self, params, reader):
97       
98        for k in params:
99            if k[:4] == 'sel_':
100                setattr(c, k, params[k])
101                               
102        c.axisSelect = {}
103        c.axisSelectUnits = {}
104       
105        for ax in c.axis:
106            if ax in ['', c.selectedAxis]:
107                continue
108           
109            vals = reader.getAxisValues(c.selectedVariable, ax)
110                       
111            c.axisSelect[ax] = [''] + [str(x) for x in vals]
112           
113            units = reader.getAxisUnits(c.selectedVariable, ax)
114            c.axisSelectUnits[ax] = units
115       
116#        log.debug("c.axisSelect = %s" % (c.axisSelect,))
Note: See TracBrowser for help on using the repository browser.