diff --git a/settngs/__init__.py b/settngs/__init__.py index 21edfc2..fc81ec0 100644 --- a/settngs/__init__.py +++ b/settngs/__init__.py @@ -141,10 +141,9 @@ class Setting: metavar = dest.upper() # 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] - # I believe internal name may be able to be used here + # we use internal_name as argparse sets dest to args[0] if not flag: - args = tuple((f'{group}_{names[0]}'.lstrip('_'), *names[1:])) + args = tuple((self.internal_name, *names[1:])) self.action = action self.nargs = nargs @@ -232,6 +231,7 @@ class Setting: dest_name = None flag = False + prefix = sanitize_name(prefix) for n in names: if n.startswith('--'): flag = True @@ -877,7 +877,7 @@ def _main(args: list[str] | None = None) -> None: settings_path = pathlib.Path('./settings.json') 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) 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_namespace = manager.get_namespace(merged_config, file=True, cmdline=True) - print(f'Hello {merged_config.values["example"]["hello"]}') # noqa: T201 - if merged_namespace.values.example_save: + print(f'Hello {merged_config.values["Example Group"]["hello"]}') # noqa: T201 + if merged_namespace.values.Example_Group_save: if manager.save_file(merged_config, settings_path): print(f'Successfully saved settings to {settings_path}') # noqa: T201 else: print(f'Failed saving settings to a {settings_path}') # noqa: T201 - if merged_namespace.values.example_verbose: - print(f'{merged_namespace.values.example_verbose=}') # noqa: T201 + if merged_namespace.values.Example_Group_verbose: + print(f'{merged_namespace.values.Example_Group_verbose=}') # noqa: T201 if __name__ == '__main__': diff --git a/testing/settngs.py b/testing/settngs.py index 97de527..c929655 100644 --- a/testing/settngs.py +++ b/testing/settngs.py @@ -15,52 +15,52 @@ example: list[tuple[list[str], str, str]] = [ ( ['--hello', 'lordwelch', '-s'], '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', - '{\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'], - 'Hello lordwelch\nmerged_namespace.values.example_verbose=True\n', - '{\n "example": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": false\n }\n}\n', + 'Hello lordwelch\nmerged_namespace.values.Example_Group_verbose=True\n', + '{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": false\n },\n "persistent": {\n "test": false\n }\n}\n', ), ( ['-v', '-s'], - 'Hello lordwelch\nSuccessfully saved settings to settings.json\nmerged_namespace.values.example_verbose=True\n', - '{\n "example": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false\n }\n}\n', + 'Hello lordwelch\nSuccessfully saved settings to settings.json\nmerged_namespace.values.Example_Group_verbose=True\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', - '{\n "example": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false\n }\n}\n', + 'Hello lordwelch\nmerged_namespace.values.Example_Group_verbose=True\n', + '{\n "Example Group": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false\n }\n}\n', ), ( ['manual settings.json'], - 'Hello lordwelch\nmerged_namespace.values.example_verbose=True\n', - '{\n "example": {\n "hello": "lordwelch",\n "verbose": true\n },\n "persistent": {\n "test": false,\n "hello": "world"\n }\n}\n', + 'Hello lordwelch\nmerged_namespace.values.Example_Group_verbose=True\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'], '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'], '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\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', - '{\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 = [ diff --git a/tests/settngs_test.py b/tests/settngs_test.py index 393abaf..9a70c4f 100644 --- a/tests/settngs_test.py +++ b/tests/settngs_test.py @@ -81,6 +81,11 @@ class TestValues: defaults, _ = settngs_manager.defaults() 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): 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)) @@ -161,6 +166,11 @@ class TestNamespace: defaults, _ = settngs_manager.get_namespace(settngs_manager.defaults(), file=True, cmdline=True) 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): 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)) @@ -564,7 +574,7 @@ def test_example(capsys, tmp_path, monkeypatch): for args, expected_out, expected_file in example: if args == ['manual settings.json']: 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 continue else: