def test_as_flat(self): ns = Namespace() ns['w'] = 1 ns['x.y.z'] = 2 flat = ns.as_flat() self.assertIsInstance(flat, ArgparseNamespace) self.assertEqual(vars(flat), {'w': 1, 'x.y.z': 2})
def test_shallow_item_set_get_del(self): ns = Namespace() ns['a'] = 1 self.assertEqual(1, ns['a']) self.assertEqual(ns, Namespace(a=1)) del ns['a'] self.assertRaises(KeyError, lambda: ns['a'])
def test_shallow_attr_set_get_del(self): ns = Namespace() setattr(ns, 'a', 1) self.assertEqual(1, getattr(ns, 'a')) self.assertEqual(ns, Namespace(a=1)) delattr(ns, 'a') self.assertRaises(AttributeError, lambda: getattr(ns, 'a'))
def test_values_generator(self): ns = Namespace() ns['a'] = 1 ns['b.c'] = 2 ns['b.d'] = 3 ns['p.q.r'] = {'x': 4, 'y': 5} values = list(ns.values()) self.assertEqual(values, [1, 2, 3, {'x': 4, 'y': 5}])
def test_keys_generator(self): ns = Namespace() ns['a'] = 1 ns['b.c'] = 2 ns['b.d'] = 3 ns['p.q.r'] = {'x': 4, 'y': 5} keys = list(ns.keys()) self.assertEqual(keys, ['a', 'b.c', 'b.d', 'p.q.r'])
def test_clone(self): ns = Namespace() pqr = {'x': 4, 'y': 5} ns['a'] = 1 ns['p.q.r'] = pqr self.assertIs(ns['p.q.r'], pqr) self.assertEqual(ns.clone(), ns) self.assertIsNot(ns.clone()['p.q.r'], pqr) self.assertIsNot(ns.clone()['p.q'], ns['p.q'])
def test_namespace_to_dict(self): ns = Namespace() ns['w'] = 1 ns['x.y'] = 2 ns['x.z'] = 3 dic1 = namespace_to_dict(ns) dic2 = ns.as_dict() self.assertEqual(dic1, dic2) self.assertIsNot(dic1, dic2)
def test_items_generator(self): ns = Namespace() ns['a'] = 1 ns['b.c'] = 2 ns['b.d'] = 3 ns['p.q.r'] = {'x': 4, 'y': 5} items = list(ns.items()) self.assertEqual(items, [('a', 1), ('b.c', 2), ('b.d', 3), ('p.q.r', { 'x': 4, 'y': 5 })])
def test_init_from_argparse_flat_namespace(self): argparse_ns = ArgparseNamespace() setattr(argparse_ns, 'w', 0) setattr(argparse_ns, 'x.y.a', 1) setattr(argparse_ns, 'x.y.b', 2) setattr(argparse_ns, 'z.c', 3) ns = Namespace(argparse_ns) self.assertEqual( ns, Namespace(w=0, x=Namespace(y=Namespace(a=1, b=2)), z=Namespace(c=3)))
def test_use_for_kwargs(self): def func(a=1, b=2, c=3): return a, b, c kwargs = Namespace(a=4, c=5) val = func(**kwargs) self.assertEqual(val, (4, 2, 5))
def test_get(self): ns = Namespace() ns['x.y'] = 1 self.assertEqual(1, ns.get('x.y')) self.assertEqual(Namespace(y=1), ns.get('x')) self.assertEqual(2, ns.get('z', 2)) self.assertIsNone(ns.get('z'))
def test_as_dict(self): ns = Namespace() ns['w'] = 1 ns['x.y'] = 2 ns['x.z'] = 3 ns['p'] = {'q': Namespace(r=4)} self.assertEqual(ns.as_dict(), { 'w': 1, 'x': { 'y': 2, 'z': 3 }, 'p': { 'q': { 'r': 4 } } }) self.assertEqual(Namespace().as_dict(), {})
def test_nested_key_in(self): ns = Namespace() ns['x.y.z'] = 1 self.assertIn('x', ns) self.assertIn('x.y', ns) self.assertIn('x.y.z', ns) self.assertNotIn('a', ns) self.assertNotIn('x.a', ns) self.assertNotIn('x.y.a', ns) self.assertNotIn('x.y.z.a', ns) self.assertNotIn('x..y', ns) self.assertNotIn(123, ns)
def test_nested_item_set_get(self): ns = Namespace() ns['x.y.z'] = 1 self.assertEqual(Namespace(x=Namespace(y=Namespace(z=1))), ns) self.assertEqual(1, ns['x.y.z']) self.assertEqual(1, ns['x']['y']['z']) self.assertEqual(Namespace(z=1), ns['x.y']) self.assertEqual(Namespace(z=1), ns['x']['y']) ns['x.y'] = 2 self.assertEqual(2, ns['x.y'])
def test_nested_item_invalid_set(self): ns = Namespace() with self.assertRaises(KeyError): ns['x.'] = 1 with self.assertRaises(KeyError): ns['x .y'] = 2
def test_pop(self): ns = Namespace() ns['x.y.z'] = 1 self.assertEqual(1, ns.pop('x.y.z')) self.assertEqual(ns, Namespace(x=Namespace(y=Namespace())))
def test_shallow_dot_set_get(self): ns = Namespace() ns.a = 1 self.assertEqual(1, ns.a) self.assertEqual(ns, Namespace(a=1))
def test_contains_non_str_key(self): ns = Namespace() for key in [None, True, False, 1, 2.3]: with self.subTest(str(key)): self.assertFalse(key in ns)
def test_set_item_nested_dict(self): ns = Namespace(d={'a': 1}) ns['d.b'] = 2 self.assertEqual(2, ns['d']['b'])
def test_get_non_str_key(self): ns = Namespace() for key in [None, True, False, 1, 2.3]: with self.subTest(str(key)): self.assertIsNone(ns.get(key)) self.assertEqual(ns.get(key, 'abc'), 'abc')
def test_nested_item_set_del(self): ns = Namespace() ns['x.y'] = 1 self.assertEqual(Namespace(x=Namespace(y=1)), ns) del ns['x.y'] self.assertEqual(Namespace(x=Namespace()), ns)
def test_namespace_from_dict(self): dic = {'a': 1, 'b': {'c': 2}} ns = Namespace(dic) self.assertEqual(ns, Namespace(a=1, b={'c': 2}))
def test_update_shallow(self): ns_from = Namespace(a=1, b=None) ns_to = Namespace(a=None, b=2, c=3) ns_to.update(ns_from) self.assertEqual(ns_to, Namespace(a=1, b=None, c=3))
def test_init_invalid(self): self.assertRaises(ValueError, lambda: Namespace(1)) self.assertRaises(ValueError, lambda: Namespace(ArgparseNamespace(), x=1))
def test_dict_to_namespace(self): ns1 = Namespace(a=1, b=Namespace(c=2), d=[Namespace(e=3)]) dic = {'a': 1, 'b': {'c': 2}, 'd': [{'e': 3}]} ns2 = dict_to_namespace(dic) self.assertEqual(ns1, ns2)
def test_update_invalid(self): ns = Namespace() self.assertRaises(KeyError, lambda: ns.update(123))