diff options
author | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2015-07-11 19:52:45 +0200 |
---|---|---|
committer | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2015-07-11 19:54:54 +0200 |
commit | 63edb526bc4efd8cf7abe260f2787f55d2953e39 (patch) | |
tree | cf7e897d10f8850bb4d9392dbc41ba6a09df0e1c /factory | |
parent | 6d190fa33f8a0cd625d3ce13d6de29bd5b72e742 (diff) | |
download | factory-boy-63edb526bc4efd8cf7abe260f2787f55d2953e39.tar factory-boy-63edb526bc4efd8cf7abe260f2787f55d2953e39.tar.gz |
Improve debug logging efficiency (Closes #155).
As suggested by @adamchainz, use lazy computation of args/kwargs pprint
to only perform complex computation when running with debug.
Diffstat (limited to 'factory')
-rw-r--r-- | factory/utils.py | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/factory/utils.py b/factory/utils.py index 6ecf9a7..806b1ec 100644 --- a/factory/utils.py +++ b/factory/utils.py @@ -110,15 +110,29 @@ def _safe_repr(obj): return obj_repr.decode('utf-8') -def log_pprint(args=(), kwargs=None): - kwargs = kwargs or {} - return ', '.join( - [_safe_repr(arg) for arg in args] + - [ - '%s=%s' % (key, _safe_repr(value)) - for key, value in kwargs.items() - ] - ) +class log_pprint(object): + """Helper for properly printing args / kwargs passed to an object. + + Since it is only used with factory.debug(), the computation is + performed lazily. + """ + __slots__ = ['args', 'kwargs'] + + def __init__(self, args=(), kwargs=None): + self.args = args + self.kwargs = kwargs or {} + + def __repr__(self): + return repr(str(self)) + + def __str__(self): + return ', '.join( + [_safe_repr(arg) for arg in self.args] + + [ + '%s=%s' % (key, _safe_repr(value)) + for key, value in self.kwargs.items() + ] + ) class ResetableIterator(object): |