PyORAm
[iotcloud.git] / PyORAM / src / pyoram / storage / block_storage.py
1 __all__ = ('BlockStorageTypeFactory',)
2
3 import logging
4
5 log = logging.getLogger("pyoram")
6
7 def BlockStorageTypeFactory(storage_type_name):
8     if storage_type_name in BlockStorageTypeFactory._registered_devices:
9         return BlockStorageTypeFactory.\
10             _registered_devices[storage_type_name]
11     else:
12         raise ValueError(
13             "BlockStorageTypeFactory: Unsupported storage "
14             "type: %s" % (storage_type_name))
15 BlockStorageTypeFactory._registered_devices = {}
16
17 def _register_device(name, type_):
18     if name in BlockStorageTypeFactory._registered_devices:
19         raise ValueError("Can not register block storage device type "
20                          "with name '%s'. A device type is already "
21                          "registered with that name." % (name))
22     if not issubclass(type_, BlockStorageInterface):
23         raise TypeError("Can not register block storage device type "
24                         "'%s'. The device must be a subclass of "
25                         "BlockStorageInterface" % (type_))
26     BlockStorageTypeFactory._registered_devices[name] = type_
27 BlockStorageTypeFactory.register_device = _register_device
28
29 class BlockStorageInterface(object):
30
31     def __enter__(self):
32         return self
33     def __exit__(self, *args):
34         self.close()
35
36     #
37     # Abstract Interface
38     #
39
40     def clone_device(self, *args, **kwds):
41         raise NotImplementedError                      # pragma: no cover
42
43     @classmethod
44     def compute_storage_size(cls, *args, **kwds):
45         raise NotImplementedError                      # pragma: no cover
46     @classmethod
47     def setup(cls, *args, **kwds):
48         raise NotImplementedError                      # pragma: no cover
49
50     @property
51     def header_data(self, *args, **kwds):
52         raise NotImplementedError                      # pragma: no cover
53     @property
54     def block_count(self, *args, **kwds):
55         raise NotImplementedError                      # pragma: no cover
56     @property
57     def block_size(self, *args, **kwds):
58         raise NotImplementedError                      # pragma: no cover
59     @property
60     def storage_name(self, *args, **kwds):
61         raise NotImplementedError                      # pragma: no cover
62
63     def update_header_data(self, *args, **kwds):
64         raise NotImplementedError                      # pragma: no cover
65     def close(self, *args, **kwds):
66         raise NotImplementedError                      # pragma: no cover
67     def read_blocks(self, *args, **kwds):
68         raise NotImplementedError                      # pragma: no cover
69     def yield_blocks(self, *args, **kwds):
70         raise NotImplementedError                      # pragma: no cover
71     def read_block(self, *args, **kwds):
72         raise NotImplementedError                      # pragma: no cover
73     def write_blocks(self, *args, **kwds):
74         raise NotImplementedError                      # pragma: no cover
75     def write_block(self, *args, **kwds):
76         raise NotImplementedError                      # pragma: no cover
77
78     @property
79     def bytes_sent(self):
80         raise NotImplementedError                      # pragma: no cover
81     @property
82     def bytes_received(self):
83         raise NotImplementedError                      # pragma: no cover