source: TI02-CSML/trunk/csml/csmllibs/csmldirectory.py @ 1668

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/csml/csmllibs/csmldirectory.py@2243
Revision 1668, 3.7 KB checked in by domlowe, 13 years ago (diff)

make nappy package non-compulsory

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#!/usr/bin/env python
2import os,sys
3try:
4    import nappy 
5except ImportError:
6    sys.stdout.write('Could not import NASAAmes interface')
7import sys
8import string
9
10
11class DirectoryTree(object):
12       
13        def __init__(self):
14                self.subdirlist=[]
15               
16        def setTopDirectory(self,top):
17                self.topdir=top
18
19        def readSubDir(self, subdir):   
20                for item in os.listdir(subdir):
21                        #print os.path.join(subdir, item)
22                        if os.path.isfile(os.path.join(subdir,item)):
23                                #print 'file: '+ item
24                                pass
25                        else:
26                            if item[0]=='.':
27                                pass # directory is hidden, ignore
28                            else:
29                                self.subdirlist.append(os.path.join(subdir, item))
30                                self.readSubDir(os.path.join(subdir, item))
31                #subdircount=len(self.subdirlist)
32                #print subdircount
33
34               
35        def readDirectory(self):
36                self.subdirlist.append(self.topdir)
37                for item in os.listdir(self.topdir):
38                        if os.path.isfile(os.path.join(self.topdir,item)):
39                                pass
40                        else:
41                            if item[0]=='.':
42                                pass # directory is hidden, ignore
43                            else:
44                                self.subdirlist.append(os.path.join(self.topdir, item))
45                                self.readSubDir(os.path.join(self.topdir, item))                                       
46               
47                print "total"
48                counter = len(self.subdirlist) 
49                print counter
50       
51
52        def getSubDirectories(self):
53                sublist = self.subdirlist
54                #note the first (0) entry in the sub directory list is
55                #actually the top level directory
56                return sublist
57       
58        def getFilesInSubDir(self,sub):
59                filelist=[]
60                for item in os.listdir(sub):
61                        if os.path.isfile(os.path.join(sub,item)):
62                                filelist.append(os.path.join(sub,item))
63                return filelist
64                       
65        def getFirstInSubDir(self,sub):
66                for item in os.listdir(sub):
67                        filename=os.path.join(sub,item)
68                        if os.path.isfile(filename):
69                                if isCSMLSupported(filename):
70                                        return filename
71               
72                                       
73        def getCSMLSupportedFilesInSubDir(self,sub):
74                filelist=[]
75                for item in os.listdir(sub):
76                        filename=os.path.join(sub,item)
77                        if os.path.isfile(filename):
78                                if isCSMLSupported(filename):
79                                        filelist.append(filename)
80                return filelist
81       
82        def getAllCSMLFilesExceptFirst(self,sub):
83                filelist=self.getCSMLSupportedFilesInSubDir(sub)
84                filelist=filelist[1:]
85                return filelist
86       
87        def getAllCSMLSupportedFiles(self):
88                filelist=[]
89                for subdir in self.subdirlist:
90                        for item in os.listdir(subdir):
91                                itempath=os.path.join(subdir,item)
92                                if os.path.isfile(itempath):
93                                        if isCSMLSupported(itempath):
94                                                filelist.append(itempath)
95                                else:
96                                        pass
97                return filelist
98               
99                       
100                       
101                       
102#function to find if file is of a supported CSML type.                   
103def isCSMLSupported(filename):
104        fileExtension = str(filename)[-3:]
105        supported = False
106       
107        try:
108            if fileExtension == '.nc':
109                    supported = True
110            elif fileExtension == '.pp':
111                    supported = True
112            elif fileExtension == 'ctl':
113                    supported = True
114            elif fileExtension == 'xml':
115            #this could be a CDML file. Only way to see is to open it.
116                f=open(filename, 'r')
117                f.readline() #read first line, now read docstring on second line
118                line2=f.readline()
119                if string.find(line2,'http://www-pcmdi.llnl.gov/software/cdms/cdml.dtd') > -1:
120                    supported = True
121                    f.close()
122            elif nappy.readFFI(filename) in [1001,1010,1020,2010,2110,2160,2310,3010,4010]:
123                    supported = True
124        except:
125                #the nappy.readFFI function can fail if permissions are wrong (for example)
126                supported=False
127        return supported
128                               
129                               
Note: See TracBrowser for help on using the repository browser.