"castironpi" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > I'd like a persistent deque, such that the instance operations all > commit atomicly to file system.
ok, i made your persistent deque. but there are two important notes regarding this module: 1) I am a genius. 2) it doesn't actually work for some reason. i.e., loading an instance from file won't work. i don't know why. the pickle module is doing something i didn't expect. from collections import deque import os, pickle, random class pdeque(deque): def __init__(self, filename, initial): deque.__init__(self, initial) self.filename = filename self.tempfilename = ''.join((random.choice("abcdefghijklmnopqrstuvwxyz") for x in xrange(10)))+".tmp" self.save() def save(self): pickle.dump(self, open(self.tempfilename,'wb')) try: os.remove(self.filename) except: pass os.rename(self.tempfilename, self.filename) @classmethod def load(cls, filename): return pickle.load(open(filename,'rb')) for name in "append appendleft extend extendleft remove rotate".split(): func = getattr(deque, name) def func2(instance, arg, func=func): result = func(instance, arg) instance.save() return result setattr(pdeque, name, func2) for name in ("pop", "popleft", "clear"): func = getattr(deque, name) def func2(instance, func=func): result = func(instance) instance.save() return result setattr(pdeque, name, func2) --- you use it just like a deque object except that when initializing the first parameter is a filename for it to store in. to load the deque object again later, call .load(filename) on the pdeque class or a pdeque object (except that it doesn't work.) i'm sure somebody here knows what obscure feature of pickling it is that's doing this counterintuitively. (disclaimer: i've never used pickle to store a custom type before) -- http://mail.python.org/mailman/listinfo/python-list