from zlib import compress import cPickle import gnosis.xml.pickle as xml_pickle class C: pass #----------------------------------------------------------------------- # First: look at the results of compression on a large object #----------------------------------------------------------------------- o = C() from os import sep fname = sep.join(xml_pickle.__file__.split(sep)[:-1])+sep+'_pickle.py' o.lst = open(fname).readlines() o.tup = tuple(o.lst) o.dct = {} for i in range(500): o.dct[i] = i print "Size of standard cPickle: ", len(cPickle.dumps(o)) print "Size of binary cPickle: ", len(cPickle.dumps(o,1)) print "gzip'd standard cPickle: ", len(compress(cPickle.dumps(o))) print "gzip'd binary cPickle: ", len(compress(cPickle.dumps(o,1))) print "Size of standard xml_pickle: ", len(xml_pickle.dumps(o)) print "Size of gzip'd xml_pickle: ", len(xml_pickle.dumps(o,1)) #----------------------------------------------------------------------- # Second: look at actual compressed and uncompressed (small) pickles #----------------------------------------------------------------------- o = C() o.lst = [1,2] o.dct = {'spam':'eggs'} print "--------------- Uncompressed xml_pickle: ---------------" print xml_pickle.dumps(o), print "--------------- Compressed xml_pickle: -----------------" print `xml_pickle.dumps(o,1)` #----------------------------------------------------------------------- # Third: make sure compressed pickle makes it through restore cycle #----------------------------------------------------------------------- print "------------------------------------------------------" try: xml_pickle.loads(xml_pickle.dumps(o)) print "Pickle/restore cycle with compression: OK" except: print "Pickle/restore cycle with compression: FAILED!" try: xml_pickle.loads('CORRUPT'+xml_pickle.dumps(o)) print "Pickle/restore corrupt data with compression: OK" except: print "Pickle/restore corrupt data with compression: FAILED!"