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
|
import argparse
from . import filelist_from_patterns
from .parproc import processing_loop
def parallel_test_run(parse, options):
def pysearch(pattern):
if pattern.endswith('.py'):
return pattern
else:
if not pattern.endswith('/'):
pattern += '/'
if '**' not in pattern:
pattern += '**/'
return pattern + '*.py'
try:
patterns = [pysearch(p) for p in options.patterns]
filenames = filelist_from_patterns(
patterns, sizesort=options.sort, ignore=options.ignore,
)
kwargs = vars(options)
kwargs.pop('patterns', None)
kwargs.pop('sort', None)
kwargs.pop('ignore', None)
parallel = not kwargs.pop('serial', False)
return processing_loop(parse, filenames, parallel=parallel, **kwargs)
except KeyboardInterrupt:
if options.verbose:
raise
def parse_args():
argparser = argparse.ArgumentParser(
prog=__package__,
# description=DESCRIPTION,
add_help=False,
)
argparser.add_argument(
'patterns', nargs='+', metavar='PATTERNS', help='filename patterns',
)
argparser.add_argument(
'--help', '-h', help='show this help message and exit', action='help',
)
argparser.add_argument(
'--ignore',
'-i',
metavar='PATTERN',
help='ignore these patterns',
action='append',
)
argparser.add_argument(
'--sort', '-s', help='sort files by size', action='store_true',
)
argparser.add_argument(
'--serial', '-S', help='do not run in parallel', action='store_true',
)
argparser.add_argument(
'--trace',
'-t',
help='produce verbose output for a parse',
action='store_true',
)
argparser.add_argument(
'--verbose',
'-v',
help='output exceptions as they happen',
action='store_true',
)
argparser.add_argument(
'--exitfirst',
'-x',
help='output exceptions as they happen',
action='store_true',
)
return argparser.parse_args()
def generic_main(parse):
return parallel_test_run(parse, parse_args())
|