def _cli_data(parser, filenames=None, known=None): ArgumentParser = type(parser) common = ArgumentParser(add_help=False) # These flags will get processed by the top-level parse_args(). add_verbosity_cli(common) add_traceback_cli(common) subs = parser.add_subparsers(dest='datacmd') sub = subs.add_parser('show', parents=[common]) if known is None: sub.add_argument('--known', required=True) if filenames is None: sub.add_argument('filenames', metavar='FILE', nargs='+') sub = subs.add_parser('dump', parents=[common]) if known is None: sub.add_argument('--known') sub.add_argument('--show', action='store_true') process_progress = add_progress_cli(sub) sub = subs.add_parser('check', parents=[common]) if known is None: sub.add_argument('--known', required=True) def process_args(args): if args.datacmd == 'dump': process_progress(args) return process_args
def _cli_analyze(parser, **kwargs): process_progress = add_progress_cli(parser) process_output = add_output_cli(parser) process_files = add_files_cli(parser, **kwargs) return [ process_progress, process_output, process_files, ]
def _cli_check(parser, checks=None, **kwargs): if isinstance(checks, str): checks = [checks] if checks is False: process_checks = None elif checks is None: process_checks = add_checks_cli(parser) elif len(checks) == 1 and type(checks) is not dict and re.match(r'^<.*>$', checks[0]): check = checks[0][1:-1] def process_checks(args, *, argv=None): args.checks = [check] else: process_checks = add_checks_cli(parser, checks=checks) process_progress = add_progress_cli(parser) process_output = add_output_cli(parser, default=None) process_files = add_files_cli(parser, **kwargs) return [ process_checks, process_progress, process_output, process_files, ]
def _cli_capi(parser): parser.add_argument('--levels', action='append', metavar='LEVEL[,...]') parser.add_argument(f'--public', dest='levels', action='append_const', const='public') parser.add_argument(f'--no-public', dest='levels', action='append_const', const='no-public') for level in _capi.LEVELS: parser.add_argument(f'--{level}', dest='levels', action='append_const', const=level) def process_levels(args, *, argv=None): levels = [] for raw in args.levels or (): for level in raw.replace(',', ' ').strip().split(): if level == 'public': levels.append('stable') levels.append('cpython') elif level == 'no-public': levels.append('private') levels.append('internal') elif level in _capi.LEVELS: levels.append(level) else: parser.error( f'expected LEVEL to be one of {sorted(_capi.LEVELS)}, got {level!r}' ) args.levels = set(levels) parser.add_argument('--kinds', action='append', metavar='KIND[,...]') for kind in _capi.KINDS: parser.add_argument(f'--{kind}', dest='kinds', action='append_const', const=kind) def process_kinds(args, *, argv=None): kinds = [] for raw in args.kinds or (): for kind in raw.replace(',', ' ').strip().split(): if kind in _capi.KINDS: kinds.append(kind) else: parser.error( f'expected KIND to be one of {sorted(_capi.KINDS)}, got {kind!r}' ) args.kinds = set(kinds) parser.add_argument('--group-by', dest='groupby', choices=['level', 'kind']) parser.add_argument('--format', default='table') parser.add_argument('--summary', dest='format', action='store_const', const='summary') def process_format(args, *, argv=None): orig = args.format args.format = _capi.resolve_format(args.format) if isinstance(args.format, str): if args.format not in _capi._FORMATS: parser.error(f'unsupported format {orig!r}') parser.add_argument('--show-empty', dest='showempty', action='store_true') parser.add_argument('--no-show-empty', dest='showempty', action='store_false') parser.set_defaults(showempty=None) # XXX Add --sort-by, --sort and --no-sort. parser.add_argument('--ignore', dest='ignored', action='append') def process_ignored(args, *, argv=None): ignored = [] for raw in args.ignored or (): ignored.extend(raw.replace(',', ' ').strip().split()) args.ignored = ignored or None parser.add_argument('filenames', nargs='*', metavar='FILENAME') process_progress = add_progress_cli(parser) return [ process_levels, process_kinds, process_format, process_ignored, process_progress, ]