Changeset 3915 for TI05-delivery


Ignore:
Timestamp:
22/05/08 11:21:31 (11 years ago)
Author:
domlowe
Message:

Added support to WMS for retrieving CSML docs from eXist

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/branches/ows_framework-refactor/ows_common/ows_common/service/imps/wms_csmllayer.py

    r3904 r3915  
    1414from matplotlib import cm 
    1515import genutil 
    16 from pylons import config  #config must have tmpfilebuffer and csmlstore values 
     16from pylons import config, request, session  #config must have tmpfilebuffer and csmlstore values 
    1717import cdtime 
    18  
    1918import logging 
    2019log = logging.getLogger(__name__) 
     20import ConfigParser 
     21 
     22try: 
     23    from ndgUtils import ndgObject, ndgRetrieve 
     24except: 
     25    log.warning("ndgUtils library could not be loaded, files in the eXist database won't be available, although you should still be able to access files from the csmlstore directory referenced in the ini file.") 
     26 
    2127 
    2228class CSMLLayerMapper(object): 
     
    5965            crss.append('WGS84') 
    6066        return title, abstract, dimensions, units, crss 
     67         
     68         
     69 
     70    def _get_csml_doc(self, fileoruri): 
     71        """ 
     72        Gets a csml document from file or exist when passed a file name or uri          
     73                
     74        Note, access control is not implemented on file access, only on exist access. 
     75         
     76        """ 
     77        if string.find(fileoruri,'__NDG-A0__') == -1: 
     78            #it's a local file not an identifier, read from local csmlstore 
     79            file=fileoruri 
     80            csml_dir = config['csmlstore'] 
     81            path = os.path.join(csml_dir, file) 
     82            if os.path.exists(path+'.csml'): 
     83                f = path+'.csml' 
     84            elif os.path.exists(path+'.xml'): 
     85                f = path +'.xml' 
     86            else: 
     87                raise ValueError("Cannot find CSML file %s" % file) 
     88             
     89            d = csml.parser.Dataset() 
     90            d.parse(f) 
     91         
     92        else: 
     93            #it's an NDG identifier, get the document from exist. 
     94            uri=fileoruri  
     95            uriN=ndgObject(uri) 
     96            conflocation=config['ndgconfig'] 
     97            cf=ConfigParser.ConfigParser() 
     98            cf.read(conflocation) 
     99            status,x=ndgRetrieve(uriN, cf, discovery=0) 
     100            d=csml.parser.Dataset() 
     101            d.parse(x)                          
     102        return d 
    61103     
    62104    def map(self, **kwargs): 
     
    75117            return self.layermapcache[fileoruri] 
    76118          
    77         #TODO - handle file paths/directories URIs in config 
    78         #.xml or .csml extensions are supported: 
    79         filename='%s/%s.csml'%(config['csmlstore'],fileoruri) 
    80         if not os.path.exists(filename): 
    81            filename='%s/%s.xml'%(config['csmlstore'],fileoruri) 
    82         if not os.path.exists(filename): 
    83             raise Exception(str('CSML File could not be found: %s')%filename) 
    84         ds=csml.parser.Dataset(filename) 
    85              
     119        ds = self._get_csml_doc(fileoruri) 
    86120        layermap={} 
    87121        self._crscat=csml.csmllibs.csmlcrs.CRSCatalogue() 
Note: See TracChangeset for help on using the changeset viewer.