summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrebs <drebs@leap.se>2017-12-06 20:37:55 -0200
committerdrebs <drebs@leap.se>2017-12-13 13:43:48 -0200
commit06ade52b27800ca94c1abf73964975a5bf717f04 (patch)
tree2812872f13eff5f2463c6ca8e39208097f503304
parent8f94f9c2d93046e0f67cffd7974f7d28393bbf86 (diff)
[refactor] make blobs backend delete_blob() agnostic of twisted.web requests
-rw-r--r--src/leap/soledad/server/_blobs.py13
-rw-r--r--src/leap/soledad/server/interfaces.py5
-rw-r--r--tests/blobs/test_fs_backend.py6
3 files changed, 10 insertions, 14 deletions
diff --git a/src/leap/soledad/server/_blobs.py b/src/leap/soledad/server/_blobs.py
index 86bbcdcb..c0b3b237 100644
--- a/src/leap/soledad/server/_blobs.py
+++ b/src/leap/soledad/server/_blobs.py
@@ -137,11 +137,10 @@ class FilesystemBlobsBackend(object):
yield fbp.startProducing(blobfile)
yield self.semaphore.release()
- def delete_blob(self, user, blob_id, request, namespace=''):
+ def delete_blob(self, user, blob_id, namespace=''):
blob_path = self._get_path(user, blob_id, namespace)
if not os.path.isfile(blob_path):
- request.setResponseCode(404)
- return "Blob doesn't exists: %s" % blob_id
+ raise BlobNotFound
self.__touch(blob_path + '.deleted')
os.unlink(blob_path)
try:
@@ -304,8 +303,12 @@ class BlobsResource(resource.Resource):
def render_DELETE(self, request):
logger.info("http put: %s" % request.path)
user, blob_id, namespace = self._validate(request)
- self._handler.delete_blob(user, blob_id, request, namespace=namespace)
- return ''
+ try:
+ self._handler.delete_blob(user, blob_id, namespace=namespace)
+ return ''
+ except BlobNotFound:
+ request.setResponseCode(404)
+ return "Blob doesn't exists: %s" % blob_id
def render_PUT(self, request):
logger.info("http put: %s" % request.path)
diff --git a/src/leap/soledad/server/interfaces.py b/src/leap/soledad/server/interfaces.py
index 11d75f11..3bf6eaa9 100644
--- a/src/leap/soledad/server/interfaces.py
+++ b/src/leap/soledad/server/interfaces.py
@@ -23,11 +23,6 @@ class IBlobsBackend(Interface):
"""
An interface for a backend that can store blobs.
-
- Classes that implement this interface are supposed to be used by
- ``BlobsResource``, which is a ``twisted.web.resource.Resource`` that serves
- the Blobs API. Because of that, their methods receive instances of
- ``twisted.web.server.Request`` and should use them to serve the Blobs API.
"""
def read_blob(user, blob_id, namespace=''):
diff --git a/tests/blobs/test_fs_backend.py b/tests/blobs/test_fs_backend.py
index 5a136f00..4dbee595 100644
--- a/tests/blobs/test_fs_backend.py
+++ b/tests/blobs/test_fs_backend.py
@@ -172,14 +172,13 @@ class FilesystemBackendTestCase(unittest.TestCase):
@mock.patch('leap.soledad.server._blobs.os.unlink')
def test_delete_blob(self, unlink_mock):
backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
- request = DummyRequest([''])
# write a blob...
path = backend._get_path('user', 'blob_id', '')
mkdir_p(os.path.split(path)[0])
with open(path, "w") as f:
f.write("bl0b")
# ...and delete it
- backend.delete_blob('user', 'blob_id', request)
+ backend.delete_blob('user', 'blob_id')
unlink_mock.assert_any_call(backend._get_path('user',
'blob_id'))
unlink_mock.assert_any_call(backend._get_path('user',
@@ -189,14 +188,13 @@ class FilesystemBackendTestCase(unittest.TestCase):
@mock.patch('leap.soledad.server._blobs.os.unlink')
def test_delete_blob_custom_namespace(self, unlink_mock):
backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
- request = DummyRequest([''])
# write a blob...
path = backend._get_path('user', 'blob_id', 'trash')
mkdir_p(os.path.split(path)[0])
with open(path, "w") as f:
f.write("bl0b")
# ...and delete it
- backend.delete_blob('user', 'blob_id', request, namespace='trash')
+ backend.delete_blob('user', 'blob_id', namespace='trash')
unlink_mock.assert_any_call(backend._get_path('user',
'blob_id',
'trash'))