1 """Code coverage measurement for Python.
4 http://nedbatchelder.com/code/coverage
8 from coverage
.version
import __version__
, __url__
10 from coverage
.control
import coverage
, process_startup
11 from coverage
.data
import CoverageData
12 from coverage
.cmdline
import main
, CoverageScript
13 from coverage
.misc
import CoverageException
15 # Module-level functions. The original API to this module was based on
16 # functions defined directly in the module, with a singleton of the coverage()
17 # class. That design hampered programmability, so the current api uses
18 # explicitly-created coverage objects. But for backward compatibility, here we
19 # define the top-level functions to create the singleton when they are first
22 # Singleton object for use with module-level functions. The singleton is
23 # created as needed when one of the module-level functions is called.
26 def _singleton_method(name
):
27 """Return a function to the `name` method on a singleton `coverage` object.
29 The singleton object is created the first time one of these functions is
33 # Disable pylint msg W0612, because a bunch of variables look unused, but
34 # they're accessed via locals().
35 # pylint: disable=W0612
37 def wrapper(*args
, **kwargs
):
38 """Singleton wrapper around a coverage method."""
41 _the_coverage
= coverage(auto_data
=True)
42 return getattr(_the_coverage
, name
)(*args
, **kwargs
)
45 meth
= getattr(coverage
, name
)
46 args
, varargs
, kw
, defaults
= inspect
.getargspec(meth
)
47 argspec
= inspect
.formatargspec(args
[1:], varargs
, kw
, defaults
)
48 docstring
= meth
.__doc
__
49 wrapper
.__doc
__ = ("""\
50 A first-use-singleton wrapper around coverage.%(name)s.
52 This wrapper is provided for backward compatibility with legacy code.
53 New code should use coverage.%(name)s directly.
64 # Define the module-level functions.
65 use_cache
= _singleton_method('use_cache')
66 start
= _singleton_method('start')
67 stop
= _singleton_method('stop')
68 erase
= _singleton_method('erase')
69 exclude
= _singleton_method('exclude')
70 analysis
= _singleton_method('analysis')
71 analysis2
= _singleton_method('analysis2')
72 report
= _singleton_method('report')
73 annotate
= _singleton_method('annotate')
76 # On Windows, we encode and decode deep enough that something goes wrong and
77 # the encodings.utf_8 module is loaded and then unloaded, I don't know why.
78 # Adding a reference here prevents it from being unloaded. Yuk.
79 import encodings
.utf_8
81 # Because of the "from coverage.control import fooey" lines at the top of the
82 # file, there's an entry for coverage.coverage in sys.modules, mapped to None.
83 # This makes some inspection tools (like pydoc) unable to find the class
84 # coverage.coverage. So remove that entry.
87 del sys
.modules
['coverage.coverage']
92 # COPYRIGHT AND LICENSE
94 # Copyright 2001 Gareth Rees. All rights reserved.
95 # Copyright 2004-2013 Ned Batchelder. All rights reserved.
97 # Redistribution and use in source and binary forms, with or without
98 # modification, are permitted provided that the following conditions are
101 # 1. Redistributions of source code must retain the above copyright
102 # notice, this list of conditions and the following disclaimer.
104 # 2. Redistributions in binary form must reproduce the above copyright
105 # notice, this list of conditions and the following disclaimer in the
106 # documentation and/or other materials provided with the
109 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
110 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
111 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
112 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
113 # HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
114 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
115 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
116 # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
117 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
118 # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
119 # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH