def test_json_compatibility() -> None: ''' Test `dictify` and `namespacify`. ''' dict_ = { 'bool': False, 'int': 1, 'float': 2.2, 'str': 'three', 'list': [0, 1, 2], 'dict': { 'a': 0, 'b': 1 } } ns = Namespace(bool=False, int=1, float=2.2, str='three', list=[0, 1, 2], dict=Namespace(a=0, b=1)) assert dictify(ns) == dict_ assert isinstance(dictify(ns)['dict'], dict) assert namespacify(dict_) == ns assert isinstance(namespacify(dict_).dict, Namespace)
def test_namespacify(): obj = { 'bool': False, 'int': 1, 'float': 2.2, 'str': 'three', 'list': [0, 1, 2], 'dict': { 'a': 0, 'b': 1 }, 'namespace': SimpleNamespace(c=2, d=3), 'type': int } obj_as_ns = Namespace(bool=False, int=1, float=2.2, str='three', list=[0, 1, 2], dict=Namespace(a=0, b=1), namespace=Namespace(c=2, d=3), type=int) assert namespacify(obj) == obj_as_ns assert isinstance(namespacify(obj).dict, Namespace) assert isinstance(namespacify(obj).namespace, Namespace)
def test_artifact_encoding(tmp_path: Path) -> None: ''' Test converting paths strings to path-like objects. ''' path = Path('x/y.ext') decode_path = lambda path_str: Path(path_str[2:]) assert namespacify('@/x/y.ext', decode_path) == path assert namespacify(['@/x/y.ext'], decode_path) == [path] assert namespacify({'a': '@/x/y.ext'}, decode_path) == Namespace(a=path)
def test_namespacify_with_nesting(): obj = { 'list': [{ 'a': 0, 'b': 1 }, SimpleNamespace(c=2, d=3)], 'dict': { 'a': { 'a': 0, 'b': 1 }, 'b': SimpleNamespace(c=2, d=3) }, 'namespace': SimpleNamespace(c={ 'a': 0, 'b': 1 }, d=SimpleNamespace(c=2, d=3)) } obj_as_ns = Namespace(list=[Namespace(a=0, b=1), Namespace(c=2, d=3)], dict=Namespace(a=Namespace(a=0, b=1), b=Namespace(c=2, d=3)), namespace=Namespace(c=Namespace(a=0, b=1), d=Namespace(c=2, d=3))) assert namespacify(obj) == obj_as_ns assert isinstance(namespacify(obj).dict, Namespace) assert isinstance(namespacify(obj).dict.a, Namespace) assert isinstance(namespacify(obj).dict.b, Namespace) assert isinstance(namespacify(obj).namespace, Namespace) assert isinstance(namespacify(obj).namespace.c, Namespace) assert isinstance(namespacify(obj).namespace.d, Namespace)
def test_json_compatibility_with_nesting() -> None: ''' Test that `dictify` and `namespacify` also work recursively. ''' dict_ = { 'list': [{ 'a': 0, 'b': 1 }, { 'c': 2, 'd': 3 }], 'dict': { 'a': { 'a': 0, 'b': 1 }, 'b': { 'c': 2, 'd': 3 } } } ns = Namespace(list=[Namespace(a=0, b=1), Namespace(c=2, d=3)], dict=Namespace(a=Namespace(a=0, b=1), b=Namespace(c=2, d=3))) assert dictify(ns) == dict_ assert isinstance(dictify(ns)['dict'], dict) assert isinstance(dictify(ns)['dict']['a'], dict) assert isinstance(dictify(ns)['dict']['b'], dict) assert namespacify(dict_) == ns assert isinstance(namespacify(dict_).dict, Namespace) assert isinstance(namespacify(dict_).dict.a, Namespace) assert isinstance(namespacify(dict_).dict.b, Namespace)