PyORAm
[iotcloud.git] / PyORAM / src / pyoram / storage / block_storage.py
diff --git a/PyORAM/src/pyoram/storage/block_storage.py b/PyORAM/src/pyoram/storage/block_storage.py
new file mode 100644 (file)
index 0000000..41bd7dd
--- /dev/null
@@ -0,0 +1,83 @@
+__all__ = ('BlockStorageTypeFactory',)
+
+import logging
+
+log = logging.getLogger("pyoram")
+
+def BlockStorageTypeFactory(storage_type_name):
+    if storage_type_name in BlockStorageTypeFactory._registered_devices:
+        return BlockStorageTypeFactory.\
+            _registered_devices[storage_type_name]
+    else:
+        raise ValueError(
+            "BlockStorageTypeFactory: Unsupported storage "
+            "type: %s" % (storage_type_name))
+BlockStorageTypeFactory._registered_devices = {}
+
+def _register_device(name, type_):
+    if name in BlockStorageTypeFactory._registered_devices:
+        raise ValueError("Can not register block storage device type "
+                         "with name '%s'. A device type is already "
+                         "registered with that name." % (name))
+    if not issubclass(type_, BlockStorageInterface):
+        raise TypeError("Can not register block storage device type "
+                        "'%s'. The device must be a subclass of "
+                        "BlockStorageInterface" % (type_))
+    BlockStorageTypeFactory._registered_devices[name] = type_
+BlockStorageTypeFactory.register_device = _register_device
+
+class BlockStorageInterface(object):
+
+    def __enter__(self):
+        return self
+    def __exit__(self, *args):
+        self.close()
+
+    #
+    # Abstract Interface
+    #
+
+    def clone_device(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+
+    @classmethod
+    def compute_storage_size(cls, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    @classmethod
+    def setup(cls, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+
+    @property
+    def header_data(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    @property
+    def block_count(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    @property
+    def block_size(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    @property
+    def storage_name(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+
+    def update_header_data(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    def close(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    def read_blocks(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    def yield_blocks(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    def read_block(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    def write_blocks(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+    def write_block(self, *args, **kwds):
+        raise NotImplementedError                      # pragma: no cover
+
+    @property
+    def bytes_sent(self):
+        raise NotImplementedError                      # pragma: no cover
+    @property
+    def bytes_received(self):
+        raise NotImplementedError                      # pragma: no cover