|
17 | 17 | force=sn( |
18 | 18 | args=['-f', '--force', '--overwrite'], action='store_true'), |
19 | 19 | no_wizard=sn( |
20 | | - args=['-n', '-W', '--no-wizard', '--skip-wizard'], action='store_true', default=None), |
| 20 | + args=['-n', '--no-wizard', '--skip-wizard'], action='store_true', default=None), |
21 | 21 | help=sn( |
22 | 22 | args=['-h', '--help'], action='help'), |
23 | 23 | version=sn( |
24 | 24 | args=['-v', '--version'], action='store_true', exit=True, handler=lambda cli: log.version(cli) ), |
25 | 25 | docs=sn( |
26 | 26 | args=['--docs'], action='store_true', exit=True, handler=lambda cli: url.open(cli.urls.docs)), |
27 | 27 | debug=sn( |
28 | | - args=['--debug'], nargs='?', const=True, metavar='TARGET_KEY' ) |
| 28 | + args=['--debug'], nargs='?', const=True, metavar='TARGET_KEY' ), |
| 29 | + no_wizard_legacy=sn( |
| 30 | + args=['-W',], type='legacy') |
29 | 31 | ) |
30 | 32 |
|
31 | 33 | def load(cli): |
32 | 34 | cli.config = sn() |
33 | 35 |
|
34 | 36 | # Assign help tips from cli.msgs |
35 | 37 | for ctrl_key, ctrl in vars(controls).items(): |
| 38 | + if getattr(ctrl, 'type', None) == 'legacy' : continue |
36 | 39 | if not hasattr(ctrl, 'help') : ctrl.help = getattr(cli.msgs, f'help_{ctrl_key.upper()}') |
37 | 40 |
|
38 | 41 | # Parse CLI args |
39 | 42 | argp = argparse.ArgumentParser(description=cli.description, add_help=False) |
40 | | - for ctrl_key in vars(controls): # add args to argp |
41 | | - kwargs = getattr(controls, ctrl_key).__dict__.copy() |
| 43 | + for ctrl_key, ctrl in vars(controls).items(): # add args to argp |
| 44 | + kwargs = ctrl.__dict__.copy() |
42 | 45 | args = kwargs.pop('args') |
| 46 | + if getattr(ctrl, 'type', None) == 'legacy': |
| 47 | + for arg in args: |
| 48 | + if arg in sys.argv: |
| 49 | + log.warn(f'{cli.msgs.warn_OPTION} {arg} {cli.msgs.warn_NO_LONGER_HAS_ANY_EFFECT}.') |
| 50 | + continue # to parse next arg |
43 | 51 | valid_argparse_kwargs = { |
44 | 52 | 'action', 'choices', 'const', 'default', 'dest', 'help', 'metavar', 'nargs', 'required', 'type', 'version' } |
45 | | - argparse_kwargs = { key:val for key,val in kwargs.items() if key in valid_argparse_kwargs} |
| 53 | + argparse_kwargs = { key:val for key,val in kwargs.items() if key in valid_argparse_kwargs } |
46 | 54 | argp.add_argument(*args, **argparse_kwargs) |
47 | 55 | parsed_args, unknown_args = argp.parse_known_args() |
48 | | - subcmd_flags = [] # exempt dashless args from validation |
| 56 | + exempt_flags = [] # exempt dashless + legacy args from validation |
49 | 57 | for ctrl in vars(controls).values(): |
50 | | - if getattr(ctrl, 'subcmd', False): |
51 | | - for arg in ctrl.args : subcmd_flags.append(arg) |
52 | | - if unknown_args and not all(f'--{arg}' in subcmd_flags for arg in unknown_args): |
| 58 | + if getattr(ctrl, 'subcmd', False) or getattr(ctrl, 'type', None) == 'legacy': |
| 59 | + for arg in ctrl.args : exempt_flags.append(arg) |
| 60 | + if unknown_args and not all(any(arg.startswith(exempt) for exempt in exempt_flags) for arg in unknown_args): |
53 | 61 | log.help_cmd_docs_url_exit(cli, f"{cli.msgs.err_UNRECOGNIZED_ARGS}: {' '.join(unknown_args)}") |
54 | 62 | for ctrl_key, ctrl in vars(controls).items(): # process subcmds |
55 | 63 | if getattr(ctrl, 'subcmd', False) and next(arg for arg in ctrl.args if arg.startswith('--'))[2:] in sys.argv: |
|
0 commit comments