/usr/lib/python2.7/dist-packages/nose_exclude.py is in python-nose-exclude 0.2.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | import os
import logging
from nose.plugins import Plugin
log = logging.getLogger('nose.plugins.nose_exclude')
class NoseExclude(Plugin):
def options(self, parser, env=os.environ):
"""Define the command line options for the plugin."""
super(NoseExclude, self).options(parser, env)
env_dirs = []
env_tests = []
if 'NOSE_EXCLUDE_DIRS' in env:
exclude_dirs = env.get('NOSE_EXCLUDE_DIRS', '')
env_dirs.extend(exclude_dirs.split(';'))
parser.add_option(
"--exclude-dir", action="append",
dest="exclude_dirs",
default=env_dirs,
help="Directory to exclude from test discovery. \
Path can be relative to current working directory \
or an absolute path. May be specified multiple \
times. [NOSE_EXCLUDE_DIRS]")
parser.add_option(
"--exclude-dir-file", type="string",
dest="exclude_dir_file",
default=env.get('NOSE_EXCLUDE_DIRS_FILE', False),
help="A file containing a list of directories to exclude \
from test discovery. Paths can be relative to current \
working directory or an absolute path. \
[NOSE_EXCLUDE_DIRS_FILE]")
parser.add_option(
"--exclude-test", action="append",
dest="exclude_tests",
default=env_tests,
help="Fully qualified name of test method or class to exclude \
from test discovery.")
parser.add_option(
"--exclude-test-file", type="string",
dest="exclude_test_file",
default=False,
help="A file containing a list of fully qualified names of \
test methods or classes to exclude from test discovery.")
def _force_to_abspath(self, pathname, root):
if os.path.isabs(pathname):
abspath = pathname
else:
abspath = os.path.abspath(os.path.join(root, pathname))
if os.path.exists(abspath):
return abspath
else:
log.warning('The following path was not found: %s' % pathname)
def _load_from_file(self, filename):
with open(filename, 'r') as infile:
new_list = [l.strip() for l in infile.readlines() if l.strip()
and not l.startswith('#')]
return new_list
def configure(self, options, conf):
"""Configure plugin based on command line options"""
super(NoseExclude, self).configure(options, conf)
self.exclude_dirs = {}
self.exclude_tests = options.exclude_tests[:]
# preload directories from file
if options.exclude_dir_file:
if not options.exclude_dirs:
options.exclude_dirs = []
new_dirs = self._load_from_file(options.exclude_dir_file)
options.exclude_dirs.extend(new_dirs)
if options.exclude_test_file:
exc_tests = self._load_from_file(options.exclude_test_file)
self.exclude_tests.extend(exc_tests)
if not options.exclude_dirs and not self.exclude_tests:
self.enabled = False
return
self.enabled = True
if conf and conf.workingDir:
# Use nose's working directory
root = conf.workingDir
else:
root = os.getcwd()
log.debug('cwd: %s' % root)
# Normalize excluded directory names for lookup
for exclude_param in options.exclude_dirs:
# when using setup.cfg, you can specify only one 'exclude-dir'
# separated by some character (new line is good enough)
for d in exclude_param.split('\n'):
d = d.strip()
abs_d = self._force_to_abspath(d, root)
if abs_d:
self.exclude_dirs[abs_d] = True
exclude_str = "excluding dirs: %s" % ",".join(self.exclude_dirs.keys())
log.debug(exclude_str)
def wantDirectory(self, dirname):
"""Check if directory is eligible for test discovery"""
if dirname in self.exclude_dirs:
log.debug("excluded: %s" % dirname)
return False
else:
return None
def wantModule(self, module):
"""Filter out tests based on: <module path>.<module name>"""
if module.__name__ in self.exclude_tests:
return False
else:
return None
def wantFunction(self, fun):
"""Filter out tests based on: <module path>.<func name>"""
fqn = '%s.%s' % (fun.__module__, fun.__name__)
if fqn in self.exclude_tests:
return False
else:
return None
def wantMethod(self, meth):
"""Filter out tests based on <module path>.<class>.<method name>"""
try:
cls = meth.im_class # Don't test static methods
except AttributeError:
return False
fqn = '%s.%s.%s' % (cls.__module__, cls.__name__, meth.__name__)
if fqn in self.exclude_tests:
return False
else:
return None
def wantClass(self, cls):
"""Filter out the class based on <module path>.<class name>"""
fqn = '%s.%s' % (cls.__module__, cls.__name__)
if fqn in self.exclude_tests:
return False
else:
return None
|