def test_subListReplace(self): origList = ['bad', 'mother', 'Fer'] orig = {1: {'a': origList}, 'foo': 'bar'} new = {1: {'a': {0: 'samuel', 1: 'jackson'}}, 'foo': 'bar'} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1, 'foo'])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, { 1: { 'a': { 0: 'samuel', 1: 'jackson', 2: arguments.RemovedKey('Fer') } } }) arguments.mergeCascadingDicts(diff, orig) self.assertEqual( orig, { 1: { 'a': { 0: 'samuel', 1: 'jackson', 2: arguments.RemovedKey('Fer') } }, 'foo': 'bar' }) self.assertTrue(origList is not orig[1]['a'])
def test_subUpdate(self): orig = {1:{'meat':'deinonychus'}} new = {1:{'meat':'trex'}} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1:{'meat':'trex'}}) arguments.mergeCascadingDicts( diff, orig ) self.assertEqual(orig, new)
def test_subRemove(self): orig = {1:{'plants':'stegosaurus'}} new = {1:{}} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1:{'plants':arguments.RemovedKey('stegosaurus')}}) arguments.mergeCascadingDicts( diff, orig ) self.assertEqual(orig, new)
def test_simpleRemove(self): orig = {1:'a'} new = {} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set()) self.assertEqual(only1, set([1])) self.assertEqual(only2, set()) self.assertEqual(diff, {1:arguments.RemovedKey('a')}) arguments.mergeCascadingDicts( diff, orig ) self.assertEqual(orig, new)
def test_subAdd(self): orig = {1: {'meat': 'deinonychus'}} new = {1: {'plants': 'stegosaurus', 'meat': 'deinonychus'}} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1: {'plants': 'stegosaurus'}}) arguments.mergeCascadingDicts(diff, orig) self.assertEqual(orig, new)
def test_subUpdate(self): orig = {1: {'meat': 'deinonychus'}} new = {1: {'meat': 'trex'}} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1: {'meat': 'trex'}}) arguments.mergeCascadingDicts(diff, orig) self.assertEqual(orig, new)
def test_simpleUpdate(self): orig = {1: 'a'} new = {1: 'b'} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1: 'b'}) arguments.mergeCascadingDicts(diff, orig) self.assertEqual(orig, new)
def test_simpleAdd(self): orig = {1:'a'} new = {1:'a',2:'b'} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set([2])) self.assertEqual(diff, {2:'b'}) arguments.mergeCascadingDicts( diff, orig ) self.assertEqual(orig, new)
def test_subAdd(self): orig = {1:{'meat':'deinonychus'}} new = {1:{'plants':'stegosaurus', 'meat':'deinonychus'}} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1:{'plants':'stegosaurus'}}) arguments.mergeCascadingDicts( diff, orig ) self.assertEqual(orig, new)
def test_subListReplace(self): origList = ['bad', 'mother', 'Fer'] orig = {1:{'a':origList}, 'foo':'bar'} new = {1:{'a':{0:'samuel', 1:'jackson'}}, 'foo':'bar'} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1, 'foo'])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1:{'a':{0:'samuel', 1:'jackson', 2:arguments.RemovedKey('Fer')}}}) arguments.mergeCascadingDicts( diff, orig ) self.assertEqual(orig, {1:{'a':{0:'samuel', 1:'jackson', 2:arguments.RemovedKey('Fer')}}, 'foo':'bar'}) self.assertTrue(origList is not orig[1]['a'])
def test_simpleListRemove(self): origList = ['bad', 'mother', 'Fer'] orig = {1: origList} new = {1: ['bad', 'mother']} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1: {2: arguments.RemovedKey('Fer')}}) arguments.mergeCascadingDicts(diff, orig, allowDictToListMerging=True) self.assertEqual(orig, new) self.assertTrue(origList is orig[1])
def test_subListListUpdate(self): origList = ['bad', 'mother', 'Fer'] orig = {1: [origList, 'extra']} new = {1: [['samuel', 'jackson', 'Fer'], 'extra']} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1: {0: {0: 'samuel', 1: 'jackson'}}}) arguments.mergeCascadingDicts(diff, orig, allowDictToListMerging=True) self.assertEqual(orig, new) self.assertTrue(origList is orig[1][0])
def test_simpleListRemove(self): origList = ['bad', 'mother', 'Fer'] orig = {1:origList} new = {1:['bad', 'mother']} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1:{2:arguments.RemovedKey('Fer')}}) arguments.mergeCascadingDicts( diff, orig, allowDictToListMerging=True ) self.assertEqual(orig, new) self.assertTrue(origList is orig[1])
def test_subListListUpdate(self): origList = ['bad', 'mother', 'Fer'] orig = {1:[origList, 'extra']} new = {1:[['samuel', 'jackson', 'Fer'], 'extra']} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1:{0:{0:'samuel', 1:'jackson'}}}) arguments.mergeCascadingDicts( diff, orig, allowDictToListMerging=True ) self.assertEqual(orig, new) self.assertTrue(origList is orig[1][0])
def test_subRemove(self): orig = {1: {'plants': 'stegosaurus'}} new = {1: {}} both, only1, only2, diff = arguments.compareCascadingDicts(orig, new) self.assertEqual(both, set([1])) self.assertEqual(only1, set()) self.assertEqual(only2, set()) self.assertEqual(diff, {1: { 'plants': arguments.RemovedKey('stegosaurus') }}) arguments.mergeCascadingDicts(diff, orig) self.assertEqual(orig, new)
newExt = '.py' newZipExt = newExt + '.zip' cacheInst.write(data, ext=newExt) cacheInst2 = getCache() newData = cacheInst2.read(ext=newExt) cacheInst.write(data, ext=newZipExt) cacheInst3 = getCache() newZipData = cacheInst3.read(ext=newZipExt) assert newZipData == newData from pymel.util.arguments import compareCascadingDicts from pprint import pprint, pformat diffs = compareCascadingDicts(data, newData)[-1] if not diffs: print "Yay!!! no diffs!" else: print "Boo... still diffs..." diffPath = cacheInst.path(ext='.diff') with open(diffPath, 'w') as f: f.write(pformat(diffs)) print "wrote diffs to: {}".format(diffPath) break
cacheInst = getCache() data = cacheInst.read(ext='.zip') newExt = '.py' newZipExt = newExt + '.zip' cacheInst.write(data, ext=newExt) cacheInst2 = getCache() newData = cacheInst2.read(ext=newExt) cacheInst.write(data, ext=newZipExt) cacheInst3 = getCache() newZipData = cacheInst3.read(ext=newZipExt) assert newZipData == newData from pymel.util.arguments import compareCascadingDicts from pprint import pprint, pformat diffs = compareCascadingDicts(data, newData)[-1] if not diffs: print("Yay!!! no diffs!") else: print("Boo... still diffs...") diffPath = cacheInst.path(ext='.diff') with open(diffPath, 'w') as f: f.write(pformat(diffs)) print("wrote diffs to: {}".format(diffPath)) break
for key, cachefile in cachefiles.items(): cachepath = os.path.join(cachedir, cachefile) cache_globals = {} cacheInst = apicache.ApiCache() data = cacheInst.read(path=cachepath) if DO_PREPROCESS: data = preprocess(data) cachepath_namebase, cachepath_ext = os.path.splitext(cachepath) preprocessed_path = cachepath_namebase + '.preprocessed' + cachepath_ext cacheInst.write(data, path=preprocessed_path) caches[key] = data # we only care about the diffs of the classInfo both, onlyOld, onlyNew, diffs = arguments.compareCascadingDicts( caches['old'][-1], caches['new'][-1], useAddedKeys=True, useChangedKeys=True) ################################################################################ # iteration utils class AnyKey(object): '''Sentinel value to indicate all keys should be iterated over''' def __init__(self, comment): '''Init does nothing, just allows you to add a comment visible in the code''' pass