Skip to content

Commit b0e20e3

Browse files
committed
Added legacy ctrl type to warn on no-op CLI arg passed
1 parent ce8ff95 commit b0e20e3

4 files changed

Lines changed: 37 additions & 17 deletions

File tree

remove-json-keys/src/remove_json_keys/assets/data/messages.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
"warn_NO_PROJECT_ROOT_FOUND_IN": { "message": "No project root detected in" },
2929
"warn_SPECIFIED_CONFIG": { "message": "Specified config" },
3030
"warn_NOT_FOUND": { "message": "Not found" },
31+
"warn_OPTION": { "message": "Option" },
32+
"warn_NO_LONGER_HAS_ANY_EFFECT": { "message": "no longer has any effect" },
3133
"err_UNRECOGNIZED_ARGS": { "message": "Unrecognized argument(s)" },
3234
"err_INVALID_KEY": { "message": "Invalid key" },
3335
"err_FOUND_IN": { "message": "found in" },

remove-json-keys/src/remove_json_keys/lib/settings.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,47 @@
1717
force=sn(
1818
args=['-f', '--force', '--overwrite'], action='store_true'),
1919
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),
2121
help=sn(
2222
args=['-h', '--help'], action='help'),
2323
version=sn(
2424
args=['-v', '--version'], action='store_true', exit=True, handler=lambda cli: log.version(cli) ),
2525
docs=sn(
2626
args=['--docs'], action='store_true', exit=True, handler=lambda cli: url.open(cli.urls.docs)),
2727
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')
2931
)
3032

3133
def load(cli):
3234
cli.config = sn()
3335

3436
# Assign help tips from cli.msgs
3537
for ctrl_key, ctrl in vars(controls).items():
38+
if getattr(ctrl, 'type', None) == 'legacy' : continue
3639
if not hasattr(ctrl, 'help') : ctrl.help = getattr(cli.msgs, f'help_{ctrl_key.upper()}')
3740

3841
# Parse CLI args
3942
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()
4245
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
4351
valid_argparse_kwargs = {
4452
'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 }
4654
argp.add_argument(*args, **argparse_kwargs)
4755
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
4957
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):
5361
log.help_cmd_docs_url_exit(cli, f"{cli.msgs.err_UNRECOGNIZED_ARGS}: {' '.join(unknown_args)}")
5462
for ctrl_key, ctrl in vars(controls).items(): # process subcmds
5563
if getattr(ctrl, 'subcmd', False) and next(arg for arg in ctrl.args if arg.startswith('--'))[2:] in sys.argv:

translate-messages/src/translate_messages/assets/data/messages.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
"warn_NO_PROJECT_ROOT_FOUND_IN": { "message": "No project root detected in" },
3333
"warn_SPECIFIED_CONFIG": { "message": "Specified config" },
3434
"warn_NOT_FOUND": { "message": "Not found" },
35+
"warn_OPTION": { "message": "Option" },
36+
"warn_NO_LONGER_HAS_ANY_EFFECT": { "message": "no longer has any effect" },
3537
"err_UNRECOGNIZED_ARGS": { "message": "Unrecognized argument(s)" },
3638
"err_PARSE_FAILED": { "message": "Failed to parse" },
3739
"err_TRANSLATE_FAILED_FOR_KEY": { "message": "Translation failed for key" },

translate-messages/src/translate_messages/lib/settings.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,39 +27,47 @@
2727
force=sn(
2828
args=['-f', '--force', '--overwrite'], action='store_true'),
2929
no_wizard=sn(
30-
args=['-n', '-W', '--no-wizard', '--skip-wizard'], action='store_true', default=None),
30+
args=['-n', '--no-wizard', '--skip-wizard'], action='store_true', default=None),
3131
help=sn(
3232
args=['-h', '--help'], action='help'),
3333
version=sn(
3434
args=['-v', '--version'], action='store_true', exit=True, handler=lambda cli: log.version(cli) ),
3535
docs=sn(
3636
args=['--docs'], action='store_true', exit=True, handler=lambda cli: url.open(cli.urls.docs)),
3737
debug=sn(
38-
args=['--debug'], nargs='?', const=True, metavar='TARGET_KEY' )
38+
args=['--debug'], nargs='?', const=True, metavar='TARGET_KEY' ),
39+
no_wizard_legacy=sn(
40+
args=['-W',], type='legacy')
3941
)
4042

4143
def load(cli):
4244
cli.config = sn()
4345

4446
# Assign help tips from cli.msgs
4547
for ctrl_key, ctrl in vars(controls).items():
48+
if getattr(ctrl, 'type', None) == 'legacy' : continue
4649
if not hasattr(ctrl, 'help') : ctrl.help = getattr(cli.msgs, f'help_{ctrl_key.upper()}')
4750

4851
# Parse CLI args
4952
argp = argparse.ArgumentParser(description=cli.description, add_help=False)
50-
for ctrl_key in vars(controls): # add args to argp
51-
kwargs = getattr(controls, ctrl_key).__dict__.copy()
53+
for ctrl_key, ctrl in vars(controls).items(): # add args to argp
54+
kwargs = ctrl.__dict__.copy()
5255
args = kwargs.pop('args')
56+
if getattr(ctrl, 'type', None) == 'legacy':
57+
for arg in args:
58+
if arg in sys.argv:
59+
log.warn(f'{cli.msgs.warn_OPTION} {arg} {cli.msgs.warn_NO_LONGER_HAS_ANY_EFFECT}.')
60+
continue # to parse next arg
5361
valid_argparse_kwargs = {
5462
'action', 'choices', 'const', 'default', 'dest', 'help', 'metavar', 'nargs', 'required', 'type', 'version' }
5563
argparse_kwargs = { key:val for key,val in kwargs.items() if key in valid_argparse_kwargs}
5664
argp.add_argument(*args, **argparse_kwargs)
5765
parsed_args, unknown_args = argp.parse_known_args()
58-
subcmd_flags = [] # exempt dashless args from validation
66+
exempt_flags = [] # exempt dashless + legacy args from validation
5967
for ctrl in vars(controls).values():
60-
if getattr(ctrl, 'subcmd', False):
61-
for arg in ctrl.args : subcmd_flags.append(arg)
62-
if unknown_args and not all(f'--{arg}' in subcmd_flags for arg in unknown_args):
68+
if getattr(ctrl, 'subcmd', False) or getattr(ctrl, 'type', None) == 'legacy':
69+
for arg in ctrl.args : exempt_flags.append(arg)
70+
if unknown_args and not all(any(arg.startswith(exempt) for exempt in exempt_flags) for arg in unknown_args):
6371
log.help_cmd_docs_url_exit(cli, f"{cli.msgs.err_UNRECOGNIZED_ARGS}: {' '.join(unknown_args)}")
6472
for ctrl_key, ctrl in vars(controls).items(): # process subcmds
6573
if getattr(ctrl, 'subcmd', False) and next(arg for arg in ctrl.args if arg.startswith('--'))[2:] in sys.argv:

0 commit comments

Comments
 (0)