Belle II Software  release-05-02-19
logfilter.py
1 """
2 Log Filter class to replace string occurences in log messages to simplify testing
3 """
4 import re
5 
6 
8  """
9  Simple class to intercept anything written to python stdout and replace
10  a given set of strings with placehholders to improve reproducibility.
11  """
12  def __init__(self, out, replacements):
13  """Setup the forwarding and replacements
14 
15  Parameters:
16  out (file object): Where to forward the output too
17  replacements (dict(str, str)): Dictionary of strings and their replacements
18  """
19 
20  self._out = out
21 
22  self._replacements = replacements
23 
24  self._regex = re.compile("|".join(re.escape(e) for e in replacements))
25 
26  def write(self, data):
27  """Check all messages for strings to replace"""
28  replaced = self._regex.sub(lambda m: self._replacements[m[0]], data)
29  self._out.write(replaced)
30 
31  def __getattr__(self, name):
32  """Forward all other methods from the out stream"""
33  return getattr(self._out, name)
b2test_utils.logfilter.LogReplacementFilter.__getattr__
def __getattr__(self, name)
Definition: logfilter.py:31
b2test_utils.logfilter.LogReplacementFilter._out
_out
where to forward output
Definition: logfilter.py:20
b2test_utils.logfilter.LogReplacementFilter.__init__
def __init__(self, out, replacements)
Definition: logfilter.py:12
b2test_utils.logfilter.LogReplacementFilter.write
def write(self, data)
Definition: logfilter.py:26
b2test_utils.logfilter.LogReplacementFilter._regex
_regex
build a regular expression from dictionary keys
Definition: logfilter.py:24
b2test_utils.logfilter.LogReplacementFilter._replacements
_replacements
what to replace
Definition: logfilter.py:22
b2test_utils.logfilter.LogReplacementFilter
Definition: logfilter.py:7