1"""Code coverage measurement for Python. 2 3Ned Batchelder 4http://nedbatchelder.com/code/coverage 5 6""" 7 8__version__ = "3.5.1" # see detailed history in CHANGES.txt 9 10__url__ = "http://nedbatchelder.com/code/coverage" 11if max(__version__).isalpha(): 12 # For pre-releases, use a version-specific URL. 13 __url__ += "/" + __version__ 14 15from coverage.control import coverage, process_startup 16from coverage.data import CoverageData 17from coverage.cmdline import main, CoverageScript 18from coverage.misc import CoverageException 19 20 21# Module-level functions. The original API to this module was based on 22# functions defined directly in the module, with a singleton of the coverage() 23# class. That design hampered programmability, so the current api uses 24# explicitly-created coverage objects. But for backward compatibility, here we 25# define the top-level functions to create the singleton when they are first 26# called. 27 28# Singleton object for use with module-level functions. The singleton is 29# created as needed when one of the module-level functions is called. 30_the_coverage = None 31 32def _singleton_method(name): 33 """Return a function to the `name` method on a singleton `coverage` object. 34 35 The singleton object is created the first time one of these functions is 36 called. 37 38 """ 39 def wrapper(*args, **kwargs): 40 """Singleton wrapper around a coverage method.""" 41 global _the_coverage 42 if not _the_coverage: 43 _the_coverage = coverage(auto_data=True) 44 return getattr(_the_coverage, name)(*args, **kwargs) 45 return wrapper 46 47 48# Define the module-level functions. 49use_cache = _singleton_method('use_cache') 50start = _singleton_method('start') 51stop = _singleton_method('stop') 52erase = _singleton_method('erase') 53exclude = _singleton_method('exclude') 54analysis = _singleton_method('analysis') 55analysis2 = _singleton_method('analysis2') 56report = _singleton_method('report') 57annotate = _singleton_method('annotate') 58 59 60# COPYRIGHT AND LICENSE 61# 62# Copyright 2001 Gareth Rees. All rights reserved. 63# Copyright 2004-2010 Ned Batchelder. All rights reserved. 64# 65# Redistribution and use in source and binary forms, with or without 66# modification, are permitted provided that the following conditions are 67# met: 68# 69# 1. Redistributions of source code must retain the above copyright 70# notice, this list of conditions and the following disclaimer. 71# 72# 2. Redistributions in binary form must reproduce the above copyright 73# notice, this list of conditions and the following disclaimer in the 74# documentation and/or other materials provided with the 75# distribution. 76# 77# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 78# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 79# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 80# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 81# HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 82# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 83# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 84# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 85# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 86# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 87# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 88# DAMAGE. 89