5
""" allow data to be pickled to disk .. creating the persisted object
9
__copyright__ = 'this file is in the public domain'
11
from gozerbot.generic import rlog
12
import pickle, thread, os, copy
17
class Persist(object):
19
""" persist data attribute to pickle file """
21
def __init__(self, filename, default=None):
22
rlog(1, 'persist', 'reading %s' % filename)
24
self.lock = thread.allocate_lock()
26
# load data from pickled file
28
datafile = open(filename, 'r')
31
self.data = copy.deepcopy(default)
34
self.data = pickle.load(datafile)
38
self.data = copy.deepcopy(default)
40
rlog(100, 'persist', 'ERROR: %s' % filename)
44
""" save persist data """
46
rlog(100, 'persist', 'stopping mode .. not saving %s' % self.fn)
49
saving.append(str(self.fn))
51
# first save to temp file and when done rename
52
tmp = self.fn + '.tmp'
54
datafile = open(tmp, 'w')
56
rlog(100, 'persist', "can't save %s" % self.fn)
58
pickle.dump(self.data, datafile)
60
os.rename(tmp, self.fn)
61
rlog(2, 'persist', '%s saved' % self.fn)
63
saving.remove(self.fn)