def test_unregistered_assign(): # test with bare target registry glommer = Glommer(register_default_types=False) with pytest.raises(UnregisteredTarget, match='assign'): glommer.glom({}, Assign('a', 'b')) # test for unassignable tuple with pytest.raises(UnregisteredTarget, match='assign'): glom({'a': ()}, Assign('a.0', 'b'))
def test_bad_assign_target(): class BadTarget(object): def __setattr__(self, name, val): raise Exception("and you trusted me?") # sanity check spec = Assign('a', 'b') ok_target = lambda: None glom(ok_target, spec) assert ok_target.a == 'b' with pytest.raises(PathAssignError, match='could not assign'): glom(BadTarget(), spec) return
def test_assign(): class Foo(object): pass assert glom({}, Assign(T['a'], 1)) == {'a': 1} assert glom({'a': {}}, Assign(T['a']['a'], 1)) == {'a': {'a': 1}} assert glom({'a': {}}, Assign('a.a', 1)) == {'a': {'a': 1}} assert glom(Foo(), Assign(T.a, 1)).a == 1 assert glom({}, Assign('a', 1)) == {'a': 1} assert glom(Foo(), Assign('a', 1)).a == 1 assert glom({'a': Foo()}, Assign('a.a', 1))['a'].a == 1 def r(): r = {} r['r'] = r return r assert glom(r(), Assign('r.r.r.r.r.r.r.r.r', 1)) == {'r': 1} assert glom(r(), Assign(T['r']['r']['r']['r'], 1)) == {'r': 1} assert glom(r(), Assign(Path('r', 'r', T['r']), 1)) == {'r': 1} assert assign(r(), Path('r', 'r', T['r']), 1) == {'r': 1} with pytest.raises(TypeError, match='path argument must be'): Assign(1, 'a') with pytest.raises(ValueError, match='path must have at least one element'): Assign(T, 1)
def test_assign_spec_val(): output = glom({'b': 'c'}, Assign('a', Spec('b'))) assert output['a'] == output['b'] == 'c'
def test_s_assign(): ''' check that assign works when storing things into S ''' glom({}, (Assign(S['foo'], 'bar'), S['foo']))