Ignore:
Timestamp:
08/02/10 08:58:04 (11 years ago)
Author:
pnorton
Message:

Improved the getfigure code so that more of the display options are used to generate the figure.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cowsserver/trunk/lib/cowsserver/controllers/csmlwms.py

    r6395 r6506  
    22import time 
    33 
    4 from geoplot.plot_lat_lon import PlotLatLon  
     4from geoplot.grid_plot import GridPlot  
    55from geoplot.contour_plot import ContourPlot 
    66from geoplot.interval_plot import IntervalPlot 
     
    1313from cows.service.imps.geoplot_wms_backend.geoplot_wms_layer import GeoplotWmsLayer 
    1414from cows.service.imps.geoplot_wms_backend.slab_options_json_generator import SlabJSONGenerator 
     15from cows.service.imps.geoplot_wms_backend.slab_options_parser import SlabOptionsParser 
    1516 
    1617GeoplotWmsLayer.EnableDisplayOptions = True 
     
    2021from cowsserver.lib.wms_request_log_utils import buildLogString, wms_request_logger 
    2122 
    22 from cowsserver.lib.modified_beaker_cache_decorator import beaker_cache 
     23from cowsserver.lib.modified_beaker_cache_decorator import cows_controller_beaker_cache 
     24 
     25from pylons.decorators.cache import beaker_cache 
    2326 
    2427log = logging.getLogger(__name__) 
     
    4245        WMSController.__before__(self, **kwargs) 
    4346         
    44 #    @beaker_cache(expire=600, query_args=True) 
     47    @cows_controller_beaker_cache(expire=3600) 
    4548    def GetDisplayOptions(self): 
     49        log.info("running GetDisplayOptions") 
    4650         
    4751        #create a list of names for each of the styles (each slabClass has its onw style) 
     
    5963         
    6064        response.write( jsonString ) 
    61  
     65     
     66    @cows_controller_beaker_cache(expire=3600) 
    6267    def GetAxisConfig(self): 
     68        log.info("running GetAxisConfig") 
    6369        log.debug("self.layers = %s" % (self.layers,)) 
    6470         
     
    7682        response.write(fin.read()) 
    7783         
    78  
    79 #    @beaker_cache(expire=600, query_args=True) 
     84    @cows_controller_beaker_cache(expire=3600) 
    8085    def GetFigure(self): 
    81         log.debug("entering GetFigure") 
     86        log.info("running GetFigure") 
     87         
    8288        #!TODO: clearup! 
    8389        # Get the parameters 
     90         
    8491        version      = self._getVersionParam() 
    8592        format = self.getOwsParam('format', default='image/png') 
     
    103110         
    104111        styles       = self._getStylesParam(len(layerObjects)) 
     112         
     113        if styles == "": 
     114            style = None 
     115        else: 
     116            style = styles[0] 
     117         
     118        slab_class = layerObj._getSlabClass(style) 
     119         
    105120        srs          = self._getSrsParam(version) 
    106121         
     122        log.info("GetFigure: format=%s, transparent =%s, bgcolor =%s, bbox =%s, width =%s, height =%s, style =%s, srs = %s" % (format, transparent, bgcolor, bbox, width, height, style, srs,)) 
     123        log.debug("slab_class = %s" % (slab_class,)) 
     124         
    107125        dimValues = self._getDimValues(layerObj) 
    108          
    109126         
    110127        log.debug("dimValues = %s" % (dimValues,)) 
    111128        variable = layerObj.dataReader.getNetcdfVar(layerObj.title, dimValues) 
    112129         
    113                              
    114         params = self._getLowerCaseParams() 
    115          
     130         
     131        expectedParams = [] 
     132        expectedParams.extend(self._escapedDimNames) 
     133        expectedParams.extend(layerObj.dimensions.keys()) 
     134        expectedParams.append('service') 
     135         
     136        #get any other parameters on the request that the layer might need 
     137        additionalParams = self._getAdditionalParameters(expectedParams) 
     138         
     139        parser = SlabOptionsParser(slab_class.renderingOptions, additionalParams) 
     140         
     141        log.debug("additionalParams = %s" % (additionalParams,))         
    116142        log.debug("variable.shape = %s" % (variable.shape,)) 
    117143        log.debug("bbox = %s" % (bbox,)) 
     
    129155        kwargs['width'] = width 
    130156        kwargs['height'] = height 
    131  
    132         if 'cmap' in params: 
    133             kwargs['cmap']= params['cmap'] 
    134          
    135         if 'intervalcolourbar' in params: 
    136             kwargs['intervalColourbar'] = params['intervalcolourbar'].lower() == 'true' 
    137          
    138         if 'intervalnames' in params: 
    139             kwargs['intervalNames'] = params['intervalnames'].split(',') 
    140              
    141         if 'num_intervals' in params: 
    142             kwargs['numIntervals'] = int(params['num_intervals']) 
    143          
    144         if 'cmap_max' in params: 
    145             kwargs['colourBarMax'] = float(params['cmap_max']) 
    146         else: 
    147             kwargs['colourBarMax'] = variable[:].max() 
    148  
    149         if 'cmap_min' in params: 
    150             kwargs['colourBarMin'] = float(params['cmap_min']) 
    151         else: 
    152             kwargs['colourBarMin'] = variable[:].min()         
    153          
    154         log.info("kwargs = %s" % (kwargs,)) 
    155          
    156         if styles == "" or styles[0] == 'grid': 
    157              
    158             if 'show_grid_lines' in params: 
    159                 kwargs['showGridLines'] = params['show_grid_lines'].lower() == 'true' 
    160                  
    161             plt = PlotLatLon(variable, **kwargs) 
    162  
    163         elif styles[0] == 'contour': 
    164              
    165             if 'num_contour_lines' in params: 
    166                 kwargs['numContourLines'] = int(params['num_contour_lines']) 
    167          
    168             if 'contour_label_interval' in params: 
    169                 kwargs['contourLabelInterval'] = int(params['contour_label_interval']) 
    170                  
    171             log.debug("kwargs = %s" % (kwargs,)) 
    172             plt = ContourPlot(cdmsVar=variable, **kwargs) 
    173          
    174         elif styles[0] == 'interval': 
    175              
    176             plt = IntervalPlot(cdmsVar=variable, **kwargs) 
    177          
     157         
     158        #common rendering options 
     159         
     160        argMap = {'cmap':'cmap', 
     161                  'cmap_scale':'colourBarScale', 
     162                  'cmap_min':'colourBarMin', 
     163                  'cmap_max':'colourBarMax'} 
     164 
     165        if style is None or style == 'grid': 
     166            plot_class = GridPlot 
     167            argMap.update({'show_grid_lines':'showGridLines', 
     168                      'hide_outside':'hideOutsideBounds',}) 
     169 
     170        elif style == 'contour': 
     171            plot_class = ContourPlot 
     172            argMap.update({'num_contour_lines':'numContourLines', 
     173                      'contour_label_interval':'contourLabelInterval', 
     174                      'contour_font_size':'contourFontSize', 
     175                      'intervals':'intervals'}) 
     176             
     177        elif style == 'interval': 
     178            plot_class = IntervalPlot 
     179            argMap.update({ 
     180                      'hide_outside':'hideOutsideBounds', 
     181                      'show_grid_lines':'showGridLines', 
     182                      'num_intervals': 'numIntervals', 
     183                      'intervalNames': 'intervalNames', 
     184                      'intervals':'intervals'}) 
     185             
    178186        else: 
    179187            raise Exception("unknown style %s" % (styles[0],)) 
    180   
     188         
     189        # set the defaults for the min and max colourmap 
     190        kwargs['colourBarMax'] = parser.getOption('cmap_max') 
     191        if kwargs['colourBarMax'] is None: 
     192            kwargs['colourBarMax'] = variable[:].max() 
     193 
     194        kwargs['colourBarMin'] = parser.getOption('cmap_min') 
     195        if kwargs['colourBarMin'] is None: 
     196            kwargs['colourBarMin'] = variable[:].min()         
     197 
     198         
     199 
     200        self._addArguments(kwargs, argMap, parser, slab_class) 
     201        log.debug("kwargs = %s" % (kwargs,)) 
     202        kwargs['cdmsVar'] = variable 
     203        plt = plot_class(**kwargs) 
     204 
     205        log.info("format = %s" % (format, )) 
    181206        if format in self.nonPILFormats.keys(): 
    182207            plt.format = self.nonPILFormats[format] 
     
    188213             
    189214            img = plt.drawToImage() 
    190              
    191             log.debug("img.format = %s" % (img.format,)) 
    192              
    193             log.debug("variable.getAxisIds() = %s" % (variable.getAxisIds(),)) 
    194              
    195215            self._writeImageResponse(img, format) 
    196          
    197         log.debug("dir(response) = %s" % (dir(response),)) 
    198         log.debug("id(response) = %s" % (id(response),)) 
    199          
     216                 
    200217        log.debug("finished getFigure") 
    201          
    202 #    @beaker_cache(expire=600, query_args=True) 
     218     
     219    def _addArguments(self, kwargs, argMap, parser, slab_class): 
     220         
     221        for renderingOpt in slab_class.renderingOptions: 
     222            if renderingOpt.name not in argMap: 
     223                log.warning("GetFigure has now means of passing on argument %s = %s to plot" % (renderingOpt.name, parser.getOption(renderingOpt.name))) 
     224         
     225        for parameterArgName, plotArgName in argMap.items(): 
     226            kwargs[plotArgName] = parser.getOption(parameterArgName) 
     227             
     228             
     229     
     230    @cows_controller_beaker_cache(expire=3600) 
    203231    def GetLegend(self): 
     232        log.info("running GetLegend") 
    204233        return WMSController.GetLegend(self) 
    205234     
    206 #    @beaker_cache(expire=600, query_args=True) 
     235    @cows_controller_beaker_cache(expire=3600) 
    207236    def GetCapabilities(self): 
     237        log.info("running GetCapabilities") 
    208238        return WMSController.GetCapabilities(self) 
    209239         
     
    225255        return lowerDictionary 
    226256 
    227  
     257    @cows_controller_beaker_cache(expire=3600) 
    228258    def GetMap(self): 
     259        log.info("running GetMap") 
    229260        st = time.time() 
    230261        WMSController.GetMap(self) 
Note: See TracChangeset for help on using the changeset viewer.