diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2010-05-29 23:51:53 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2010-05-29 23:51:53 -0400 |
commit | ec6b5187461bfe701e0741c35375a0e341c07e78 (patch) | |
tree | ba7d374837ce77cc9c6cd2102e355a9afb0654a2 /coverage/codeunit.py | |
parent | 366d15ff4949f6f13ccae5e800248a6b624a9ee2 (diff) | |
parent | b5990d4ceb60c3028575a11f8d7fd4080411ed67 (diff) | |
download | python-coveragepy-git-ec6b5187461bfe701e0741c35375a0e341c07e78.tar.gz |
Merge latest code from main coverage.py repo
Diffstat (limited to 'coverage/codeunit.py')
-rw-r--r-- | coverage/codeunit.py | 52 |
1 files changed, 21 insertions, 31 deletions
diff --git a/coverage/codeunit.py b/coverage/codeunit.py index bb680e99..96cdb022 100644 --- a/coverage/codeunit.py +++ b/coverage/codeunit.py @@ -1,23 +1,21 @@ """Code unit (module) handling for Coverage.""" -import glob, os +import fnmatch, glob, os from coverage.backward import string_class, StringIO from coverage.misc import CoverageException -def code_unit_factory( - morfs, file_locator, omit_prefixes=None, include_prefixes=None - ): +def code_unit_factory(morfs, file_locator, omit=None, include=None): """Construct a list of CodeUnits from polymorphic inputs. `morfs` is a module or a filename, or a list of same. `file_locator` is a FileLocator that can help resolve filenames. - `include_prefixes` is a list of prefixes. Only CodeUnits that match those - prefixes will be included in the list. `omit_prefixes` is a list of - prefixes to omit from the list. + `include` is a list of filename patterns. Only CodeUnits that match those + patterns will be included in the list. `omit` is a list of patterns to omit + from the list. Returns a list of CodeUnit objects. @@ -38,39 +36,31 @@ def code_unit_factory( code_units = [CodeUnit(morf, file_locator) for morf in morfs] - if include_prefixes: - assert not isinstance(include_prefixes, string_class) # common mistake - prefixes = [file_locator.abs_file(p) for p in include_prefixes] + if include: + assert not isinstance(include, string_class) # common mistake + patterns = [file_locator.abs_file(p) for p in include] filtered = [] for cu in code_units: - for prefix in prefixes: - if cu.filename.startswith(prefix): + for pattern in patterns: + if fnmatch.fnmatch(cu.filename, pattern): filtered.append(cu) break code_units = filtered - if omit_prefixes: - code_units = omit_filter(omit_prefixes, code_units, file_locator) + if omit: + assert not isinstance(omit, string_class) # common mistake + patterns = [file_locator.abs_file(p) for p in omit] + filtered = [] + for cu in code_units: + for pattern in patterns: + if fnmatch.fnmatch(cu.filename, pattern): + break + else: + filtered.append(cu) + code_units = filtered return code_units -def omit_filter(omit_prefixes, code_units, file_locator): - """ - The filtering method removing any unwanted code_units - - Refactored out so you can easily monkeypatch if needs be - """ - prefixes = [file_locator.abs_file(p) for p in omit_prefixes] - filtered = [] - for cu in code_units: - for prefix in prefixes: - if cu.filename.startswith(prefix): - break - else: - filtered.append(cu) - - return filtered - class CodeUnit(object): """Code unit: a filename or module. |