|
8 | 8 | import uuid |
9 | 9 | from calendar import Calendar, TextCalendar |
10 | 10 | from collections import OrderedDict |
11 | | -from dataclasses import dataclass |
| 11 | +from dataclasses import dataclass, field |
12 | 12 | from enum import Enum |
13 | 13 | from pathlib import Path |
14 | 14 | from types import MappingProxyType |
@@ -580,6 +580,33 @@ def test_dict_command_line_set_items(parser): |
580 | 580 | assert cfg.dict == {"one": 1, "two": 2} |
581 | 581 |
|
582 | 582 |
|
| 583 | +@dataclass |
| 584 | +class _Vals: |
| 585 | + val_0: int = 0 |
| 586 | + val_1: int = 0 |
| 587 | + |
| 588 | + |
| 589 | +@dataclass |
| 590 | +class _Cfg: |
| 591 | + """Needs to be defined outside of test_nested_dict_command_line_set_items""" |
| 592 | + |
| 593 | + vals: dict[str, _Vals] = field(default_factory=dict) |
| 594 | + |
| 595 | + |
| 596 | +def test_nested_dict_command_line_set_items(parser): |
| 597 | + parser.add_class_arguments(_Cfg, nested_key="cfg") |
| 598 | + |
| 599 | + # works before #824 |
| 600 | + args = ["--cfg", '{"vals": {"a": {"val_0": 0, "val_1": 1}}}', "--cfg.vals.a", '{"val_0": 100}'] |
| 601 | + cfg = parser.parse_args(args).cfg |
| 602 | + assert (cfg.vals["a"].val_0, cfg.vals["a"].val_1) == (100, 1) |
| 603 | + |
| 604 | + # does not work before #824 |
| 605 | + args = ["--cfg", '{"vals": {"a": {"val_0": 0, "val_1": 1}}}', "--cfg.vals.a.val_0", "100"] |
| 606 | + cfg = parser.parse_args(args).cfg |
| 607 | + assert (cfg.vals["a"].val_0, cfg.vals["a"].val_1) == (100, 1) |
| 608 | + |
| 609 | + |
583 | 610 | def test_dict_command_line_set_items_with_space(parser): |
584 | 611 | parser.add_argument("--dict", type=dict) |
585 | 612 | cfg = parser.parse_args(["--dict.a=x y"]) |
|
0 commit comments