Skip to content

Commit 4189606

Browse files
committed
Fully qualify class names in repr(), add selected state information
This is intended to disambiguate objects in log and debug output.
1 parent ec212a1 commit 4189606

File tree

10 files changed

+102
-46
lines changed

10 files changed

+102
-46
lines changed

ansible_mitogen/planner.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,10 @@ def get_module_source(self):
113113
return self._module_source
114114

115115
def __repr__(self):
116-
return 'Invocation(module_name=%s)' % (self.module_name,)
116+
return '%s.%s(module_name=%r)' % (
117+
__name__, self.__class__.__name__,
118+
self.module_name,
119+
)
117120

118121

119122
class Planner(object):

ansible_mitogen/runner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def __init__(self, path):
185185
LOG.debug('%r installed; existing keys: %r', self, self._keys)
186186

187187
def __repr__(self):
188-
return 'EnvironmentFileWatcher(%r)' % (self.path,)
188+
return '%s.%s(%r)' % (__name__, self.__class__.__name__, self.path)
189189

190190
def _stat(self):
191191
try:

mitogen/core.py

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ def __init__(self, dct):
294294
self[k] = v
295295

296296
def __repr__(self):
297-
return 'Kwargs(%s)' % (dict.__repr__(self),)
297+
return '%s(%s)' % (self.__class__.__name__, dict.__repr__(self),)
298298

299299
def __reduce__(self):
300300
return (Kwargs, (dict(self),))
@@ -979,7 +979,8 @@ def unpickle(self, throw=True, throw_dead=True):
979979
return obj
980980

981981
def __repr__(self):
982-
return 'Message(%r, %r, %r, %r, %r, %r..%d)' % (
982+
return '%s.%s(dst_id=%r, src_id=%r, auth_id=%r, handle=%r, reply_to=%r, data=%r..%d)' % (
983+
__name__, self.__class__.__name__,
983984
self.dst_id, self.src_id, self.auth_id, self.handle,
984985
self.reply_to, (self.data or '')[:50], len(self.data)
985986
)
@@ -1025,7 +1026,10 @@ def close(self):
10251026
)
10261027

10271028
def __repr__(self):
1028-
return 'Sender(%r, %r)' % (self.context, self.dst_handle)
1029+
return '%s.%s(%r, %r)' % (
1030+
__name__, self.__class__.__name__,
1031+
self.context, self.dst_handle,
1032+
)
10291033

10301034
def __reduce__(self):
10311035
return _unpickle_sender, (self.context.context_id, self.dst_handle)
@@ -1087,7 +1091,10 @@ def __init__(self, router, handle=None, persist=True,
10871091
)
10881092

10891093
def __repr__(self):
1090-
return 'Receiver(%r, %r)' % (self.router, self.handle)
1094+
return '%s.%s(%r, %r)' % (
1095+
__name__, self.__class__.__name__,
1096+
self.router, self.handle,
1097+
)
10911098

10921099
def __enter__(self):
10931100
return self
@@ -1237,7 +1244,8 @@ def close(self):
12371244
Sender.close(self)
12381245

12391246
def __repr__(self):
1240-
return 'Channel(%s, %s)' % (
1247+
return '%s.%s(%s, %s)' % (
1248+
__name__, self.__class__.__name__,
12411249
Sender.__repr__(self),
12421250
Receiver.__repr__(self)
12431251
)
@@ -1351,7 +1359,7 @@ def _install_handler(self, router):
13511359
)
13521360

13531361
def __repr__(self):
1354-
return 'Importer'
1362+
return '%s.%s()' % (__name__, self.__class__.__name__)
13551363

13561364
def builtin_find_module(self, fullname):
13571365
# imp.find_module() will always succeed for __main__, because it is a
@@ -1719,7 +1727,10 @@ def accept(self, rfp, wfp):
17191727
self.transmit_side = Side(self, wfp)
17201728

17211729
def __repr__(self):
1722-
return "<Stream %s #%04x>" % (self.name, id(self) & 0xffff,)
1730+
return "<%s.%s %r #%04x>" % (
1731+
__name__, self.__class__.__name__,
1732+
self.name, id(self) & 0xffff,
1733+
)
17231734

17241735
def on_receive(self, broker):
17251736
"""
@@ -1812,8 +1823,8 @@ def build_stream(cls, *args, **kwargs):
18121823
return stream
18131824

18141825
def __repr__(self):
1815-
return '%s(%s)' % (
1816-
self.__class__.__name__,
1826+
return '%s.%s(%r)' % (
1827+
__name__, self.__class__.__name__,
18171828
self.stream and self.stream.name,
18181829
)
18191830

@@ -2008,8 +2019,9 @@ def __init__(self, stream, fp, cloexec=True, keep_alive=True, blocking=False):
20082019
set_nonblock(self.fd)
20092020

20102021
def __repr__(self):
2011-
return '<Side of %s fd %s>' % (
2012-
self.stream.name or repr(self.stream),
2022+
return '<%s.%s of %r fd %r>' % (
2023+
__name__, self.__class__.__name__,
2024+
self.stream.name or self.stream,
20132025
self.fd
20142026
)
20152027

@@ -2334,7 +2346,10 @@ def send_await(self, msg, deadline=None):
23342346
return data
23352347

23362348
def __repr__(self):
2337-
return 'Context(%s, %r)' % (self.context_id, self.name)
2349+
return '%s.%s(%r, %r)' % (
2350+
__name__, self.__class__.__name__,
2351+
self.context_id, self.name,
2352+
)
23382353

23392354

23402355
def _unpickle_context(context_id, name, router=None):
@@ -2397,7 +2412,10 @@ def __init__(self):
23972412
self._wfds = {}
23982413

23992414
def __repr__(self):
2400-
return '%s' % (type(self).__name__,)
2415+
return '<%s.%s with %d readers %d writers>' % (
2416+
__name__, self.__class__.__name__,
2417+
len(self._rfds), len(self._wfds),
2418+
)
24012419

24022420
def _update(self, fd):
24032421
"""
@@ -2769,7 +2787,8 @@ def _wake(self, wsock, cookie):
27692787
assert written == len(cookie) and not disconnected
27702788

27712789
def __repr__(self):
2772-
return 'Latch(%#x, size=%d, t=%r)' % (
2790+
return '%s.%s(%#x, size=%d, thread=%r)' % (
2791+
__name__, self.__class__.__name__,
27732792
id(self),
27742793
len(self._queue),
27752794
threading__thread_name(threading__current_thread()),
@@ -2798,9 +2817,9 @@ def __init__(self, broker):
27982817
self._deferred = collections.deque()
27992818

28002819
def __repr__(self):
2801-
return 'Waker(fd=%r/%r)' % (
2802-
self.stream.receive_side and self.stream.receive_side.fd,
2803-
self.stream.transmit_side and self.stream.transmit_side.fd,
2820+
return '%s.%s(%r, %r)' % (
2821+
__name__, self.__class__.__name__,
2822+
self.stream.receive_side, self.stream.transmit_side,
28042823
)
28052824

28062825
@property
@@ -2990,7 +3009,7 @@ def __init__(self, broker):
29903009
self.add_handler(self._on_del_route, DEL_ROUTE)
29913010

29923011
def __repr__(self):
2993-
return 'Router(%r)' % (self.broker,)
3012+
return '%s.%s(%r)' % (__name__, self.__class__.__name__, self.broker)
29943013

29953014
def _setup_logging(self):
29963015
"""
@@ -3626,7 +3645,7 @@ def join(self):
36263645
self._thread.join()
36273646

36283647
def __repr__(self):
3629-
return 'Broker(%04x)' % (id(self) & 0xffff,)
3648+
return '%s.%s(%r)' % (__name__, self.__class__.__name__, self.poller)
36303649

36313650

36323651
class Dispatcher(object):
@@ -3643,7 +3662,7 @@ class Dispatcher(object):
36433662
_service_recv = None
36443663

36453664
def __repr__(self):
3646-
return 'Dispatcher'
3665+
return '%s.%s(%r)' % (__name__, self.__class__.__name__, self.econtext)
36473666

36483667
def __init__(self, econtext):
36493668
self.econtext = econtext

mitogen/fakessh.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,9 @@ def on_receive(self, stream, broker):
159159
self.on_disconnect(broker)
160160

161161
def __repr__(self):
162-
return 'IoPump(%r, %r)' % (
163-
self.receive_side.fp.fileno(),
164-
self.transmit_side.fp.fileno(),
162+
return '%s.%s(%r, %r)' % (
163+
__name__, self.__class__.__name__,
164+
self.receive_side, self.transmit_side,
165165
)
166166

167167

@@ -191,7 +191,10 @@ def __init__(self, router, stdin, stdout, proc=None):
191191
pmon.add(proc.pid, self._on_proc_exit)
192192

193193
def __repr__(self):
194-
return 'Process(%r, %r)' % (self.stdin, self.stdout)
194+
return '%s.%s(%r, %r, %r)' % (
195+
__name__, self.__class__.__name__,
196+
self.router, self.stdin, self.stdout,
197+
)
195198

196199
def _on_proc_exit(self, status):
197200
LOG.debug('%r._on_proc_exit(%r)', self, status)

mitogen/master.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ def _on_forward_log(self, msg):
451451
logger.handle(record)
452452

453453
def __repr__(self):
454-
return 'LogForwarder(%r)' % (self._router,)
454+
return '%s.%s(%r)' % (__name__, self.__class__.__name__, self._router)
455455

456456

457457
class FinderMethod(object):
@@ -461,7 +461,7 @@ class FinderMethod(object):
461461
simple task, right? Naive young fellow, welcome to the real world.
462462
"""
463463
def __repr__(self):
464-
return '%s()' % (type(self).__name__,)
464+
return '%s.%s()' % (__name__, self.__class__.__name__)
465465

466466
def find(self, fullname):
467467
"""
@@ -813,7 +813,7 @@ def __init__(self):
813813
self._related_cache = {}
814814

815815
def __repr__(self):
816-
return 'ModuleFinder()'
816+
return '%s.%s()' % (__name__, self.__class__.__name__)
817817

818818
def add_source_override(self, fullname, path, source, is_pkg):
819819
"""
@@ -995,7 +995,7 @@ def __init__(self, router):
995995
)
996996

997997
def __repr__(self):
998-
return 'ModuleResponder'
998+
return '%s.%s(%r)' % (__name__, self.__class__.__name__, self._router)
999999

10001000
def add_source_override(self, fullname, path, source, is_pkg):
10011001
"""
@@ -1412,7 +1412,7 @@ def __init__(self, router):
14121412
)
14131413

14141414
def __repr__(self):
1415-
return 'IdAllocator(%r)' % (self.router,)
1415+
return '%s.%s(%r)' % (__name__, self.__class__.__name__, self.router)
14161416

14171417
def allocate(self):
14181418
"""

mitogen/parent.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,10 @@ def __init__(self, when, func):
592592
self.func = func
593593

594594
def __repr__(self):
595-
return 'Timer(%r, %r)' % (self.when, self.func)
595+
return '%s.%s(%r, %r)' % (
596+
__name__, self.__class__.__name__,
597+
self.when, self.func,
598+
)
596599

597600
def __eq__(self, other):
598601
return self.when == other.when
@@ -1399,7 +1402,9 @@ def __init__(self, options, router):
13991402
self._router = router
14001403

14011404
def __repr__(self):
1402-
return 'Connection(%r)' % (self.stdio_stream,)
1405+
return '%s.%s(stdio_stream=%r)' % (
1406+
__name__, self.__class__.__name__, self.stdio_stream,
1407+
)
14031408

14041409
# Minimised, gzipped, base64'd and passed to 'python -c'. It forks, dups
14051410
# file descriptor 0 as 100, creates a pipe, then execs a new interpreter
@@ -1832,7 +1837,7 @@ def make_chain_id(cls):
18321837
)
18331838

18341839
def __repr__(self):
1835-
return '%s(%s)' % (self.__class__.__name__, self.context)
1840+
return '%s.%s(%r)' % (__name__, self.__class__.__name__, self.context)
18361841

18371842
def __enter__(self):
18381843
return self
@@ -2112,7 +2117,10 @@ def __init__(self, router, parent=None):
21122117
)
21132118

21142119
def __repr__(self):
2115-
return 'RouteMonitor()'
2120+
return '%s.%s(%r, %r)' % (
2121+
__name__, self.__class__.__name__,
2122+
self.router, self.parent,
2123+
)
21162124

21172125
def _send_one(self, stream, handle, target_id, name):
21182126
"""
@@ -2653,8 +2661,8 @@ def __init__(self, pid, stdin, stdout, stderr=None):
26532661
self.stderr = stderr
26542662

26552663
def __repr__(self):
2656-
return '%s %s pid %d' % (
2657-
type(self).__name__,
2664+
return '%s.%s(%r, %r)' % (
2665+
__name__, self.__class__.__name__,
26582666
self.name,
26592667
self.pid,
26602668
)
@@ -2711,7 +2719,10 @@ def __init__(self, router, parent_context, importer):
27112719
)
27122720

27132721
def __repr__(self):
2714-
return 'ModuleForwarder'
2722+
return '%s.%s(%r, %r, %r)' % (
2723+
__name__, self.__class__.__name__,
2724+
self.router, self.parent_context, self.importer,
2725+
)
27152726

27162727
def _on_forward_module(self, msg):
27172728
if msg.is_dead:

mitogen/service.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ def __init__(self, service):
262262
self.service = service
263263

264264
def __repr__(self):
265-
return '%s(%s)' % (type(self).__name__, self.service)
265+
return '%s.%s(%r)' % (__name__, self.__class__.__name__, self.service)
266266

267267
unauthorized_msg = (
268268
'Caller is not authorized to invoke %r of service %r'
@@ -448,7 +448,9 @@ def __init__(self, router):
448448
self.select = mitogen.select.Select()
449449

450450
def __repr__(self):
451-
return '%s()' % (self.__class__.__name__,)
451+
return '%s.%s(%r, %r)' % (
452+
__name__, self.__class__.__name__, self.router, self.select,
453+
)
452454

453455
def on_message(self, event):
454456
"""
@@ -661,7 +663,8 @@ def _worker_main(self):
661663
raise
662664

663665
def __repr__(self):
664-
return 'Pool(%04x, size=%d, th=%r)' % (
666+
return '%s.%s(%04x, size=%d, th=%r)' % (
667+
__name__, self.__class__.__name__,
665668
id(self) & 0xffff,
666669
len(self._threads),
667670
get_thread_name(),

tests/importer_test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ def tearDown(self):
4242
super(ImporterMixin, self).tearDown()
4343

4444

45+
class ReprTest(ImporterMixin, testlib.TestCase):
46+
def test_repr(self):
47+
self.assertEqual('mitogen.core.Importer()', repr(self.importer))
48+
49+
4550
class LoadModuleTest(ImporterMixin, testlib.TestCase):
4651
data = zlib.compress(b("data = 1\n\n"))
4752
path = 'fake_module.py'

tests/message_test.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,18 @@ def test_py36_sender(self):
535535
class ReprTest(testlib.TestCase):
536536
klass = mitogen.core.Message
537537

538-
def test_repr(self):
539-
# doesn't crash
540-
repr(self.klass.pickled('test'))
538+
def test_repr_data(self):
539+
msg = self.klass(dst_id=1, src_id=2, auth_id=3, handle=4, reply_to=5, data=b'abcdef')
540+
if mitogen.core.PY3:
541+
expected = "mitogen.core.Message(dst_id=1, src_id=2, auth_id=3, handle=4, reply_to=5, data=b'abcdef'..6)"
542+
else:
543+
expected = "mitogen.core.Message(dst_id=1, src_id=2, auth_id=3, handle=4, reply_to=5, data='abcdef'..6)"
544+
self.assertEqual(expected, repr(msg))
545+
546+
def test_repr_pickled(self):
547+
msg = self.klass.pickled(u'test')
548+
if mitogen.core.PY3:
549+
expected = r"mitogen.core.Message(dst_id=None, src_id=0, auth_id=0, handle=None, reply_to=None, data=b'\x80\x02X\x04\x00\x00\x00testq\x00.'..14)"
550+
else:
551+
expected = r"mitogen.core.Message(dst_id=None, src_id=0, auth_id=0, handle=None, reply_to=None, data='\x80\x02X\x04\x00\x00\x00testq\x01.'..14)"
552+
self.assertEqual(expected, repr(msg))

0 commit comments

Comments
 (0)