~hazmat/pyjuju/security-groups

« back to all changes in this revision

Viewing changes to ensemble/providers/common/state.py

  • Committer: kapil.thangavelu at canonical
  • Date: 2011-08-04 18:19:33 UTC
  • mfrom: (284.1.3 security-connection)
  • Revision ID: kapil.thangavelu@canonical.com-20110804181933-ei5v1dpzpsd1ov5s
Merged security-connection into security-groups.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from cStringIO import StringIO
 
2
from yaml import safe_dump, load
 
3
 
 
4
from ensemble.errors import FileNotFound
 
5
 
 
6
_STATE_FILE = "provider-state"
 
7
 
 
8
 
 
9
class LoadState(object):
 
10
 
 
11
    def __init__(self, provider):
 
12
        self._provider = provider
 
13
 
 
14
    def run(self):
 
15
        storage = self._provider.get_file_storage()
 
16
        d = storage.get(_STATE_FILE)
 
17
        d.addCallback(self._deserialize)
 
18
        d.addErrback(self._no_data)
 
19
        return d
 
20
 
 
21
    def _deserialize(self, data):
 
22
        return load(data.read()) or False
 
23
 
 
24
    def _no_data(self, failure):
 
25
        failure.trap(FileNotFound)
 
26
        return False
 
27
 
 
28
 
 
29
class SaveState(object):
 
30
 
 
31
    def __init__(self, provider):
 
32
        self._provider = provider
 
33
 
 
34
    def run(self, state):
 
35
        storage = self._provider.get_file_storage()
 
36
        data = safe_dump(state)
 
37
        return storage.put(_STATE_FILE, StringIO(data))