Welcome, guest | Sign In | My Account | Store | Cart
import os
import cPickle as pickle

__all__
= ['autopickle', 'BINMODE']

# whether the pickled files are binary
BINMODE
= False

def autopickle(__init__):
   
"""Decorator for instantiating pickled instances transparently."""

   
def new__init__(self, *args, **kwds):
        picklename
= self.getPickleFilename(*args, **kwds)
       
if os.path.exists(picklename):
            newSelf
= pickle.load(open(picklename))
           
assert type(newSelf) is type(self)
           
# copy newSelf to self
           
if hasattr(newSelf, '__getstate__'):
                state
= newSelf.__getstate__()
           
else:
                state
= newSelf.__dict__
           
if hasattr(self, '__setstate__'):
               
self.__setstate__(state)
           
else:
               
self.__dict__.update(state)
       
else:
            __init__
(self, *args, **kwds)
            picklefile
= open(picklename, BINMODE and 'wb' or 'w')
           
try: pickle.dump(self, picklefile, BINMODE)
           
finally: picklefile.close()
   
return new__init__


if __name__ == '__main__':

   
class Foo(object):
       
@autopickle
       
def __init__(self, id):
           
import time; time.sleep(2)
           
self.id = id
       
def getPickleFilename(self, id):
           
return "%s.dat" % id

   
print Foo(1)

History