11 from functools
import cache
12 from tempfile
import NamedTemporaryFile
20 At this point this function just makes sure the ROOT batch mode is set
21 correctly when someone imports ROOT
23 from AthenaCommon.Logging
import log
24 import builtins
as builtin_mod
25 oldimporthook = builtin_mod.__import__
26 batch_mode =
bool(batch)
28 def root6_importhook(name, globals={}, locals={}, fromlist=[], level=0):
32 if name==
'ROOT' or (name[0:4]==
'ROOT' and name!=
'ROOT.pythonization'):
36 m = oldimporthook(name, globals, locals, fromlist, level)
39 log.debug(
'Python import module=%s, fromlist=%s', name, fromlist)
41 log.debug(
'Setting ROOT batch mode to %s', bm)
46 builtin_mod.__import__ = root6_importhook
51 A little helper class to keep ROOT silent...
54 re.compile(
"Warning in <TClass::TClass>: no dictionary for class."),
55 re.compile(
"Warning in <TEnvRec::ChangeValue>: duplicate entry."),
56 re.compile(
"Error in <TStreamerInfo::BuildOld>:."),
60 if os.environ.get(
'PYUTILS_SHUTUP_DEBUG',
'0') ==
'1':
66 self.
quiet_err = NamedTemporaryFile( suffix =
".msg.log" )
67 self.
quiet_out = NamedTemporaryFile( suffix =
".msg.log" )
74 self.
quiet_err = NamedTemporaryFile( suffix =
".msg.log" )
75 self.
quiet_out = NamedTemporaryFile( suffix =
".msg.log" )
83 os.dup2( sys.stderr.fileno(), self.
save_err.fileno() )
84 os.dup2( sys.stdout.fileno(), self.
save_out.fileno() )
94 os.dup2( self.
quiet_err.fileno(), sys.stderr.fileno() )
95 os.dup2( self.
quiet_out.fileno(), sys.stdout.fileno() )
100 os.dup2( self.
save_err.fileno(), sys.stderr.fileno() )
101 os.dup2( self.
save_out.fileno(), sys.stdout.fileno() )
110 for l
in fd.readlines():
114 if re.match(filter, l):
117 print (
"PyRoot:",l.replace(
"\n",
""))
130 """Returns information about the current release based on ReleaseData"""
137 'nightly release':
'?',
143 for cmake_path
in os.environ[
'CMAKE_PREFIX_PATH'].
split(os.pathsep):
144 release_data = os.path.join(cmake_path,
'ReleaseData')
145 if os.path.exists(release_data):
147 cfg = configparser.ConfigParser()
149 cfg.read( release_data )
150 if cfg.has_section(
'release_metadata' ):
151 d1.update( dict( cfg.items(
'release_metadata' ) ) )
152 d1[
'platform'] = os.getenv(
'%s_PLATFORM' % d1[
'project name'],
154 release = d1[
'release'].
split(
'.')
155 base_release = d1[
'base release'].
split(
'.')
156 if len(release)>=3
or len(base_release)>=3: