Changeset 3283 for TI02-CSML


Ignore:
Timestamp:
29/01/08 14:19:12 (11 years ago)
Author:
domlowe
Message:

VirtualDirectoryTree added to enable arbitrary collections of files to be scanned

Location:
TI02-CSML/trunk/csml
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/csml/csmllibs/csmlbuilder.py

    r3282 r3283  
    2121        @param secallow:    security information   
    2222        @param secdeny:    security information 
    23          
    2423        ''' 
    2524         
     
    2827        else: 
    2928            self.datasetid =csml.csmllibs.csmlextra.getRandomID() 
    30         self.directory = directory # top level directory containing data files  
    31         self.selection=selection 
     29        if not directory: 
     30            self.selection=selection.split() 
     31            self.directory=self.selection[0] 
     32        else: 
     33            self.directory = directory # top level directory containing data files  
     34            self.selection=None 
     35        self.selection 
    3236        self.csmlfeaturetype  = csmlft  
    3337        self.mapping = mapping  
     
    4549          
    4650    def build(self): 
    47         ''' Wrapper method to call methods in correct order. Controls the scannign process''' 
     51        ''' Wrapper method to call methods in correct order. Controls the scanning process''' 
    4852        self.createDataset() 
    4953        try: 
  • TI02-CSML/trunk/csml/csmllibs/csmldirectory.py

    r3282 r3283  
    5454 
    5555        def getSubDirectories(self): 
    56                 ''' get subdirectories in the file''' 
    57                 sublist = self.subdirlist 
    58                 #note the first (0) entry in the sub directory list is  
    59                 #actually the top level directory 
    60                 return sublist 
     56                ''' get subdirectories in the file - note the first (0) entry in the sub directory list is  
     57                actually the top level directory''' 
     58                return self.subdirlist 
    6159         
    6260        def getFilesInSubDir(self,sub): 
     
    7371                        filename=os.path.join(sub,item) 
    7472                        if os.path.isfile(filename): 
    75                                 if isCSMLSupported(filename): 
     73                                if self._isCSMLSupported(filename): 
    7674                                        return filename 
    7775                 
     
    8381                        filename=os.path.join(sub,item) 
    8482                        if os.path.isfile(filename): 
    85                                 if isCSMLSupported(filename): 
     83                                if self._isCSMLSupported(filename): 
    8684                                        filelist.append(filename) 
    8785                return filelist 
     
    10098                                itempath=os.path.join(subdir,item) 
    10199                                if os.path.isfile(itempath): 
    102                                         if isCSMLSupported(itempath): 
     100                                        if self._isCSMLSupported(itempath): 
    103101                                                filelist.append(itempath) 
    104102                                else: 
    105103                                        pass 
    106104                return filelist 
    107                  
     105                                         
     106        def _isCSMLSupported(self,filename): 
     107            '''function to find if file is of a supported CSML type.''' 
     108            fileExtension = str(filename)[-3:] 
     109            supported = False 
     110             
     111            try: 
     112                if fileExtension == '.nc': 
     113                        supported = True 
     114                elif fileExtension == '.pp': 
     115                        supported = True 
     116                elif fileExtension == 'ctl': 
     117                        supported = True 
     118                elif fileExtension == 'xml': 
     119                #this could be a CDML file. Only way to see is to open it. 
     120                    f=open(filename, 'r') 
     121                    f.readline() #read first line, now read docstring on second line 
     122                    line2=f.readline() 
     123                    if string.find(line2,'http://www-pcmdi.llnl.gov/software/cdms/cdml.dtd') > -1: 
     124                        supported = True 
     125                        f.close() 
     126                elif nappy.readFFI(filename) in [1001,1010,1020,2010,2110,2160,2310,3010,4010]: 
     127                        supported = True 
     128            except: 
     129                    #the nappy.readFFI function can fail if permissions are wrong (for example) 
     130                    supported=False 
     131            return supported 
    108132                         
    109 #class VirtualDirectoryTree(object): 
    110     #'''  TODO:Given a list of files this class has the same interface as a DirectoryTree'''                     
    111                          
    112                   
    113 def isCSMLSupported(filename): 
    114         '''function to find if file is of a supported CSML type.''' 
    115         fileExtension = str(filename)[-3:] 
    116         supported = False 
    117          
    118         try: 
    119             if fileExtension == '.nc': 
    120                     supported = True 
    121             elif fileExtension == '.pp': 
    122                     supported = True 
    123             elif fileExtension == 'ctl': 
    124                     supported = True 
    125             elif fileExtension == 'xml': 
    126             #this could be a CDML file. Only way to see is to open it. 
    127                 f=open(filename, 'r') 
    128                 f.readline() #read first line, now read docstring on second line 
    129                 line2=f.readline() 
    130                 if string.find(line2,'http://www-pcmdi.llnl.gov/software/cdms/cdml.dtd') > -1: 
    131                     supported = True 
    132                     f.close() 
    133             elif nappy.readFFI(filename) in [1001,1010,1020,2010,2110,2160,2310,3010,4010]: 
    134                     supported = True 
    135         except: 
    136                 #the nappy.readFFI function can fail if permissions are wrong (for example) 
    137                 supported=False 
    138         return supported 
    139                                  
    140                                  
     133class VirtualDirectoryTree(DirectoryTree): 
     134    '''  Given a list of file paths this class creates a tree that has the same interfaces as a DirectoryTree. It allows arbitrary collections of CSML files to be scanned. It behaves as if the files are all in a single directory with no subdirectories.'''  
     135    def __init__(self, filelist): 
     136        ''' sets the topdir attribute and reads the directory''' 
     137        self.subdirlist=['virtualdirectorytree'] 
     138        self.filelist=filelist 
     139 
     140    def readSubDir(self, subdir):        
     141        pass 
     142             
     143    def _readDirectory(self): 
     144        pass 
     145     
     146    def getFilesInSubDir(self,sub): 
     147            ''' get files in a sub directory - there is only one directory so always returns the filelist''' 
     148            return self.filelist 
     149                     
     150    def getFirstInSubDir(self,sub): 
     151            ''' get first file in a sub directory''' 
     152            return self.filelist[0] 
     153                                     
     154    def getCSMLSupportedFilesInSubDir(self,sub): 
     155            ''' get files in sub directory that can be read for CSML content''' 
     156            validatedfiles=[] 
     157            for file in self.filelist: 
     158                if self._isCSMLSupported(file): 
     159                    validatedfiles.append(file) 
     160            return validatedfiles 
     161     
     162    def getAllCSMLFilesExceptFirst(self,sub): 
     163            ''' get all the files that can be read for CSML content except the first one''' 
     164            filelist=self.filelist[1:] 
     165            return filelist 
     166     
     167    def getAllCSMLSupportedFiles(self): 
     168            ''' get all the files that can be read for CSML content''' 
     169            return self.getCSMLSupportedFilesInSubDir('virtualdirectorytree') 
  • TI02-CSML/trunk/csml/csmlscan.py

    r3282 r3283  
    142142        SPATIALSTORAGE=config.getConfigNoError('spatialaxes','spatialstorage') 
    143143        SEC_ALLOW=config.getConfigNoError('security', 'allow') 
    144         print SEC_ALLOW 
    145144        SEC_DENY=config.getConfigNoError('security', 'deny') 
    146         print SEC_DENY 
    147145         
    148146        if configTest==True: 
  • TI02-CSML/trunk/csml/testfiles/gridseries/testGSconfig.cfg

    r2901 r3283  
    1010mapping: onetomany 
    1111output: /home/dom/svn/trunk/csml/testfiles/gridseries/testout.xml 
    12 printscreen:1 
     12printscreen:0 
    1313 
    1414[spatialaxes] 
Note: See TracChangeset for help on using the changeset viewer.