Changeset 5849 for qesdi


Ignore:
Timestamp:
20/10/09 11:42:36 (10 years ago)
Author:
pnorton
Message:

Added some code to try and pass the axis config xml to the UI.

Also included a modified version of the beaker cache decorator that I've been using to cache the coastline map.

Location:
qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis
Files:
1 added
7 edited
1 copied
2 moved

Legend:

Unmodified
Added
Removed
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/config/routing.py

    r5689 r5849  
    2121 
    2222    map.connect(':fileoruri/wms', controller='csmlwms') 
    23     map.connect(':fileoruri/wms2', controller='csmlwms2') 
    24     map.connect(':fileoruri/wms3', controller='csmlwms3')     
     23    map.connect(':fileoruri/wms2', controller='csmlwms_csml_geoplot') 
     24    map.connect(':fileoruri/wms3', controller='csmlwms_csml')     
    2525     
    2626    map.connect('wcsroute', ':fileoruri/wcs', controller='csmlwcs') #wcsroute is a named route. 
     27    map.connect('wcsroute', ':fileoruri/wcs3', controller='csmlwcs') #wcsroute is a named route. 
    2728    map.connect(':fileoruri/wfs', controller='csmlwfs') 
    2829    #filestore - used for fetching files referenced by (csml) StorageDescriptors (WFS), and  'store' in wcs if implemented 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/controllers/coastwms.py

    r5773 r5849  
    178178            return dimName 
    179179         
    180     @beaker_cache(expire=600, query_args=True) 
     180    @beaker_cache() 
    181181    def GetMap(self):         
    182182        st = time.time() 
     
    269269        #log.debug("got coastline in %s" % (time.time() - st,)) 
    270270 
    271     @beaker_cache(expire=600, query_args=True) 
    272271    def GetContext(self): 
    273272        """ 
     
    317316            raise InvalidParameterValue('Format %s not supported' % format) 
    318317 
    319     @beaker_cache(expire=600, query_args=True) 
    320318    def GetDisplayOptions(self): 
    321319         
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/controllers/csmlwms.py

    r5773 r5849  
    1212 
    1313DRGeoplotWmsLayer.EnableDisplayOptions = True 
     14DRGeoplotWmsLayer.EnableXMLAxisConfig = True 
    1415 
    1516from wms_ddc_vis.lib.base import request, response 
     
    2021log = logging.getLogger(__name__) 
    2122 
    22 class Csmlwms3Controller(WMSController): 
     23class CsmlwmsController(WMSController): 
    2324    layerMapper = DRGeoplotLayerMapper() 
    2425     
    25     owsOperations = (WMSController.owsOperations + ['GetDisplayOptions','GetDisplayOptions2','GetFigure']) 
     26    owsOperations = (WMSController.owsOperations + ['GetDisplayOptions','GetAxisConfig','GetFigure']) 
    2627     
    2728    nonPILFormats = {'application/postscript':'ps', 
     
    5051        generator = SlabJSONGenerator(styleOptionsMap) 
    5152         
    52         request.headers['Content-Type'] = 'application/json' 
     53        response.headers['Content-Type'] = 'application/json' 
    5354         
    5455        jsonString = generator.generateJSON() 
    5556         
    5657        response.write( jsonString ) 
    57     
     58 
     59    def GetAxisConfig(self): 
     60        log.debug("self.layers = %s" % (self.layers,)) 
     61         
     62        layer = self._getLayerParam()[0] 
     63         
     64        log.debug("layer = %s" % (layer,)) 
     65         
     66        configFile = layer.getAxisConfigFile() 
     67        log.debug("configFile = %s" % (configFile,)) 
     68         
     69        fin = open(configFile,'r') 
     70        log.debug("fin = %s" % (fin,)) 
     71        response.headers['content-type'] = 'text/xml' 
     72         
     73        response.write(fin.read()) 
     74         
     75 
    5876#    @beaker_cache(expire=600, query_args=True) 
    5977    def GetFigure(self): 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/lib/modified_beaker_cache_decorator.py

    r5773 r5849  
    33 
    44@author: pnorton 
     5 
     6This is a modified version of the beaker_cache decorator found in pylons.decorators.cache, 
     7I've customised it to only use the GET parameters to generate the key and to round 
     8the BBOX arguments. 
    59''' 
    6 from pylons.decorators.cache import _make_key, _make_dict_from_args 
    710 
    811import inspect 
     
    1619log = logging.getLogger(__name__) 
    1720 
    18 def beaker_cache(key="cache_default", expire="never", type="dbm", 
    19     query_args=False, **b_kwargs): 
    20     """Cache decorator utilizing Beaker. Caches action or other function that 
    21     returns a pickle-able object as a result. 
    22  
    23     Optional arguments: 
    24  
    25     key 
    26         None - No variable key, uses function name as key 
    27         "cache_default" - Uses all function arguments as the key 
    28         string - Use kwargs[key] as key 
    29         list - Joins the arguments in the list 
    30     expire 
    31         Time in seconds before cache expires, defaults to never 
    32     type 
    33         Type of cache to use: dbm, memory, file, memcached 
    34     query_args 
    35         Uses the query arguments as the key, defaults to False 
    36  
    37     If cache_enabled is set to False in the .ini file, then cache is disabled 
    38     globally. 
    39     """ 
     21def beaker_cache(type='dbm', expire='never'): 
     22     
    4023    def wrapper(func, *args, **kwargs): 
    4124        """Decorator wrapper""" 
     
    4730            return func(*args, **kwargs) 
    4831         
    49          
    50         commonArgs = {'LAYERS': u'coastline', 'STYLES': u'', 'WIDTH': u'320', 'SERVICE': u'WMS', 'FORMAT': u'image/png', 'CRS': u'CRS:84', 'REQUEST': u'GetMap', 'HEIGHT': u'320', 'SRS': u'EPSG:4326', 'VERSION': u'1.3.0', 'EXCEPTIONS': u'application/vnd.ogc.se_inimage', 'TRANSPARENT': u'true'} 
    51         commonMatch = True 
    52         params = dict(pylons.request.GET) 
    53         for k1,v1 in commonArgs.items(): 
    54             if k1 not in params or params[k1] != v1: 
    55                 commonMatch = False 
    56              
    5732        my_cache = pylons.cache.get_cache('%s.%s' % (func.__module__, func.__name__), type=type) 
    58         cache_key = _make_key(func, key, args, kwargs, query_args) 
    59         if commonMatch: 
    60             pass 
    61         else: 
    62             log.debug("Cache request with key: %s" % (cache_key,)) 
     33        cache_key = _make_key() 
    6334         
    6435        if expire == "never": 
     
    6738            cache_expire = expire 
    6839         
    69          
    7040        def create_func(): 
    71             if commonMatch: 
    72                 log.debug("Generating Data: BBOX = %s" % (params['BBOX'],)) 
    73             else: 
    74                 log.debug("Generating Data") 
    75             #log.debug("Creating new cache copy with key: %s, type: %s", 
    76             #          cache_key, type) 
     41            log.debug("generating !") 
    7742            result = func(*args, **kwargs) 
     43             
    7844            glob_response = pylons.response._current_obj() 
     45             
    7946            full_response = dict(headers=glob_response.headers, 
    8047                                 status=glob_response.status_code, 
     
    8249                                 r_content=glob_response.content, 
    8350                                 content=result) 
     51             
    8452            return full_response 
    8553         
    8654        response = my_cache.get_value(cache_key, createfunc=create_func,  
    87                                       expiretime=cache_expire, **b_kwargs) 
    88          
     55                                      expiretime=cache_expire,) 
     56 
     57        log.debug("Cached response with key: %s" % (cache_key,)) 
     58             
    8959        glob_response = pylons.response._current_obj() 
    9060        glob_response.headers = response['headers'] 
     
    9363        glob_response.content = response['r_content'] 
    9464        return response['content'] 
     65     
    9566    return decorator(wrapper) 
     67 
     68def _make_key(): 
     69    """Helps make unique key from largs, kwargs and request.GET""" 
     70          
     71    dic = {} 
     72         
     73    for k,v in pylons.request.GET.items(): 
     74        if k.lower() == 'bbox': 
     75            try: 
     76                floatValues = tuple([float(x) for x in v.split(',') ]) 
     77                fmtString = "%.5f,"*4 
     78                fmtString = fmtString[:-1] 
     79                newValues = fmtString % floatValues 
     80                dic[k] = newValues 
     81            except Exception, e: 
     82                log.info("Exception occurred trying to re-format %s=%s: %s" % (k,v,e) ) 
     83            break; 
     84        else: 
     85            dic[k] = str(v) 
     86 
     87    cache_key = repr(dic) 
     88    return cache_key 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/tests/functional/test_catalogue.py

    r5403 r5849  
     1 
     2__test__ = False 
     3 
    14from wms_ddc_vis.tests import * 
    25 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/tests/functional/test_csmlwcs.py

    r5403 r5849  
     1__test__ = False 
    12from wms_ddc_vis.tests import * 
    23 
    3 class TestCsmlwcsController(TestController): 
     4class TestCoastwmsController(TestController): 
    45 
    56    def test_index(self): 
    6         response = self.app.get(url_for(controller='csmlwcs')) 
     7        response = self.app.get(url_for(controller='coastwms')) 
    78        # Test response... 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/tests/functional/test_csmlwfs.py

    r5403 r5849  
     1__test__ = False 
    12from wms_ddc_vis.tests import * 
    23 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/tests/functional/test_demon.py

    r5403 r5849  
     1__test__ = False 
    12from wms_ddc_vis.tests import * 
    23 
Note: See TracChangeset for help on using the changeset viewer.