File: testing.py

package info (click to toggle)
python-tatsu 5.17.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,516 kB
  • sloc: python: 13,185; makefile: 127
file content (103 lines) | stat: -rw-r--r-- 2,520 bytes parent folder | download
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
# Copyright (c) 2017-2026 Juancarlo AƱez (apalala@gmail.com)
# SPDX-License-Identifier: BSD-4-Clause
from __future__ import annotations

import argparse

from .common 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(filenames, parse, 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())