summaryrefslogtreecommitdiff
path: root/factory
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polytechnique.org>2015-07-11 19:52:45 +0200
committerRaphaël Barrois <raphael.barrois@polytechnique.org>2015-07-11 19:54:54 +0200
commit63edb526bc4efd8cf7abe260f2787f55d2953e39 (patch)
treecf7e897d10f8850bb4d9392dbc41ba6a09df0e1c /factory
parent6d190fa33f8a0cd625d3ce13d6de29bd5b72e742 (diff)
downloadfactory-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.py32
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):