5from functools
import wraps
10 This class wraps a instance of an arbitrary class, intercepts all its
11 method calls
and logs them to a file (default: `sys.stdout`).
13 >>>
import method_logger
as ml
14 >>>
from StringIO
import StringIO
15 >>>
class TestClass(object):
18 ...
def func(*args, **kwargs):
23 >>> lg = ml.MethodLogger(cl, sink=sink)
24 >>> lg.func(3, y=8, foo=
'bar')
26 "TestClass.func(3, y=8, foo='bar')\\n"
30 def __init__(self, wrapped_instance, sink=sys.stdout) -> None:
33 self.
_prefix = type(wrapped_instance).__name__ +
"."
36 qualified_name = self.
_prefix + str(met.__name__)
39 def _logger(*args, **kwargs):
40 args_str =
", ".join(repr(arg)
for arg
in args)
41 kwargs_str =
", ".join(str(k) +
"=" + repr(v)
for (k, v)
in kwargs.items())
42 all_args_str = args_str + (
", " if len(kwargs_str) > 0
else "") + kwargs_str
43 print(f
"{qualified_name}({all_args_str})", file=self.
_sink)
44 return met.__call__(*args, **kwargs)
def method_logger(self, met)
def __getattr__(self, attr)
None __init__(self, wrapped_instance, sink=sys.stdout)