Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix a bug introduced in #117. It affects the DASH option in the nested mode #129

Merged
merged 9 commits into from
May 3, 2022
1 change: 1 addition & 0 deletions simple_parsing/wrappers/field_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,7 @@ def add_args(dash:str, candidates: List[str]) -> None:
nested_option = self.dest if nested_mode == NestedMode.DEFAULT else ".".join(self.dest.split(".")[1:])
if add_dash_variants == DashVariant.DASH:
option = option.replace("_", "-")
nested_option = nested_option.replace("_", "-")

if self.field.metadata.get("positional"):
# Can't be positional AND have flags at same time. Also, need dest to be be this and not just option.
Expand Down
40 changes: 33 additions & 7 deletions test/test_custom_args.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,30 +164,56 @@ def test_store_false_action():


def test_only_dashes():
@dataclass
class AClass(TestSetup):
"""foo"""

a_var: int


@dataclass
class SomeClass(TestSetup):
"""lol"""

my_var: int
a: AClass

assert_help_output_equals(
SomeClass.get_help_text(add_option_string_dash_variants=DashVariant.DASH),
textwrap.dedent(
"""\
usage: pytest [-h] --my-var int
usage: pytest [-h] --my-var int --a-var int

optional arguments:
-h, --help show this help message and exit

-h, --help show this help message and exit
test_only_dashes.<locals>.SomeClass ['some_class']:
lol

--my-var int
lol

--my-var int

test_only_dashes.<locals>.AClass ['some_class.a']:
foo

--a-var int
"""
),
)
sc = SomeClass.setup("--my-var 2", add_option_string_dash_variants=DashVariant.DASH)
sc = SomeClass.setup("--my-var 2 --a-var 3", add_option_string_dash_variants=DashVariant.DASH)
assert sc.my_var == 2
assert sc.a.a_var == 3
sc = SomeClass.setup("--some-class.my-var 2 --some-class.a.a-var 3",
add_option_string_dash_variants=DashVariant.DASH,
argument_generation_mode=ArgumentGenerationMode.NESTED)
assert sc.my_var == 2
assert sc.a.a_var == 3
sc = SomeClass.setup("--my-var 2 --a.a-var 3",
add_option_string_dash_variants=DashVariant.DASH,
argument_generation_mode=ArgumentGenerationMode.NESTED,
nested_mode=NestedMode.WITHOUT_ROOT)
assert sc.my_var == 2
assert sc.a.a_var == 3



def test_list_of_choices():
Expand Down