File tree Expand file tree Collapse file tree 2 files changed +26
-0
lines changed
Expand file tree Collapse file tree 2 files changed +26
-0
lines changed Original file line number Diff line number Diff line change 55
66 :license: MIT, see LICENSE for more details.
77"""
8+ import collections
89import datetime
910import re
1011import time
@@ -57,6 +58,21 @@ def to_dict(self):
5758 for key , val in self .items ()}
5859
5960
61+ def dict_merge (dct1 , dct2 ):
62+ """Recursively merges dct2 into dct1, ideal for merging objectFilter together.
63+
64+ :param dct1: dict onto which the merge is executed
65+ :param dct2: dct merged into dct
66+ :return: None
67+ """
68+
69+ for k , v in dct2 .items ():
70+ if (k in dct1 and isinstance (dct1 [k ], dict ) and isinstance (dct2 [k ], collections .Mapping )):
71+ dict_merge (dct1 [k ], dct2 [k ])
72+ else :
73+ dct1 [k ] = dct2 [k ]
74+
75+
6076def query_filter (query ):
6177 """Translate a query-style string to a 'filter'.
6278
Original file line number Diff line number Diff line change @@ -79,6 +79,16 @@ def test_timezone(self):
7979 self .assertEqual (datetime .timedelta (0 ), time .dst ())
8080 self .assertEqual (datetime .timedelta (0 ), time .utcoffset ())
8181
82+ def test_dict_merge (self ):
83+ filter1 = {"virtualGuests" :{"hostname" :{"operation" :"etst" }}}
84+ filter2 = {"virtualGuests" :{"id" :{"operation" :"orderBy" ,"options" :[{"name" :"sort" ,"value" :["DESC" ]}]}}}
85+ SoftLayer .utils .dict_merge (filter1 , filter2 )
86+
87+ self .assertEqual (filter1 ['virtualGuests' ]['id' ]['operation' ], 'orderBy' )
88+ self .assertEqual (filter1 ['virtualGuests' ]['hostname' ]['operation' ], 'etst' )
89+
90+
91+
8292
8393class TestNestedDict (testing .TestCase ):
8494
You can’t perform that action at this time.
0 commit comments