ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tools
PyUtils
python
Tools/PyUtils/python/Helpers.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3
# @author: Sebastien Binet <binet@cern.ch>
4
# @date: March 2007
5
#
6
#
7
8
import
re
9
import
os
10
import
sys
11
from
functools
import
cache
12
from
tempfile
import
NamedTemporaryFile
13
# !!!
14
# Do not add any Athena dependencies at the module-level as some of the code here
15
# is used during the build (see athena!62739).
16
# !!!
17
18
19
def
ROOTSetup
(batch=True):
20
"""
21
Do basic ROOT setup. This should be called before any other import of ROOT.
22
"""
23
from
AthenaCommon.Logging
import
log
24
log.debug(
'Setting ROOT batch mode to %s'
, batch)
25
26
if
batch
is
True
:
27
os.environ[
'ROOT_BATCH'
] =
'1'
28
else
:
29
os.environ.pop(
'ROOT_BATCH'
,
None
)
30
31
32
class
ShutUp
(object):
33
"""
34
A little helper class to keep ROOT silent...
35
"""
36
DefaultFilter = [
37
re.compile(
"Warning in <TClass::TClass>: no dictionary for class."
),
38
re.compile(
"Warning in <TEnvRec::ChangeValue>: duplicate entry."
),
39
re.compile(
"Error in <TStreamerInfo::BuildOld>:."
),
40
]
41
def
__init__
(self, filters = DefaultFilter):
42
self.
_dummy
=
False
# if dummy, we don't really shut-up ROOT...
43
if
os.environ.get(
'PYUTILS_SHUTUP_DEBUG'
,
'0'
) ==
'1'
:
44
self.
_dummy
=
True
45
46
self.
save_err
= open(
'/dev/null'
,
'w'
)
47
self.
save_out
= open(
'/dev/null'
,
'w'
)
48
try
:
49
self.
quiet_err
= NamedTemporaryFile( suffix =
".msg.log"
)
50
self.
quiet_out
= NamedTemporaryFile( suffix =
".msg.log"
)
51
except
OSError:
52
# load problem ?
53
# retry a bit later... (in 2 seconds)
54
import
time
55
time.sleep(2)
#
56
try
:
57
self.
quiet_err
= NamedTemporaryFile( suffix =
".msg.log"
)
58
self.
quiet_out
= NamedTemporaryFile( suffix =
".msg.log"
)
59
except
OSError:
60
# then (implicitly) fallback on sys.stderr
61
self.
_dummy
=
True
62
63
self.
filters
= filters
64
65
if
not
self.
_dummy
:
66
os.dup2( sys.stderr.fileno(), self.
save_err
.fileno() )
67
os.dup2( sys.stdout.fileno(), self.
save_out
.fileno() )
68
return
69
70
def
__del__
(self):
71
self.
save_err
.close()
72
self.
save_out
.close()
73
self.
quiet_err
.close()
74
self.
quiet_out
.close()
75
return
76
77
def
mute
(self):
78
if
not
self.
_dummy
:
79
os.dup2( self.
quiet_err
.fileno(), sys.stderr.fileno() )
80
os.dup2( self.
quiet_out
.fileno(), sys.stdout.fileno() )
81
return
82
83
def
unMute
(self):
84
if
not
self.
_dummy
:
85
os.dup2( self.
save_err
.fileno(), sys.stderr.fileno() )
86
os.dup2( self.
save_out
.fileno(), sys.stdout.fileno() )
87
self.
__filterRootMessages
(self.
quiet_err
)
88
self.
quiet_err
.seek(0)
89
self.
__filterRootMessages
(self.
quiet_out
)
90
self.
quiet_out
.seek(0)
91
return
92
93
def
__filterRootMessages
(self, fd):
94
fd.seek(0)
95
for
l
in
fd.readlines():
96
l = l.decode()
97
printOut =
True
98
for
filter
in
self.
filters
:
99
if
re.match(filter, l):
100
printOut =
False
101
if
printOut:
102
print
(
"PyRoot:"
,l.replace(
"\n"
,
""
))
103
pass
104
return
105
106
# context-manager protocol
107
def
__enter__
(self):
108
return
self.
mute
()
109
def
__exit__
(self,exc_type, exc_val, exc_tb):
110
return
self.
unMute
()
111
112
113
@cache
114
def
release_metadata
():
115
"""Returns information about the current release based on ReleaseData"""
116
117
import
configparser
118
d = {
119
'project name'
:
'?'
,
120
'release'
:
'?'
,
121
'base release'
:
'?'
,
122
'nightly release'
:
'?'
,
123
'nightly name'
:
'?'
,
124
'date'
:
'?'
,
125
'platform'
:
'?'
,
126
}
127
128
for
cmake_path
in
os.environ[
'CMAKE_PREFIX_PATH'
].
split
(os.pathsep):
129
release_data = os.path.join(cmake_path,
'ReleaseData'
)
130
if
os.path.exists(release_data):
131
d1=d
132
cfg = configparser.ConfigParser()
133
try
:
134
cfg.read( release_data )
135
if
cfg.has_section(
'release_metadata'
):
136
d1.update( dict( cfg.items(
'release_metadata'
) ) )
137
d1[
'platform'
] = os.getenv(
'%s_PLATFORM'
% d1[
'project name'
],
138
'?'
)
139
release = d1[
'release'
].
split
(
'.'
)
140
base_release = d1[
'base release'
].
split
(
'.'
)
141
if
len(release)>=3
or
len(base_release)>=3:
142
return
d1
143
except
Exception:
144
pass
145
return
d
python.Helpers.ShutUp
Definition
Tools/PyUtils/python/Helpers.py:32
python.Helpers.ShutUp.mute
mute(self)
Definition
Tools/PyUtils/python/Helpers.py:77
python.Helpers.ShutUp.__filterRootMessages
__filterRootMessages(self, fd)
Definition
Tools/PyUtils/python/Helpers.py:93
python.Helpers.ShutUp.__init__
__init__(self, filters=DefaultFilter)
Definition
Tools/PyUtils/python/Helpers.py:41
python.Helpers.ShutUp.unMute
unMute(self)
Definition
Tools/PyUtils/python/Helpers.py:83
python.Helpers.ShutUp.quiet_out
quiet_out
Definition
Tools/PyUtils/python/Helpers.py:50
python.Helpers.ShutUp.__exit__
__exit__(self, exc_type, exc_val, exc_tb)
Definition
Tools/PyUtils/python/Helpers.py:109
python.Helpers.ShutUp._dummy
bool _dummy
Definition
Tools/PyUtils/python/Helpers.py:42
python.Helpers.ShutUp.filters
filters
Definition
Tools/PyUtils/python/Helpers.py:63
python.Helpers.ShutUp.quiet_err
quiet_err
Definition
Tools/PyUtils/python/Helpers.py:49
python.Helpers.ShutUp.__del__
__del__(self)
Definition
Tools/PyUtils/python/Helpers.py:70
python.Helpers.ShutUp.__enter__
__enter__(self)
Definition
Tools/PyUtils/python/Helpers.py:107
python.Helpers.ShutUp.save_err
save_err
Definition
Tools/PyUtils/python/Helpers.py:46
python.Helpers.ShutUp.save_out
save_out
Definition
Tools/PyUtils/python/Helpers.py:47
split
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition
hcg.cxx:179
python.Helpers.release_metadata
release_metadata()
Definition
Tools/PyUtils/python/Helpers.py:114
python.Helpers.ROOTSetup
ROOTSetup(batch=True)
Definition
Tools/PyUtils/python/Helpers.py:19
Generated on
for ATLAS Offline Software by
1.17.0