4343import sys
4444
4545
46- if sys .version_info [0 ] >= 3 :
47- _range = range
48- _viewkeys = dict .keys
49- else :
50- _range = xrange
51- if sys .version_info [1 ] >= 7 :
52- _viewkeys = dict .viewkeys
53- else :
54- _viewkeys = lambda x : set (dict .keys (x ))
55-
56-
5746_ST_ADD = 0
5847_ST_REMOVE = 1
5948
@@ -782,8 +771,8 @@ def _item_replaced(self, path, key, item):
782771 }))
783772
784773 def _compare_dicts (self , path , src , dst ):
785- src_keys = _viewkeys (src )
786- dst_keys = _viewkeys (dst )
774+ src_keys = set (src . keys () )
775+ dst_keys = set (dst . keys () )
787776 added_keys = dst_keys - src_keys
788777 removed_keys = src_keys - dst_keys
789778 for key in removed_keys :
@@ -797,7 +786,7 @@ def _compare_lists(self, path, src, dst):
797786 len_src , len_dst = len (src ), len (dst )
798787 max_len = max (len_src , len_dst )
799788 min_len = min (len_src , len_dst )
800- for key in _range (max_len ):
789+ for key in range (max_len ):
801790 if key < min_len :
802791 old , new = src [key ], dst [key ]
803792 if old == new :
@@ -812,11 +801,11 @@ def _compare_lists(self, path, src, dst):
812801 def _compare_values (self , path , key , src , dst ):
813802 if src == dst :
814803 return
815- elif isinstance (src , dict ) and \
816- isinstance (dst , dict ):
804+ elif isinstance (src , MutableMapping ) and \
805+ isinstance (dst , MutableMapping ):
817806 self ._compare_dicts (_path_join (path , key ), src , dst )
818- elif isinstance (src , list ) and \
819- isinstance (dst , list ):
807+ elif isinstance (src , MutableSequence ) and \
808+ isinstance (dst , MutableSequence ):
820809 self ._compare_lists (_path_join (path , key ), src , dst )
821810 else :
822811 self ._item_replaced (path , key , dst )
0 commit comments