Skip to content

Commit

Permalink
feat(node.py): add clear()
Browse files Browse the repository at this point in the history
  • Loading branch information
Artem Vasenin committed Apr 22, 2021
1 parent 841af5c commit 5059c2d
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
10 changes: 10 additions & 0 deletions ntc/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,16 @@ def _value_to_set_from_value(self, full_key: str, value: Any) -> CfgLeaf:
return leaf
return CfgLeaf(value, type(value), required=True, full_key=full_key)

def clear(self) -> None:
if self._frozen:
raise AttributeError(f"Can't clear a frozen CfgNode: {self.full_key}")
if self._schema_frozen and not self._new_allowed:
raise AttributeError(
f"Can only clear CfgNode when _new_allowed == True if schema is frozen: {self.full_key}"
)
for key in list(self.keys()):
del self[key]


CN = CfgNode

Expand Down
24 changes: 24 additions & 0 deletions tests/test_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,3 +194,27 @@ def test_init_from_dict():
def test_properties(basic_cfg):
for name in ["schema_frozen", "frozen", "leaf_spec"]:
getattr(basic_cfg, name)


def test_clear_happy_path():
cfg = CfgNode(new_allowed=True)
cfg.freeze_schema()
cfg.test = "test"

cfg.clear()
assert not cfg.keys()


def test_clear_schema_frozen_new_not_allowed(basic_cfg):
basic_cfg.freeze_schema()
with pytest.raises(AttributeError):
basic_cfg.clear()


def test_clear_frozen():
cfg = CfgNode(new_allowed=True)
cfg.freeze_schema()
cfg.test = "test"
cfg.freeze()
with pytest.raises(AttributeError):
cfg.clear()

0 comments on commit 5059c2d

Please sign in to comment.