diff options
author | Victor Shyba <victor1984@riseup.net> | 2017-05-12 03:51:00 -0300 |
---|---|---|
committer | Victor Shyba <victor1984@riseup.net> | 2017-05-12 03:51:00 -0300 |
commit | f9fbae0e6296382dd558ba12c1acc646447cc8cd (patch) | |
tree | 92b461e5ee79edf74bd84c9290803228cc20e043 | |
parent | 6795f5ec9617afcded241efb328b396a83e77937 (diff) |
[refactor] make blobs resource backend configurable
- Resolves: #8804
-rw-r--r-- | server/src/leap/soledad/server/_blobs.py | 12 | ||||
-rw-r--r-- | server/src/leap/soledad/server/auth.py | 3 | ||||
-rw-r--r-- | testing/tests/server/test__resource.py | 2 | ||||
-rw-r--r-- | testing/tests/server/test_blobs_resource_validation.py | 2 | ||||
-rw-r--r-- | testing/tests/server/test_blobs_server.py | 2 |
5 files changed, 11 insertions, 10 deletions
diff --git a/server/src/leap/soledad/server/_blobs.py b/server/src/leap/soledad/server/_blobs.py index 74707111..27e79736 100644 --- a/server/src/leap/soledad/server/_blobs.py +++ b/server/src/leap/soledad/server/_blobs.py @@ -153,14 +153,14 @@ class BlobsResource(resource.Resource): isLeaf = True - # Allowed factory classes are defined here - blobsFactoryClass = FilesystemBlobsBackend + # Allowed backend classes are defined here + handlers = {"filesystem": FilesystemBlobsBackend} - def __init__(self, blobs_path): - # TODO pass the backend as configurable option #8804 + def __init__(self, backend, blobs_path, **backend_args): resource.Resource.__init__(self) self._blobs_path = blobs_path - self._handler = self.blobsFactoryClass(blobs_path) + backend_args.update({'blobs_path': blobs_path}) + self._handler = self.handlers[backend](**backend_args) assert interfaces.IBlobsBackend.providedBy(self._handler) # TODO double check credentials, we can have then @@ -219,7 +219,7 @@ if __name__ == '__main__': parser.add_argument('--path', default='/tmp/blobs/user') args = parser.parse_args() - root = BlobsResource(args.path) + root = BlobsResource("filesystem", args.path) # I picture somethink like # BlobsResource(backend="filesystem", backend_opts={'path': '/tmp/blobs'}) diff --git a/server/src/leap/soledad/server/auth.py b/server/src/leap/soledad/server/auth.py index 7f99e23d..1357b289 100644 --- a/server/src/leap/soledad/server/auth.py +++ b/server/src/leap/soledad/server/auth.py @@ -54,7 +54,8 @@ class SoledadRealm(object): if conf is None: conf = get_config() blobs = conf['blobs'] - blobs_resource = BlobsResource(conf['blobs_path']) if blobs else None + blobs_resource = BlobsResource("filesystem", + conf['blobs_path']) if blobs else None self.anon_resource = SoledadAnonResource( enable_blobs=blobs) self.auth_resource = SoledadResource( diff --git a/testing/tests/server/test__resource.py b/testing/tests/server/test__resource.py index be02b5a1..1c0510b9 100644 --- a/testing/tests/server/test__resource.py +++ b/testing/tests/server/test__resource.py @@ -43,7 +43,7 @@ class SoledadResourceTestCase(unittest.TestCase): self.assertIsInstance(child, ServerInfo) def test_get_blobs_enabled(self): - blobs_resource = BlobsResource('/tmp') + blobs_resource = BlobsResource("filesystem", '/tmp') resource = SoledadResource( blobs_resource=blobs_resource, sync_pool=_pool) request = DummyRequest(['blobs']) diff --git a/testing/tests/server/test_blobs_resource_validation.py b/testing/tests/server/test_blobs_resource_validation.py index 9fbb1b2e..9f6dfc2f 100644 --- a/testing/tests/server/test_blobs_resource_validation.py +++ b/testing/tests/server/test_blobs_resource_validation.py @@ -27,7 +27,7 @@ class BlobServerTestCase(unittest.TestCase): @pytest.mark.usefixtures("method_tmpdir") def setUp(self): - self.resource = server_blobs.BlobsResource(self.tempdir) + self.resource = server_blobs.BlobsResource("filesystem", self.tempdir) @pytest.mark.usefixtures("method_tmpdir") def test_valid_arguments(self): diff --git a/testing/tests/server/test_blobs_server.py b/testing/tests/server/test_blobs_server.py index 092a0524..36bd3f0a 100644 --- a/testing/tests/server/test_blobs_server.py +++ b/testing/tests/server/test_blobs_server.py @@ -33,7 +33,7 @@ from leap.soledad.client._db.blobs import BlobAlreadyExistsError class BlobServerTestCase(unittest.TestCase): def setUp(self): - root = server_blobs.BlobsResource(self.tempdir) + root = server_blobs.BlobsResource("filesystem", self.tempdir) site = Site(root) self.port = reactor.listenTCP(0, site, interface='127.0.0.1') self.host = self.port.getHost() |