00001
00002
00003
00004
00005
00006
00007
00008 class FileDescription:
00009 """Class to handle filename parsing"""
00010 def __init__(self, fileName=None):
00011 """Construct using filename string"""
00012 self.dirSep = '/'
00013 self.fileSep = '.'
00014 self.seqStrip = '_'
00015 self.clear()
00016 if fileName!=None:
00017 self.setByFileName( fileName )
00018 return
00019
00020 def clear(self):
00021 """Clear/initialize file descriptor"""
00022 self.path = None
00023 self.process = None
00024 self.tag = None
00025 self.runNumber = None
00026 self.streamType = None
00027 self.streamName = None
00028 self.appName = None
00029 self.sequence = None
00030 self.fileType = None
00031 self.isValid = False
00032 return
00033
00034 def setByFileName(self, fileName):
00035 """Parse filename to initialise file descriptor"""
00036 self.clear()
00037 fname = fileName.strip()
00038 sepLocation = fname.rfind(self.dirSep)
00039 path = None
00040 if sepLocation >= 0:
00041 path = fname[:sepLocation]
00042 fname = fname[sepLocation+1:]
00043 fileParts = fname.split(self.fileSep)
00044 if len(fileParts) != 8:
00045 print "Error: Incorrect filename structure: '%s'" % fname
00046 return
00047 runString = fileParts[2]
00048 if not runString.isdigit():
00049 print "Error: Incorrect run number: '%s'" % runString
00050 return
00051 seqString = fileParts[6].strip(self.seqStrip)
00052 if not seqString.isdigit():
00053 print "Error: Incorrect sequence number: '%s'" % seqString
00054 return
00055 self.set(path, fileParts[0], fileParts[1], int(runString),
00056 fileParts[3], fileParts[4], fileParts[5], int(seqString),
00057 fileParts[7])
00058
00059 def set(self, path, process, tag, runNumber, streamType, streamName,
00060 appName, sequence, fileType):
00061 """Set file descriptor"""
00062 self.path = path
00063 self.process = process
00064 self.tag = tag
00065 self.runNumber = runNumber
00066 self.streamType = streamType
00067 self.streamName = streamName
00068 self.appName = appName
00069 self.sequence = sequence
00070 self.fileType = fileType
00071 self.isValid = True
00072 if self.streamType=="AllStreams":
00073 self.isValid = False
00074 return
00075