Skip to content

Commit ffce9b3

Browse files
changed dict_merge to return a merged dictionary
1 parent 53fc656 commit ffce9b3

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

SoftLayer/utils.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,20 @@ def to_dict(self):
5959

6060

6161
def dict_merge(dct1, dct2):
62-
"""Recursively merges dct2 into dct1, ideal for merging objectFilter together.
62+
"""Recursively merges dct2 and dct1, ideal for merging objectFilter together.
6363
64-
:param dct1: dict onto which the merge is executed
65-
:param dct2: dct merged into dct
66-
:return: None
64+
:param dct1: A dictionary
65+
:param dct2: A dictionary
66+
:return: dct1 + dct2
6767
"""
6868

69+
dct = dct1.copy()
6970
for k, v in dct2.items():
7071
if (k in dct1 and isinstance(dct1[k], dict) and isinstance(dct2[k], collections.Mapping)):
71-
dict_merge(dct1[k], dct2[k])
72+
dct[k] = dict_merge(dct1[k], dct2[k])
7273
else:
73-
dct1[k] = dct2[k]
74+
dct[k] = dct2[k]
75+
return dct
7476

7577

7678
def query_filter(query):

tests/basic_tests.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,11 @@ def test_timezone(self):
8282
def test_dict_merge(self):
8383
filter1 = {"virtualGuests":{"hostname":{"operation":"etst"}}}
8484
filter2 = {"virtualGuests":{"id":{"operation":"orderBy","options":[{"name":"sort","value":["DESC"]}]}}}
85-
SoftLayer.utils.dict_merge(filter1, filter2)
85+
result = SoftLayer.utils.dict_merge(filter1, filter2)
8686

87-
self.assertEqual(filter1['virtualGuests']['id']['operation'], 'orderBy')
88-
self.assertEqual(filter1['virtualGuests']['hostname']['operation'], 'etst')
87+
self.assertEqual(result['virtualGuests']['id']['operation'], 'orderBy')
88+
self.assertNotIn('id', filter1['virtualGuests'])
89+
self.assertEqual(result['virtualGuests']['hostname']['operation'], 'etst')
8990

9091

9192

0 commit comments

Comments
 (0)