3 __version__ =
"$Revision: 1.12 $"
10 defaultEOSRootPath =
'/eos/cms/store/lhe'
11 defaultEOSLoadPath =
'root://eoscms/'
12 defaultEOSlistCommand =
'xrd eoscms dirlist '
13 defaultEOSmkdirCommand =
'xrd eoscms mkdir '
14 defaultEOSfeCommand =
'xrd eoscms existfile '
15 defaultEOScpCommand =
'xrdcp -np '
19 elements = theDirRecord.split(
' ')
21 return elements[-1].rstrip(
'\n').
split(
'/')[-1]
28 theCommand = defaultEOSlistCommand+
' '+defaultEOSRootPath
29 dirList = subprocess.Popen([
"/bin/sh",
"-c",theCommand], stdout=subprocess.PIPE)
30 for line
in dirList.stdout.readlines():
40 theCommand = defaultEOSlistCommand+
' '+defaultEOSRootPath
41 dirList = subprocess.Popen([
"/bin/sh",
"-c",theCommand], stdout=subprocess.PIPE)
42 for line
in dirList.stdout.readlines():
44 if line.rstrip(
'\n') !=
'':
57 realFileName = f.split(
'/')[-1]
59 newFileName = uploadPath+
'/'+str(realFileName)
62 theCommand = defaultEOSfeCommand+
' '+newFileName
63 exeFullList = subprocess.Popen([
"/bin/sh",
"-c",theCommand], stdout=subprocess.PIPE)
64 result = exeFullList.stdout.readlines()
65 if result[0].rstrip(
'\n') ==
'The file exists.':
67 print 'File '+newFileName+
' already exists: do you want to overwrite? [y/n]'
69 if reply ==
'y' or reply ==
'Y':
71 additionalOption =
' -f '
73 print 'Overwriting file '+newFileName+
'\n'
76 print 'Adding file '+str(f)+
'\n'
77 inUploadScript += defaultEOScpCommand+additionalOption+
' '+str(f)+
' '+defaultEOSLoadPath+uploadPath+
'/'+str(realFileName)+
'\n'
81 print '\n Launching upload script \n'+inUploadScript+
'\n at '+time.asctime(time.localtime(time.time()))+
' ...\n'
83 exeRealUpload = subprocess.Popen([
"/bin/sh",
"-c",inUploadScript])
84 exeRealUpload.communicate()
85 print '\n Upload ended at '+time.asctime(time.localtime(time.time()))
89 if __name__ ==
'__main__':
94 usage=
'cmsLHEtoEOSManager.py <options>'
95 parser = optparse.OptionParser(usage)
96 parser.add_option(
'-f',
'--file',
97 help=
'LHE local file list to be uploaded, separated by ","' ,
101 parser.add_option(
'-n',
'--new',
102 help=
'Create a new article' ,
107 parser.add_option(
'-u',
'--update',
108 help=
'Update the article <Id>' ,
112 parser.add_option(
'-l',
'--list',
113 help=
'List the files in article <Id>' ,
117 parser.add_option(
'-d',
'--dry-run',
118 help=
'dry run, it does nothing, but you can see what it would do',
123 parser.add_option(
'-c',
'--compress',
124 help=
'compress the local .lhe file with xz before upload',
129 (options,args) = parser.parse_args()
134 print 'cmsLHEtoEOSmanager '+__version__[1:-1]
136 print 'Running on ',time.asctime(time.localtime(time.time()))
139 reallyDoIt =
not options.dryRun
142 if not options.newId
and options.artIdUp==0
and options.artIdLi==0:
143 raise Exception(
'Please specify the action to be taken, either "-n", "-u" or "-l"!')
145 if options.fileList==
'' and (options.newId
or options.artIdUp!=0):
146 raise Exception(
'Please provide the input file list!')
148 if (options.newId
and (options.artIdUp != 0
or options.artIdLi != 0))
or (options.artIdUp != 0
and options.artIdLi != 0):
149 raise Exception(
'Options "-n", "-u" and "-l" are mutually exclusive, please chose only one!')
152 print 'Action: create new article\n'
153 elif options.artIdUp != 0:
154 print 'Action: update article '+str(options.artIdUp)+
'\n'
155 elif options.artIdLi != 0:
156 print 'Action: list content of article '+str(options.artIdLi)+
'\n'
158 if options.artIdLi==0:
159 theList = options.fileList.split(
',')
160 theCompressedFilesList = []
163 if not ( f.lower().endswith(
".lhe")
or f.lower().endswith(
".lhe.xz") ):
164 raise Exception(
'Input file name must have the "lhe" or "lhe.xz" final extension!')
165 if( f.lower().endswith(
".lhe.xz") ):
166 print "Important! Input file "+f+
" is already zipped: please make sure you verified its integrity with xmllint before zipping it. You can do it with:\n"
167 print "xmllint file.lhe\n"
168 print "Otherwise it is best to pass the unzipped file to this script and let it check its integrity and compress the file with the --compress option\n"
170 if not os.path.exists(f):
171 raise Exception(
'Input file '+f+
' does not exists')
172 if( f.lower().endswith(
".lhe") ):
173 theCheckIntegrityCommand =
'xmllint -noout '+f
174 exeCheckIntegrity = subprocess.Popen([
"/bin/sh",
"-c", theCheckIntegrityCommand])
175 intCode = exeCheckIntegrity.wait()
176 if(intCode
is not 0):
177 raise Exception(
'Input file '+f+
' is corrupted')
178 if reallyDoIt
and options.compress:
179 print "Compressing file",f
180 theCompressionCommand =
'xz '+f
181 exeCompression = subprocess.Popen([
"/bin/sh",
"-c",theCompressionCommand])
182 exeCompression.communicate()
183 theCompressedFilesList.append(f+
'.xz')
184 if reallyDoIt
and options.compress:
185 theList = theCompressedFilesList
197 print 'Creating new article with identifier '+str(newArt)+
' ...\n'
198 uploadPath = defaultEOSRootPath+
'/'+str(newArt)
199 theCommand = defaultEOSmkdirCommand+
' '+uploadPath
201 exeUpload = subprocess.Popen([
"/bin/sh",
"-c",theCommand])
202 exeUpload.communicate()
206 elif options.artIdUp != 0:
207 newArt = options.artIdUp
209 uploadPath = defaultEOSRootPath+
'/'+str(newArt)
211 raise(
'Article '+str(newArt)+
' to be updated does not exist!')
215 elif options.artIdLi !=0:
216 listPath = defaultEOSRootPath+
'/'+str(options.artIdLi)
217 theCommand = defaultEOSlistCommand+
' '+listPath
218 exeList = subprocess.Popen([
"/bin/sh",
"-c",theCommand], stdout=subprocess.PIPE)
219 for line
in exeList.stdout.readlines():
226 listPath = defaultEOSRootPath+
'/'+str(newArt)
228 print 'Listing the '+str(newArt)+
' article content after upload:'
229 theCommand = defaultEOSlistCommand+
' '+listPath
231 exeFullList = subprocess.Popen([
"/bin/sh",
"-c",theCommand])
232 exeFullList.communicate()
234 print 'Dry run, nothing was done'
const T & max(const T &a, const T &b)