Skip to content

Commit

Permalink
fix[config.py]: Fix handling of required subclass leaf_spec and add t…
Browse files Browse the repository at this point in the history
…ests
  • Loading branch information
Artem Vasenin committed Sep 24, 2020
1 parent 0b3eb7f commit 150def7
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 3 deletions.
2 changes: 1 addition & 1 deletion ntc/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
from .leaf import *
from .node import *

__version__ = "0.3.2"
__version__ = "0.3.3"
10 changes: 8 additions & 2 deletions ntc/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,15 +242,21 @@ def _set_new(self, key: str, value: Any) -> None:
elif isinstance(value, CfgLeaf):
value_to_set = value
elif isinstance(value, type):
if leaf_spec and leaf_spec.subclass:
value_to_set = CfgLeaf(value, value, subclass=True)
if leaf_spec:
value_to_set = CfgLeaf(
value if leaf_spec.subclass else None,
value, # Need to pass value here instead of copying, in case new value is more restrictive
subclass=leaf_spec.subclass,
required=leaf_spec.required,
)
else:
value_to_set = CfgLeaf(None, value)
elif leaf_spec:
value_to_set = leaf_spec.clone()
value_to_set.value = value
else:
value_to_set = CfgLeaf(value, type(value))

if isinstance(value_to_set, CfgLeaf):
if leaf_spec:
if leaf_spec.required and not value_to_set.required:
Expand Down
7 changes: 7 additions & 0 deletions tests/data/required/required_subclass.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from ntc import CL, CN

from ..base_cfg import cfg
from ..base_class import BaseClass

cfg = cfg.clone()
cfg.REQUIRED_SUBCLASSES = CN(CL(None, BaseClass, required=True, subclass=True))
6 changes: 6 additions & 0 deletions tests/data/required/subclass.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from ntc import CN
from tests.data.base_class import SubClass
from tests.data.required.required_subclass import cfg

cfg = CN(cfg)
cfg.REQUIRED_SUBCLASSES.ONE = SubClass
6 changes: 6 additions & 0 deletions tests/test_required.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,9 @@ def test_spec():
cfg = CN.load(DATA_DIR / "spec.py")
assert len(cfg.REQUIRED_CLASSES) > 0
assert isinstance(cfg.REQUIRED_CLASSES.ONE, BaseClass)


def test_subclass():
cfg = CN.load(DATA_DIR / "subclass.py")
assert len(cfg.REQUIRED_SUBCLASSES) > 0
assert issubclass(cfg.REQUIRED_SUBCLASSES.ONE, BaseClass)

0 comments on commit 150def7

Please sign in to comment.