raise ExecutionError(command, ReturnNot0Error(r))
class Persistent:
- r"""Persistent([vars[, dir[, ext]]]) -> Persistent.
+ r"""Persistent([attrs[, dir[, ext]]]) -> Persistent.
This is a helper class to inherit from to automatically handle data
persistence using pickle.
- The variables attributes to persist (vars), and the pickle directory (dir)
+ The variables attributes to persist (attrs), and the pickle directory (dir)
and file extension (ext) can be defined by calling the constructor or in a
more declarative way as class attributes, like:
class TestHandler(Persistent):
- _persistent_vars = ('some_var', 'other_var')
+ _persistent_attrs = ('some_attr', 'other_attr')
_persistent_dir = 'persistent-data'
_persistent_ext = '.pickle'
# TODO implement it using metaclasses to add the handlers method by demand
# (only for specifieds commands).
- _persistent_vars = ()
+ _persistent_attrs = ()
_persistent_dir = '.'
_persistent_ext = '.pkl'
- def __init__(self, vars=None, dir=None, ext=None):
+ def __init__(self, attrs=None, dir=None, ext=None):
r"Initialize the object, see the class documentation for details."
- if vars is not None:
- self._persistent_vars = vars
+ if attrs is not None:
+ self._persistent_attrs = attrs
if dir is not None:
self._persistent_dir = dir
if ext is not None:
def _dump(self):
r"_dump() -> None :: Dump all persistent data to pickle files."
- if isinstance(self._persistent_vars, basestring):
- self._persistent_vars = (self._persistent_vars,)
- for varname in self._persistent_vars:
- self._dump_var(varname)
+ if isinstance(self._persistent_attrs, basestring):
+ self._persistent_attrs = (self._persistent_attrs,)
+ for attrname in self._persistent_attrs:
+ self._dump_attr(attrname)
def _load(self):
r"_load() -> None :: Load all persistent data from pickle files."
- if isinstance(self._persistent_vars, basestring):
- self._persistent_vars = (self._persistent_vars,)
- for varname in self._persistent_vars:
- self._load_var(varname)
-
- def _dump_var(self, varname):
- r"_dump_var() -> None :: Dump a especific variable to a pickle file."
- f = file(self._pickle_filename(varname), 'wb')
- pickle.dump(getattr(self, varname), f, 2)
+ if isinstance(self._persistent_attrs, basestring):
+ self._persistent_attrs = (self._persistent_attrs,)
+ for attrname in self._persistent_attrs:
+ self._load_attr(attrname)
+
+ def _dump_attr(self, attrname):
+ r"_dump_attr() -> None :: Dump a specific variable to a pickle file."
+ f = file(self._pickle_filename(attrname), 'wb')
+ pickle.dump(getattr(self, attrname), f, 2)
f.close()
- def _load_var(self, varname):
- r"_load_var() -> object :: Load a especific pickle file."
- f = file(self._pickle_filename(varname))
- setattr(self, varname, pickle.load(f))
+ def _load_attr(self, attrname):
+ r"_load_attr() -> object :: Load a specific pickle file."
+ f = file(self._pickle_filename(attrname))
+ setattr(self, attrname, pickle.load(f))
f.close()
def _pickle_filename(self, name):
declarative way as class attributes, like:
class TestHandler(Restorable):
- _persistent_vars = ('some_var', 'other_var')
+ _persistent_attrs = ('some_attr', 'other_attr')
_restorable_defaults = dict(
- some_var = 'some_default',
- other_var = 'other_default')
+ some_attr = 'some_default',
+ other_attr = 'other_default')
- The defaults is a dictionary, very coupled with the _persistent_vars
+ The defaults is a dictionary, very coupled with the _persistent_attrs
attribute inherited from Persistent. The defaults keys should be the
- values from _persistent_vars, and the values the default values.
+ values from _persistent_attrs, and the values the default values.
The _restore() method returns True if the data was restored successfully
or False if the defaults were loaded (in case you want to take further
# Persistent test
print 'PTestHandler'
class PTestHandler(Persistent):
- _persistent_vars = 'vars'
+ _persistent_attrs = 'vars'
def __init__(self):
self.vars = dict(a=1, b=2)
h = PTestHandler()
# Restorable test
print 'RTestHandler'
class RTestHandler(Restorable):
- _persistent_vars = 'vars'
+ _persistent_attrs = 'vars'
_restorable_defaults = dict(vars=dict(a=1, b=2))
def __init__(self):
self._restore()