1
from cStringIO import StringIO
2
from yaml import safe_dump, load
4
from ensemble.errors import FileNotFound
6
_STATE_FILE = "provider-state"
9
class LoadState(object):
11
def __init__(self, provider):
12
self._provider = provider
15
storage = self._provider.get_file_storage()
16
d = storage.get(_STATE_FILE)
17
d.addCallback(self._deserialize)
18
d.addErrback(self._no_data)
21
def _deserialize(self, data):
22
return load(data.read()) or False
24
def _no_data(self, failure):
25
failure.trap(FileNotFound)
29
class SaveState(object):
31
def __init__(self, provider):
32
self._provider = provider
35
storage = self._provider.get_file_storage()
36
data = safe_dump(state)
37
return storage.put(_STATE_FILE, StringIO(data))