Sanitize group names
This commit is contained in:
parent
2f000e12f3
commit
101eef56ca
@ -141,10 +141,9 @@ class Setting:
|
|||||||
metavar = dest.upper()
|
metavar = dest.upper()
|
||||||
|
|
||||||
# If we are not a flag, no '--' or '-' in front
|
# If we are not a flag, no '--' or '-' in front
|
||||||
# we prefix the first name with the group as argparse sets dest to args[0]
|
# we use internal_name as argparse sets dest to args[0]
|
||||||
# I believe internal name may be able to be used here
|
|
||||||
if not flag:
|
if not flag:
|
||||||
args = tuple((f'{group}_{names[0]}'.lstrip('_'), *names[1:]))
|
args = tuple((self.internal_name, *names[1:]))
|
||||||
|
|
||||||
self.action = action
|
self.action = action
|
||||||
self.nargs = nargs
|
self.nargs = nargs
|
||||||
@ -232,6 +231,7 @@ class Setting:
|
|||||||
dest_name = None
|
dest_name = None
|
||||||
flag = False
|
flag = False
|
||||||
|
|
||||||
|
prefix = sanitize_name(prefix)
|
||||||
for n in names:
|
for n in names:
|
||||||
if n.startswith('--'):
|
if n.startswith('--'):
|
||||||
flag = True
|
flag = True
|
||||||
@ -877,7 +877,7 @@ def _main(args: list[str] | None = None) -> None:
|
|||||||
settings_path = pathlib.Path('./settings.json')
|
settings_path = pathlib.Path('./settings.json')
|
||||||
manager = Manager(description='This is an example', epilog='goodbye!')
|
manager = Manager(description='This is an example', epilog='goodbye!')
|
||||||
|
|
||||||
manager.add_group('example', example_group)
|
manager.add_group('Example Group', example_group)
|
||||||
manager.add_persistent_group('persistent', persistent_group)
|
manager.add_persistent_group('persistent', persistent_group)
|
||||||
|
|
||||||
file_config, success = manager.parse_file(settings_path)
|
file_config, success = manager.parse_file(settings_path)
|
||||||
@ -886,14 +886,14 @@ def _main(args: list[str] | None = None) -> None:
|
|||||||
merged_config = manager.parse_cmdline(args=args, config=file_namespace)
|
merged_config = manager.parse_cmdline(args=args, config=file_namespace)
|
||||||
merged_namespace = manager.get_namespace(merged_config, file=True, cmdline=True)
|
merged_namespace = manager.get_namespace(merged_config, file=True, cmdline=True)
|
||||||
|
|
||||||
print(f'Hello {merged_config.values["example"]["hello"]}') # noqa: T201
|
print(f'Hello {merged_config.values["Example Group"]["hello"]}') # noqa: T201
|
||||||
if merged_namespace.values.example_save:
|
if merged_namespace.values.Example_Group_save:
|
||||||
if manager.save_file(merged_config, settings_path):
|
if manager.save_file(merged_config, settings_path):
|
||||||
print(f'Successfully saved settings to {settings_path}') # noqa: T201
|
print(f'Successfully saved settings to {settings_path}') # noqa: T201
|
||||||
else:
|
else:
|
||||||
print(f'Failed saving settings to a {settings_path}') # noqa: T201
|
print(f'Failed saving settings to a {settings_path}') # noqa: T201
|
||||||
if merged_namespace.values.example_verbose:
|
if merged_namespace.values.Example_Group_verbose:
|
||||||
print(f'{merged_namespace.values.example_verbose=}') # noqa: T201
|
print(f'{merged_namespace.values.Example_Group_verbose=}') # noqa: T201
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -15,52 +15,52 @@ example: list[tuple[list[str], str, str]] = [
|
|||||||
(
|
(
|
||||||
['--hello', 'lordwelch', '-s'],
|
['--hello', 'lordwelch', '-s'],
|
||||||
'Hello lordwelch\nSuccessfully saved settings to settings.json\n',
|
'Hello lordwelch\nSuccessfully saved settings to settings.json\n',
|
||||||
'{\n "example": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": false\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": false\n }\n}\n',
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
[],
|
[],
|
||||||
'Hello lordwelch\n',
|
'Hello lordwelch\n',
|
||||||
'{\n "example": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": false\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": false\n }\n}\n',
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
['-v'],
|
['-v'],
|
||||||
'Hello lordwelch\nmerged_namespace.values.example_verbose=True\n',
|
'Hello lordwelch\nmerged_namespace.values.Example_Group_verbose=True\n',
|
||||||
'{\n "example": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": false\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": false\n }\n}\n',
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
['-v', '-s'],
|
['-v', '-s'],
|
||||||
'Hello lordwelch\nSuccessfully saved settings to settings.json\nmerged_namespace.values.example_verbose=True\n',
|
'Hello lordwelch\nSuccessfully saved settings to settings.json\nmerged_namespace.values.Example_Group_verbose=True\n',
|
||||||
'{\n "example": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false\n }\n}\n',
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
[],
|
[],
|
||||||
'Hello lordwelch\nmerged_namespace.values.example_verbose=True\n',
|
'Hello lordwelch\nmerged_namespace.values.Example_Group_verbose=True\n',
|
||||||
'{\n "example": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false\n }\n}\n',
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
['manual settings.json'],
|
['manual settings.json'],
|
||||||
'Hello lordwelch\nmerged_namespace.values.example_verbose=True\n',
|
'Hello lordwelch\nmerged_namespace.values.Example_Group_verbose=True\n',
|
||||||
'{\n "example": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n',
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
['--no-verbose', '-t'],
|
['--no-verbose', '-t'],
|
||||||
'Hello lordwelch\n',
|
'Hello lordwelch\n',
|
||||||
'{\n "example": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n',
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
['--no-verbose', '-s', '-t'],
|
['--no-verbose', '-s', '-t'],
|
||||||
'Hello lordwelch\nSuccessfully saved settings to settings.json\n',
|
'Hello lordwelch\nSuccessfully saved settings to settings.json\n',
|
||||||
'{\n "example": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": true,\n "hello": "world"\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": true,\n "hello": "world"\n }\n}\n',
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
['--hello', 'world', '--no-verbose', '--no-test', '-s'],
|
['--hello', 'world', '--no-verbose', '--no-test', '-s'],
|
||||||
'Hello world\nSuccessfully saved settings to settings.json\n',
|
'Hello world\nSuccessfully saved settings to settings.json\n',
|
||||||
'{\n "example": {\n "hello": "world",\n "verbose": false\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "world",\n "verbose": false\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n',
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
[],
|
[],
|
||||||
'Hello world\n',
|
'Hello world\n',
|
||||||
'{\n "example": {\n "hello": "world",\n "verbose": false\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n',
|
'{\n "Example Group": {\n "hello": "world",\n "verbose": false\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n',
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
success = [
|
success = [
|
||||||
|
@ -81,6 +81,11 @@ class TestValues:
|
|||||||
defaults, _ = settngs_manager.defaults()
|
defaults, _ = settngs_manager.defaults()
|
||||||
assert defaults['tst']['test'] == 'hello'
|
assert defaults['tst']['test'] == 'hello'
|
||||||
|
|
||||||
|
def test_get_defaults_group_space(self, settngs_manager):
|
||||||
|
settngs_manager.add_group('Testing tst', lambda parser: parser.add_setting('--test', default='hello'))
|
||||||
|
defaults, _ = settngs_manager.defaults()
|
||||||
|
assert defaults['Testing tst']['test'] == 'hello'
|
||||||
|
|
||||||
def test_cmdline_only(self, settngs_manager):
|
def test_cmdline_only(self, settngs_manager):
|
||||||
settngs_manager.add_group('tst', lambda parser: parser.add_setting('--test', default='hello', file=False))
|
settngs_manager.add_group('tst', lambda parser: parser.add_setting('--test', default='hello', file=False))
|
||||||
settngs_manager.add_group('tst2', lambda parser: parser.add_setting('--test2', default='hello', cmdline=False))
|
settngs_manager.add_group('tst2', lambda parser: parser.add_setting('--test2', default='hello', cmdline=False))
|
||||||
@ -161,6 +166,11 @@ class TestNamespace:
|
|||||||
defaults, _ = settngs_manager.get_namespace(settngs_manager.defaults(), file=True, cmdline=True)
|
defaults, _ = settngs_manager.get_namespace(settngs_manager.defaults(), file=True, cmdline=True)
|
||||||
assert defaults.tst_test == 'hello'
|
assert defaults.tst_test == 'hello'
|
||||||
|
|
||||||
|
def test_get_defaults_group_space(self, settngs_manager):
|
||||||
|
settngs_manager.add_group('Testing tst', lambda parser: parser.add_setting('--test', default='hello'))
|
||||||
|
defaults, _ = settngs_manager.get_namespace(settngs_manager.defaults(), file=True, cmdline=True)
|
||||||
|
assert defaults.Testing_tst_test == 'hello'
|
||||||
|
|
||||||
def test_cmdline_only(self, settngs_manager):
|
def test_cmdline_only(self, settngs_manager):
|
||||||
settngs_manager.add_group('tst', lambda parser: parser.add_setting('--test', default='hello', file=False))
|
settngs_manager.add_group('tst', lambda parser: parser.add_setting('--test', default='hello', file=False))
|
||||||
settngs_manager.add_group('tst2', lambda parser: parser.add_setting('--test2', default='hello', cmdline=False))
|
settngs_manager.add_group('tst2', lambda parser: parser.add_setting('--test2', default='hello', cmdline=False))
|
||||||
@ -564,7 +574,7 @@ def test_example(capsys, tmp_path, monkeypatch):
|
|||||||
for args, expected_out, expected_file in example:
|
for args, expected_out, expected_file in example:
|
||||||
if args == ['manual settings.json']:
|
if args == ['manual settings.json']:
|
||||||
settings_file.unlink()
|
settings_file.unlink()
|
||||||
settings_file.write_text('{\n "example": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n')
|
settings_file.write_text('{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n')
|
||||||
i += 1
|
i += 1
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user