summaryrefslogtreecommitdiff
path: root/coverage/misc.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-11-10 20:29:35 -0500
committerNed Batchelder <ned@nedbatchelder.com>2009-11-10 20:29:35 -0500
commit3a6188cb9522340ff31949dfd31bbc5d9682d3f4 (patch)
treee5ddb9a84517a313d9abfc78770863ff66310b54 /coverage/misc.py
parent90d80149337a93010e6494122819fe4754f42ec5 (diff)
downloadpython-coveragepy-3a6188cb9522340ff31949dfd31bbc5d9682d3f4.tar.gz
Some per-instance caching to speed code parsing and analysis.
Diffstat (limited to 'coverage/misc.py')
-rw-r--r--coverage/misc.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/coverage/misc.py b/coverage/misc.py
index 8e4b336..329a841 100644
--- a/coverage/misc.py
+++ b/coverage/misc.py
@@ -45,6 +45,20 @@ def format_lines(statements, lines):
return ret
+def expensive(fn):
+ """A decorator to cache the result of an expensive operation.
+
+ Only applies to methods with no arguments.
+
+ """
+ attr = "_cache_" + fn.__name__
+ def _wrapped(self):
+ if not hasattr(self, attr):
+ setattr(self, attr, fn(self))
+ return getattr(self, attr)
+ return _wrapped
+
+
class CoverageException(Exception):
"""An exception specific to Coverage."""
pass