Skip to content

Commit d2e19a4

Browse files
RonnyPfannschmidtTyler Goodlet
authored andcommitted
move tracer to own file
1 parent 50d6626 commit d2e19a4

File tree

3 files changed

+76
-74
lines changed

3 files changed

+76
-74
lines changed

pluggy/__init__.py

Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -104,68 +104,6 @@ def normalize_hookimpl_opts(opts):
104104
opts.setdefault("optionalhook", False)
105105

106106

107-
class _TagTracer(object):
108-
def __init__(self):
109-
self._tag2proc = {}
110-
self.writer = None
111-
self.indent = 0
112-
113-
def get(self, name):
114-
return _TagTracerSub(self, (name,))
115-
116-
def format_message(self, tags, args):
117-
if isinstance(args[-1], dict):
118-
extra = args[-1]
119-
args = args[:-1]
120-
else:
121-
extra = {}
122-
123-
content = " ".join(map(str, args))
124-
indent = " " * self.indent
125-
126-
lines = [
127-
"%s%s [%s]\n" % (indent, content, ":".join(tags))
128-
]
129-
130-
for name, value in extra.items():
131-
lines.append("%s %s: %s\n" % (indent, name, value))
132-
return lines
133-
134-
def processmessage(self, tags, args):
135-
if self.writer is not None and args:
136-
lines = self.format_message(tags, args)
137-
self.writer(''.join(lines))
138-
try:
139-
self._tag2proc[tags](tags, args)
140-
except KeyError:
141-
pass
142-
143-
def setwriter(self, writer):
144-
self.writer = writer
145-
146-
def setprocessor(self, tags, processor):
147-
if isinstance(tags, str):
148-
tags = tuple(tags.split(":"))
149-
else:
150-
assert isinstance(tags, tuple)
151-
self._tag2proc[tags] = processor
152-
153-
154-
class _TagTracerSub(object):
155-
def __init__(self, root, tags):
156-
self.root = root
157-
self.tags = tags
158-
159-
def __call__(self, *args):
160-
self.root.processmessage(self.tags, args)
161-
162-
def setmyprocessor(self, processor):
163-
self.root.setprocessor(self.tags, processor)
164-
165-
def get(self, name):
166-
return self.__class__(self.root, self.tags + (name,))
167-
168-
169107
class _TracedHookExecution(object):
170108
def __init__(self, pluginmanager, before, after):
171109
self.pluginmanager = pluginmanager
@@ -206,7 +144,7 @@ def __init__(self, project_name, implprefix=None):
206144
self._name2plugin = {}
207145
self._plugin2hookcallers = {}
208146
self._plugin_distinfo = []
209-
self.trace = _TagTracer().get("pluginmanage")
147+
self.trace = _tracing.TagTracer().get("pluginmanage")
210148
self.hook = _HookRelay(self.trace.root.get("hook"))
211149
self._implprefix = implprefix
212150
self._inner_hookexec = lambda hook, methods, kwargs: \

pluggy/_tracing.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
2+
3+
class TagTracer(object):
4+
def __init__(self):
5+
self._tag2proc = {}
6+
self.writer = None
7+
self.indent = 0
8+
9+
def get(self, name):
10+
return TagTracerSub(self, (name,))
11+
12+
def format_message(self, tags, args):
13+
if isinstance(args[-1], dict):
14+
extra = args[-1]
15+
args = args[:-1]
16+
else:
17+
extra = {}
18+
19+
content = " ".join(map(str, args))
20+
indent = " " * self.indent
21+
22+
lines = [
23+
"%s%s [%s]\n" % (indent, content, ":".join(tags))
24+
]
25+
26+
for name, value in extra.items():
27+
lines.append("%s %s: %s\n" % (indent, name, value))
28+
return lines
29+
30+
def processmessage(self, tags, args):
31+
if self.writer is not None and args:
32+
lines = self.format_message(tags, args)
33+
self.writer(''.join(lines))
34+
try:
35+
self._tag2proc[tags](tags, args)
36+
except KeyError:
37+
pass
38+
39+
def setwriter(self, writer):
40+
self.writer = writer
41+
42+
def setprocessor(self, tags, processor):
43+
if isinstance(tags, str):
44+
tags = tuple(tags.split(":"))
45+
else:
46+
assert isinstance(tags, tuple)
47+
self._tag2proc[tags] = processor
48+
49+
50+
class TagTracerSub(object):
51+
def __init__(self, root, tags):
52+
self.root = root
53+
self.tags = tags
54+
55+
def __call__(self, *args):
56+
self.root.processmessage(self.tags, args)
57+
58+
def setmyprocessor(self, processor):
59+
self.root.setprocessor(self.tags, processor)
60+
61+
def get(self, name):
62+
return self.__class__(self.root, self.tags + (name,))

testing/test_tracer.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11

2-
from pluggy import _TagTracer
2+
from pluggy._tracing import TagTracer
33

4+
import pytest
45

5-
def test_simple():
6-
rootlogger = _TagTracer()
6+
7+
@pytest.fixture
8+
def rootlogger():
9+
return TagTracer()
10+
11+
12+
def test_simple(rootlogger):
713
log = rootlogger.get("pytest")
814
log("hello")
915
out = []
@@ -16,8 +22,7 @@ def test_simple():
1622
assert out[1] == "hello [pytest:collection]\n"
1723

1824

19-
def test_indent():
20-
rootlogger = _TagTracer()
25+
def test_indent(rootlogger):
2126
log = rootlogger.get("1")
2227
out = []
2328
log.root.setwriter(lambda arg: out.append(arg))
@@ -39,8 +44,7 @@ def test_indent():
3944
' line3', ' line4', ' line5', 'last']
4045

4146

42-
def test_readable_output_dictargs():
43-
rootlogger = _TagTracer()
47+
def test_readable_output_dictargs(rootlogger):
4448

4549
out = rootlogger.format_message(['test'], [1])
4650
assert out == ['1 [test]\n']
@@ -52,8 +56,7 @@ def test_readable_output_dictargs():
5256
]
5357

5458

55-
def test_setprocessor():
56-
rootlogger = _TagTracer()
59+
def test_setprocessor(rootlogger):
5760
log = rootlogger.get("1")
5861
log2 = log.get("2")
5962
assert log2.tags == tuple("12")
@@ -73,8 +76,7 @@ def test_setprocessor():
7376
assert args == ("seen",)
7477

7578

76-
def test_setmyprocessor():
77-
rootlogger = _TagTracer()
79+
def test_setmyprocessor(rootlogger):
7880
log = rootlogger.get("1")
7981
log2 = log.get("2")
8082
out = []

0 commit comments

Comments
 (0)