From 6f592119a1c088148af82d5de8289063a62250cd Mon Sep 17 00:00:00 2001 From: Tim Schoof Date: Fri, 25 Sep 2020 11:33:06 +0200 Subject: [PATCH 1/3] Add cli parser test for flattened configuration --- tests/test_configuration.py | 45 +++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/test_configuration.py b/tests/test_configuration.py index 83cd0c6..f35b852 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -367,3 +367,48 @@ def test_default_value_given(): options = parsed_args_to_dict(parsed_args) assert not options + + +def test_merge_identical_flattened_config_entries_cli(capsys): + """ + CLI parser with flattened configurables is equal to parser for flat + configurable. + + See also test_configurable.test_flattened_config_entries + """ + @Configurable + class SubSubClass: + a = Config("a") + b = Config("b") + + @Configurable + class SubClass: + b = Config("b") + subsubinstance = Config( + "SubSubClass instance", type=SubSubClass, flatten=True) + c = Config("c", default=3) + + @Configurable + class Test: + a = Config("a") + subinstance = Config( + "SubClass instance", type=SubClass, flatten=True) + c = Config("c", default=3) + + parser = create_cli_parser_from_configurable_class(Test) + parser.print_help() + + captured_flattened = capsys.readouterr() + + @Configurable + class Test: + a = Config("a") + b = Config("b") + c = Config("c", default=3) + + parser = create_cli_parser_from_configurable_class(Test) + parser.print_help() + + captured_flat = capsys.readouterr() + + assert captured_flattened == captured_flat -- GitLab From 7f4a4cabdb58c83431234cf03779bf04f6943576 Mon Sep 17 00:00:00 2001 From: Tim Schoof Date: Fri, 25 Sep 2020 13:04:08 +0200 Subject: [PATCH 2/3] Add test for flattened builder config in parent This test case was derived from a MWE that failed in a conda environment --- tests/test_configuration.py | 39 +++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/test_configuration.py b/tests/test_configuration.py index f35b852..fb6dfb0 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -412,3 +412,42 @@ def test_merge_identical_flattened_config_entries_cli(capsys): captured_flat = capsys.readouterr() assert captured_flattened == captured_flat + + +def test_merge_flattened_config_from_builder_in_parent_cli(capsys): + """ + Flattened config options from builder function are merged with identical + config options of a parent class. + """ + + def create_object(arg): + return 2*arg + + @Configurable + class Container: + member = Config( + "A member", type=str, + builder=create_object, flatten=True, arguments=dict( + arg=Config("An argument", type=str, default="") + )) + arg = Config("An argument", type=str, default="") + + @Configurable + class Test(Container): + pass + + parser = create_cli_parser_from_configurable_class(Test) + parser.print_help() + + captured_flattened = capsys.readouterr() + + @Configurable + class Test: + arg = Config("An argument", type=str, default="") + + parser = create_cli_parser_from_configurable_class(Test) + parser.print_help() + + captured_flat = capsys.readouterr() + + assert captured_flattened == captured_flat -- GitLab From e71b59f704a30e9b07dd9d13396bd2cd8076e6a4 Mon Sep 17 00:00:00 2001 From: Tim Schoof Date: Wed, 7 Oct 2020 16:56:34 +0000 Subject: [PATCH 3/3] Add comment about failure with attrs version 20.1.0 --- tests/test_configuration.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_configuration.py b/tests/test_configuration.py index fb6dfb0..08f67b2 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -418,6 +418,9 @@ def test_merge_flattened_config_from_builder_in_parent_cli(capsys): """ Flattened config options from builder function are merged with identical config options of a parent class. + + This test fails with attrs version 20.1.0 due to a regression in attrs. + The regression is fixed in attrs version 20.2.0. """ def create_object(arg): -- GitLab