Changeset 6422


Ignore:
Timestamp:
27/01/10 16:27:53 (10 years ago)
Author:
domlowe
Message:

Added getCSMLDatasetInfo method to csml connector - used to quickly get csml info without parsing entire file.

Location:
cows/trunk/cows
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cows/trunk/cows/pylons/config.py

    r6384 r6422  
    8585                            if config.has_key('send_symlink_warnings_from'): 
    8686                                if config.has_key('symlink_warnings_smtp'): 
    87                                     to=[config['send_symlink_warnings_to']] 
     87                                    to=config['send_symlink_warnings_to'].split(',') 
    8888                                    fro=config['send_symlink_warnings_from'] 
    8989                                    smtp=config['symlink_warnings_smtp'] 
  • cows/trunk/cows/service/imps/csmlbackend/csmlcommon.py

    r6398 r6422  
    2828 
    2929from cows.service.wxs_iface import ILayerMapper 
     30 
     31try: #for python 2.5 
     32    from xml.etree import cElementTree as ET 
     33except ImportError: 
     34    try: 
     35        # if you've installed it yourself it comes this way 
     36        import cElementTree as ET 
     37    except ImportError: 
     38        # if you've egged it this is the way it comes 
     39        from celementtree import cElementTree as ET 
     40 
     41 
     42 
     43 
     44 
    3045 
    3146def extractToNetCDF(feature, sel, publish=False): 
     
    94109        self.csml_dir = config.get('csmlstore') 
    95110     
    96     def getCsmlDoc(self, fileoruri): 
    97         """ 
    98         Gets a csml document from file or exist when passed a file name or uri 
    99  
    100         Note, access control is not implemented on file access, only on exist 
    101         access. 
    102          
    103         """ 
     111    def _locateFile(self, fileoruri): 
     112        ''' gets the csml file from Exist or the csml filestore'''  
    104113        if string.find(fileoruri,'__NDG-A0__') == -1: 
    105114            #it's a local file not an identifier, read from local csmlstore 
     
    111120                f = path +'.xml' 
    112121            else: 
    113                 raise ValueError("Cannot find CSML file %s" % file) 
    114              
    115             d = csml.parser.Dataset() 
    116             d.parse(f) 
    117          
     122                raise ValueError("Cannot find CSML file %s" % file)         
    118123        else: 
    119124            #it's an NDG identifier, get the document from exist. 
     
    123128            cf=ConfigParser.ConfigParser() 
    124129            cf.read(conflocation) 
    125             status,x=ndgRetrieve(uriN, cf, discovery=0) 
    126             d=csml.parser.Dataset() 
    127             d.parse(x) 
    128                         
     130            status,f=ndgRetrieve(uriN, cf, discovery=0) 
     131        return f 
     132     
     133    def getCSMLDatasetInfo(self,fileoruri): 
     134        """ lightweight method that gets a CSML document, but only returns certain attributes that can easily be extracted using xpath 
     135        This allows you to quickly get some key metadata without parsing the whole document. 
     136        Returns a dictionary of attribute:value pairs. First version only returns dataset name""" 
     137        datasetInfo={} 
     138        f=self._locateFile(fileoruri) 
     139        tree=ET.parse(f) #parse usign cElementTree 
     140        nameelem=tree.find('{http://ndg.nerc.ac.uk/csml}name') 
     141        #skip if name is not there or has one of the default entries 
     142        if nameelem is not None: 
     143            if nameelem.text in ['NAME OF DATASET GOES HERE', 'Please add a human readable name for the dataset here']: 
     144                pass 
     145            else: 
     146                datasetInfo['name']=nameelem.text 
     147        return datasetInfo 
     148     
     149    def getCsmlDoc(self, fileoruri): 
     150        """ 
     151        Gets a csml document from file or exist when passed a file name or uri 
     152 
     153        Note, access control is not implemented on file access, only on exist 
     154        access. 
     155         
     156        """ 
     157        f=self._locateFile(fileoruri) 
     158        d=csml.parser.Dataset() 
     159        d.parse(f)                       
    129160        return d 
    130161     
Note: See TracChangeset for help on using the changeset viewer.