86 lines
2.2 KiB
Python
86 lines
2.2 KiB
Python
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())
|