Fix wrong-ordered update, create test

This commit is contained in:
Maxim Kuznetsov 2019-10-16 21:25:55 +04:00 committed by Russell Ballestrini
parent fcf2842de9
commit 307983caa5
2 changed files with 17 additions and 11 deletions

View file

@ -95,17 +95,11 @@ def _nested_update(document, key, value, val_len, run=0):
document=list_items, key=key, value=value, val_len=val_len, run=run document=list_items, key=key, value=value, val_len=val_len, run=run
) )
elif isinstance(document, dict): elif isinstance(document, dict):
if document.get(key):
# check if a value with the coresponding index exists and
# use it otherwise recycle the intially given value
if run < val_len:
val = value[run]
else:
run = 0
val = value[run]
document[key] = val
run = run + 1
for dict_key, dict_value in iteritems(document): for dict_key, dict_value in iteritems(document):
if dict_key == key:
document[key] = value[0]
if len(value) > 1:
value.pop(0)
_nested_update( _nested_update(
document=dict_value, key=key, value=value, val_len=val_len, run=run document=dict_value, key=key, value=value, val_len=val_len, run=run
) )

View file

@ -311,7 +311,7 @@ class TestNestedUpdate(BaseLookUpApi):
# if you need to adress a list of dicts, you have to # if you need to adress a list of dicts, you have to
# manually iterate over those and pass them to nested_update # manually iterate over those and pass them to nested_update
# one by one # one by one
self.assertNotEqual(updated_document[1]["salsa"][0]["burrito"]["taco"], 200) self.assertEqual(updated_document[1]["salsa"][0]["burrito"]["taco"], 200)
def test_nested_update_raise_error(self): def test_nested_update_raise_error(self):
doc = self.sample_data4 doc = self.sample_data4
@ -552,6 +552,18 @@ class TestNestedAlter(BaseLookUpApi):
self.assertEqual(out[0]["taco"], 52) self.assertEqual(out[0]["taco"], 52)
self.assertEqual(out[1]["salsa"][0]["burrito"]["taco"], 79) self.assertEqual(out[1]["salsa"][0]["burrito"]["taco"], 79)
def test_nested_alter_work_with_right_order(self):
document = {"taco": 42, "salsa": [{"burrito":{"key":20}}], "key":50}
def callback(data):
return data + 100
altered_document = nested_alter(document, "key", callback, in_place=True)
self.assertEqual(altered_document["salsa"][0]["burrito"]["key"], 120)
self.assertEqual(altered_document["key"], 150)
def test_sample_data4(self): def test_sample_data4(self):
result = { result = {