diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2015-08-01 08:00:02 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2015-08-01 08:00:02 -0400 |
commit | 7756e176258fb96525f1e90ee4995c65b099b81a (patch) | |
tree | 70802f124cea75d5d86cae5b7e0a834bf24b7fe4 /coverage/control.py | |
parent | 0f9869802b1504df0479dd467cd9d1b8ca2de4c6 (diff) | |
download | python-coveragepy-7756e176258fb96525f1e90ee4995c65b099b81a.tar.gz |
Implement FileDisposition in C for speed. Final part of fix for #387.
Diffstat (limited to 'coverage/control.py')
-rw-r--r-- | coverage/control.py | 60 |
1 files changed, 28 insertions, 32 deletions
diff --git a/coverage/control.py b/coverage/control.py index 3ff7e2a..4396374 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -427,7 +427,7 @@ class Coverage(object): """ original_filename = filename - disp = FileDisposition(filename) + disp = _disposition_init(self.collector.file_disposition_class, filename) def nope(disp, reason): """Simple helper to make it easy to return NO.""" @@ -570,7 +570,7 @@ class Coverage(object): """ disp = self._should_trace_internal(filename, frame) if self.debug.should('trace'): - self.debug.write(disp.debug_message()) + self.debug.write(_disposition_debug_msg(disp)) return disp def _check_include_omit_etc(self, filename, frame): @@ -1065,36 +1065,32 @@ class Coverage(object): return info -class FileDisposition(object): - """A simple object for noting a number of details of files to trace.""" - def __init__(self, original_filename): - self.original_filename = original_filename - self.canonical_filename = original_filename - self.source_filename = None - self.trace = False - self.reason = "" - self.file_tracer = None - self.has_dynamic_filename = False - - def __repr__(self): - ret = "FileDisposition %r" % (self.original_filename,) - if self.trace: - ret += " trace" - else: - ret += " notrace=%r" % (self.reason,) - if self.file_tracer: - ret += " file_tracer=%r" % (self.file_tracer,) - return "<" + ret + ">" - - def debug_message(self): - """Produce a debugging message explaining the outcome.""" - if self.trace: - msg = "Tracing %r" % (self.original_filename,) - if self.file_tracer: - msg += ": will be traced by %r" % self.file_tracer - else: - msg = "Not tracing %r: %s" % (self.original_filename, self.reason) - return msg +# FileDisposition "methods": FileDisposition is a pure value object, so it can +# be implemented in either C or Python. Acting on them is done with these +# functions. + +def _disposition_init(cls, original_filename): + """Construct and initialize a new FileDisposition object.""" + disp = cls() + disp.original_filename = original_filename + disp.canonical_filename = original_filename + disp.source_filename = None + disp.trace = False + disp.reason = "" + disp.file_tracer = None + disp.has_dynamic_filename = False + return disp + + +def _disposition_debug_msg(disp): + """Make a nice debug message of what the FileDisposition is doing.""" + if disp.trace: + msg = "Tracing %r" % (disp.original_filename,) + if disp.file_tracer: + msg += ": will be traced by %r" % disp.file_tracer + else: + msg = "Not tracing %r: %s" % (disp.original_filename, disp.reason) + return msg def process_startup(): |