29 def preExecute(self, input=set(), output=
set()):
30 "Get input tarball, unpack and set up env if an evgenJobOpts arg was provided."
31
32
33 super(EvgenExecutor, self).preExecute(input, output)
34
35 def expand_if_archive(filename):
36 "Function to expand a file if it is a zip archive or tarball"
37 if ".tar" in filename:
38 import tarfile
39 tf = tarfile.open(filename)
40 tf.extractall()
41 tf.close()
42 elif filename.endswith(".zip"):
43 import zipfile
44 zf = zipfile.ZipFile(filename)
45 zf.extractall()
46 zf.close()
47
48 def get_immediate_subdirectories(a_dir):
49 return [name for name in os.listdir(a_dir)
50 if os.path.isdir(os.path.join(a_dir, name))]
51
52 def mk_jo_proxy(targetbasepath, pkgname, proxypath, addtosearch=True):
53 "Make a JO proxy dir such that the MCxxJobOptions/dddd dirs contents are found via include(MCxxJobOptions/yyyy)"
54 if proxypath:
55 if os.path.exists(proxypath):
56 shutil.rmtree(proxypath)
57 os.mkdir(proxypath)
58 os.environ[
'LOCAL_INSTALL_DIR'] = (os.environ[
'JOBOPTSEARCHPATH']).
split(
":")[0]
59 comdir = os.path.join(targetbasepath, "common")
60 subdirlist = get_immediate_subdirectories(comdir)
61 subdirlist1 = ['common/%s' % item for item in subdirlist]
62 dirlist = ['common','share','gencontrol','susycontrol']
63 for d in (dirlist+subdirlist1):
64
65 if (d != 'common/.svn'):
66 dpath = os.path.join(proxypath, d)
67
68 if proxypath:
69 os.mkdir(dpath)
70 os.symlink(os.path.join(targetbasepath, d), os.path.join(dpath, pkgname))
71 if addtosearch:
72 os.environ["JOBOPTSEARCHPATH"] = dpath+":"+os.environ["JOBOPTSEARCHPATH"]
73 os.environ["DATAPATH"] =os.path.join(targetbasepath, d)+":"+os.environ["DATAPATH"]
74
75 os.environ["JOBOPTSEARCHPATH"] = os.environ['LOCAL_INSTALL_DIR']+":"+os.environ["JOBOPTSEARCHPATH"]
76
77
78
79 if "evgenJobOpts" in self._trf.argdict:
80 tarball = self._trf.argdict["evgenJobOpts"].value
81
83 if tarball.startswith("http"):
84 url = tarball
85 tarball = os.basename(tarball)
86 else:
87 url = "http://cern.ch/atlas-computing/links/kitsDirectory/EvgenJobOpts/" + tarball
88
89 if not os.path.exists(tarball):
90 from EvgenJobTransforms.download import downloadUsingProxy
91 status, output = downloadUsingProxy(url)
92 if status != 0:
93 raise EnvironmentError('Error downloading tarball %s. Downloader reports: %s' % (tarball, output))
94 msg.info('Evgen tarball download success: %s', output)
95
96 expand_if_archive(tarball)
97 mk_jo_proxy(os.getcwd(), "MC14JobOptions", "_joproxy14")
98 mk_jo_proxy(os.getcwd(), "MC15JobOptions", "_joproxy15")
99
105
106 else:
107 if os.path.exists("/cvmfs/atlas.cern.ch"):
108
109 mk_jo_proxy("/cvmfs/atlas.cern.ch/repo/sw/Generators/MC14JobOptions/latest/", "MC14JobOptions","_joproxy14")
110 mk_jo_proxy("/cvmfs/atlas.cern.ch/repo/sw/Generators/MC15JobOptions/latest/", "MC15JobOptions","_joproxy15")
111 msg.info("No evgenJobOpts tarball specified, using JOBOPTSEARCHPATH = '%s'", os.environ["JOBOPTSEARCHPATH"])
112 elif os.path.exists("/afs/cern.ch/atlas/groups/Generators"):
113 mk_jo_proxy("/afs/cern.ch/atlas/groups/Generators/MC14JobOptions/latest/", "MC14JobOptions","_joproxy14")
114 mk_jo_proxy("/afs/cern.ch/atlas/groups/Generators/MC15JobOptions/latest/", "MC15JobOptions","_joproxy15")
115 msg.info("No evgenJobOpts tarball specified, no cvmfs, using JOBOPTSEARCHPATH = '%s'", os.environ["JOBOPTSEARCHPATH"])
116
117
118 if "inputGeneratorFile" in self._trf.argdict:
119 expand_if_archive(self._trf.argdict["inputGeneratorFile"].value)
120 if "inputGenConfFile" in self._trf.argdict:
121 expand_if_archive(self._trf.argdict["inputGenConfFile"].value)
122
123
std::vector< std::string > split(const std::string &s, const std::string &t=":")