Changeset 6464 for qesdi


Ignore:
Timestamp:
02/02/10 09:55:52 (10 years ago)
Author:
pnorton
Message:

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.

Location:
qesdi/graphplotter/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • qesdi/graphplotter/trunk/development.ini

    r6330 r6464  
    4141# Logging configuration 
    4242[loggers] 
    43 keys = root, routes, graphplotter 
     43keys = root, routes, graphplotter, pylons 
    4444 
    4545[handlers] 
     
    6464qualname = graphplotter 
    6565 
     66[logger_pylons] 
     67level = INFO 
     68handlers = 
     69qualname = pylons 
     70 
    6671[handler_console] 
    6772class = StreamHandler 
  • qesdi/graphplotter/trunk/df_config/sio_co2.ini

    r6401 r6464  
    11[DataFile] 
    2 name=co2 
     2name=sio_co2_monthly 
    33path=/data/pnorton/qesdi_data/sio_co2/sio_co2_monthly.nc 
    44 
     
    77 
    88[DataVariables] 
    9 data=sio_co2 
     9data=@standard_name 
  • qesdi/graphplotter/trunk/graphplotter/controllers/buildplot.py

    r6448 r6464  
    2929        if c.selectedDataFile != '': 
    3030             
     31            log.debug("c.selectedDataFile = %s" % (c.selectedDataFile,)) 
     32             
    3133            self._addDataFileSelection(params, cr) 
    3234             
     
    4042        log.debug("dfConfig = %s" % (dfConfig,)) 
    4143         
     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. 
    4250        if 'dataVariables' in dfConfig: 
    4351            allVars = reader.getVariableNames() 
    4452             
    45             for v in dfConfig['dataVariables'].keys(): 
    46                 assert v in allVars, 'Variable %s not found in file. Variables found = %s' % (v, allVars) 
     53            c.variables = [('','')] 
     54             
     55            for k, v in dfConfig['dataVariables'].items(): 
    4756                 
    48             c.variables = [('','')] + dfConfig['dataVariables'].items() 
     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             
    4967             
    5068        else: 
     
    5573         
    5674        if c.selectedVariable != '': 
    57              
     75            log.debug("c.selectedVariable = %s" % (c.selectedVariable,)) 
    5876            self._addVariableSelection(params, reader) 
    5977             
     
    6179 
    6280    def _addVariableSelection(self, params, reader): 
    63         c.axis = [''] + reader.getAxisNames(c.selectedVariable) 
     81        axisNames = reader.getAxisNames(c.selectedVariable) 
     82        c.axis = [''] + axisNames 
    6483        c.selectedAxis = params.get('axis', '') 
    6584         
    66         if c.selectedAxis != '': 
     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 = '' 
    6791             
     92        if c.selectedAxis != '' : 
    6893            self._addAxisSelection(params, reader) 
    6994             
     
    76101                                 
    77102        c.axisSelect = {} 
     103        c.axisSelectUnits = {} 
    78104         
    79105        for ax in c.axis: 
     
    82108             
    83109            vals = reader.getAxisValues(c.selectedVariable, ax) 
     110                         
     111            c.axisSelect[ax] = [''] + [str(x) for x in vals] 
    84112             
    85             log.debug("vals = %s" % (vals,)) 
    86              
    87             c.axisSelect[ax] = [''] + [str(x) for x in vals] 
     113            units = reader.getAxisUnits(c.selectedVariable, ax) 
     114            c.axisSelectUnits[ax] = units 
    88115         
    89116#        log.debug("c.axisSelect = %s" % (c.axisSelect,)) 
  • qesdi/graphplotter/trunk/graphplotter/lib/data_reader.py

    r6448 r6464  
    106106         
    107107        return axisValues 
    108      
    109     def getSelectionData(self, variable, axis): 
     108         
     109    def getVariableAttribute(self, varName,  attName): 
    110110        """ 
    111         Get the data require to build a selection control to set the values of 
    112         the other axis given that variable and axis have already been selected. 
     111        Returns the attribute value of the named variable 
    113112        """ 
    114         pass 
     113        fin = cdms.open(self.file) 
     114         
     115        attValue = None 
     116        try: 
     117            var = fin(varName) 
     118             
     119            attValue = getattr(var, attName) 
     120                 
     121        finally: 
     122            fin.close() 
     123         
     124        return attValue 
    115125     
    116126    def _buildSelectionKeywords(self, fin, var, axis, selection): 
  • qesdi/graphplotter/trunk/graphplotter/lib/plot_builder.py

    r6448 r6464  
    3737        plt = Plot() 
    3838         
    39         log.debug("reader.getVariableUnits(self.params['variable']) = %s" % (reader.getVariableUnits(self.params['variable']),)) 
    40         log.debug("reader.getAxisUnits(self.params['variable'], self.params['axis']) = %s" % (reader.getAxisUnits(self.params['variable'], self.params['axis']),)) 
    41          
    4239        self._setAxisLabels(plt, reader) 
    4340         
    4441        commonItems = self._getCommonItems(selections) 
    4542        log.debug("commonItems = %s" % (commonItems,)) 
    46         self._setPlotTitle(plt, commonItems) 
     43         
     44        self._setPlotTitle(plt, commonItems, reader) 
    4745         
    4846        for sel in selections: 
     
    139137        return commonItems 
    140138     
    141     def _setPlotTitle(self, plt, commonItems): 
     139    def _setPlotTitle(self, plt, commonItems, reader): 
    142140         
    143         title = self._getVariableName() + ' vs ' + self.params['axis'] 
     141        title = self._getVariableName(reader) + ' vs ' + self.params['axis'] 
    144142         
    145143        if len(commonItems) > 0:  
     
    149147        plt.setTitle(title) 
    150148         
    151     def _getVariableName(self): 
     149    def _getVariableName(self, reader): 
    152150        """ 
    153151        Attempt to get the variable name from the dataVariables section of the 
     
    156154         
    157155        if 'dataVariables' in self.config: 
    158              
     156            log.debug("self.params['variable'] in self.config['dataVariables'] = %s" % (self.params['variable'] in self.config['dataVariables'],)) 
    159157            if self.params['variable'] in self.config['dataVariables']: 
    160                 return self.config['dataVariables'][self.params['variable']] 
     158                alias = self.config['dataVariables'][self.params['variable']] 
     159                 
     160                if alias.find('@') == 0: 
     161                    alias = reader.getVariableAttribute(self.params['variable'], alias[1:]) 
     162                 
     163                return alias 
    161164         
    162165        return self.params['variable'] 
     
    167170         
    168171        if variableUnits in [None, '']: 
    169             ylabel = self._getVariableName() 
     172            ylabel = self._getVariableName(reader) 
    170173        else: 
    171             ylabel = "%s [%s]" % (self._getVariableName(), variableUnits) 
     174            ylabel = "%s [%s]" % (self._getVariableName(reader), variableUnits) 
    172175         
    173176        plt.setYLabel(ylabel) 
  • qesdi/graphplotter/trunk/graphplotter/templates/buildplot.html

    r6448 r6464  
    103103                ${axSelect}: 
    104104                ${h.select('sel_' + axSelect, getattr(c, 'sel_' + axSelect), c.axisSelect[axSelect])} 
    105                  
     105                ${c.axisSelectUnits.get(axSelect, '')} 
    106106                <br /> 
    107107            </py:for> 
  • qesdi/graphplotter/trunk/graphplotter/tests/functional/test_buildplot.py

    r6448 r6464  
    117117            for v in axisValues[ax]: 
    118118                assert  '<option value="%s">%s</option>' % (v, v) in response, " option '%s' wasn't found in the response" % (v,) 
     119     
     120    @patch('graphplotter.controllers.buildplot.DataReader', spec=True) 
     121    @patch('graphplotter.controllers.buildplot.DFConfigReader', spec=True) 
     122    def test_005_dataVariablesAliasUsed(self, mockConfigReader, mockDataReader): 
     123         
     124        # check that the DataVariables aliases are used when selecting a variable 
     125        # from the file 
     126         
     127        dfConfig = {'path':'/path/to/file.nc', # path and axisLookup are used 
     128                    'axisLookup':{'a':'b'},    # to construct the data reader 
     129                     
     130                    # these setup the aliases for the variable names, if a variable 
     131                    # doesn't appear here then it should not appear in the response 
     132                    'dataVariables': {'red':'R', 
     133                                      'blue':'B', 
     134                                      'yellow':'@att'} 
     135                    } 
     136                     
     137        configFiles = ['alpha','beta','gamma','delta'] 
     138        variable = ['red', 'blue', 'green', 'yellow'] 
     139         
     140        mockDataReader().getVariableNames.return_value = variable 
     141        mockDataReader().getVariableAttribute.return_value = 'Y_att' 
     142        mockConfigReader().getDataFileList.return_value = configFiles 
     143        mockConfigReader().getConfig.return_value = dfConfig 
     144                 
     145        response = self.app.get(url(controller='buildplot', action='index'),  
     146                                {'datafile':'alpha',}) 
     147         
     148        print response.body 
     149         
     150        # check that the index values appear in the response 
     151        for variale, alias in [('red', 'R'), ('blue','B'),('yellow', 'Y_att')]: 
     152            assert  '<option value="%s">%s</option>' % (variale, alias) in response, " selection for '%s' with name '%s' wasn't found in the response" % (variale, alias) 
    119153             
     154        # 'green' doesn't appear in the dataVariables section and should be hidden 
     155        assert  '<option value="green">green</option>' not in response  
     156     
     157        assert mockDataReader().getVariableAttribute.called 
     158        assert mockDataReader().getVariableAttribute.call_args == (('yellow','att'), {}) 
     159         
     160     
  • qesdi/graphplotter/trunk/graphplotter/tests/unit/test_data_reader.py

    r6448 r6464  
    168168         
    169169        assert self.reader.getVariableUnits('var1') == mockVar.units 
    170          
    171     @patch('graphplotter.lib.data_reader.cdms', spec=True) 
    172     def test_006_getVariableUnits(self, mockCDMS): 
    173          
    174         mockFH = mockCDMS.open.return_value 
    175          
    176         mockVar = Mock() 
    177         mockVar.units = Mock() 
    178          
    179         def fhOpenVar(name): 
    180             if name == 'var1': 
    181                 return mockVar 
    182             elif name == 'axisB_var': 
    183                 return ['one','two','three'] 
    184             else: 
    185                 raise Exception("Unknown variable %s" % (name,)) 
    186              
    187         mockFH.side_effect = fhOpenVar 
    188          
    189         assert self.reader.getVariableUnits('var1') == mockVar.units 
    190  
    191     @patch('graphplotter.lib.data_reader.cdms', spec=True) 
    192     def test_006_getAxisUnits(self, mockCDMS): 
     170 
     171    @patch('graphplotter.lib.data_reader.cdms', spec=True) 
     172    def test_007_getAxisUnits(self, mockCDMS): 
    193173         
    194174        mockFH = mockCDMS.open.return_value 
     
    217197        assert mockVar.getAxis.called 
    218198        assert mockVar.getAxis.call_args == \ 
    219               ((mockVar.getAxisIndex.return_value,), {})         
     199              ((mockVar.getAxisIndex.return_value,), {}) 
     200               
     201    @patch('graphplotter.lib.data_reader.cdms', spec=True) 
     202    def test_008_getVariableAttribute(self, mockCDMS): 
     203         
     204        mockFH = mockCDMS.open.return_value 
     205         
     206        mockVar = Mock() 
     207                 
     208        def fhOpenVar(name): 
     209            if name == 'var1': 
     210                return mockVar 
     211            else: 
     212                raise Exception("Unknown variable %s" % (name,)) 
     213             
     214        mockFH.side_effect = fhOpenVar 
     215         
     216        assert self.reader.getVariableAttribute('var1', 'standard_name') == mockVar.standard_name 
     217                       
Note: See TracChangeset for help on using the changeset viewer.