Skip to content
Snippets Groups Projects
Verified Commit ad1e3a4a authored by drebs's avatar drebs
Browse files

[refactor] make delete_blob() return a deferred

parent 06ade52b
Branches
Tags
1 merge request!169#9007 - improve and document IBlobsBackend
......@@ -147,6 +147,7 @@ class FilesystemBlobsBackend(object):
os.unlink(blob_path + '.flags')
except Exception:
pass
return defer.succeed(None)
def get_blob_size(self, user, blob_id, namespace=''):
blob_path = self._get_path(user, blob_id, namespace)
......@@ -303,13 +304,17 @@ class BlobsResource(resource.Resource):
def render_DELETE(self, request):
logger.info("http put: %s" % request.path)
user, blob_id, namespace = self._validate(request)
try:
self._handler.delete_blob(user, blob_id, namespace=namespace)
return ''
except BlobNotFound:
def catchBlobNotFound(failure):
failure.trap(BlobNotFound)
request.setResponseCode(404)
return "Blob doesn't exists: %s" % blob_id
d = self._handler.delete_blob(user, blob_id, namespace=namespace)
d.addCallback(lambda _: request.finish())
d.addErrback(catchBlobNotFound)
return NOT_DONE_YET
def render_PUT(self, request):
logger.info("http put: %s" % request.path)
user, blob_id, namespace = self._validate(request)
......
......@@ -69,6 +69,9 @@ class IBlobsBackend(Interface):
:type blob_id: str
:param namespace: An optional namespace for the blob.
:type namespace: str
:return: A deferred that fires when the blob has been deleted.
:rtype: twisted.internet.defer.Deferred
"""
def get_blob_size(user, blob_id, namespace=''):
......
......@@ -170,6 +170,7 @@ class FilesystemBackendTestCase(unittest.TestCase):
@pytest.mark.usefixtures("method_tmpdir")
@mock.patch('leap.soledad.server._blobs.os.unlink')
@defer.inlineCallbacks
def test_delete_blob(self, unlink_mock):
backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
# write a blob...
......@@ -178,7 +179,7 @@ class FilesystemBackendTestCase(unittest.TestCase):
with open(path, "w") as f:
f.write("bl0b")
# ...and delete it
backend.delete_blob('user', 'blob_id')
yield 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',
......@@ -186,6 +187,7 @@ class FilesystemBackendTestCase(unittest.TestCase):
@pytest.mark.usefixtures("method_tmpdir")
@mock.patch('leap.soledad.server._blobs.os.unlink')
@defer.inlineCallbacks
def test_delete_blob_custom_namespace(self, unlink_mock):
backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
# write a blob...
......@@ -194,7 +196,7 @@ class FilesystemBackendTestCase(unittest.TestCase):
with open(path, "w") as f:
f.write("bl0b")
# ...and delete it
backend.delete_blob('user', 'blob_id', namespace='trash')
yield backend.delete_blob('user', 'blob_id', namespace='trash')
unlink_mock.assert_any_call(backend._get_path('user',
'blob_id',
'trash'))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment