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

[refactor] make count() return a deferred

parent 601eb94c
No related branches found
No related tags found
1 merge request!169#9007 - improve and document IBlobsBackend
......@@ -159,7 +159,7 @@ class FilesystemBlobsBackend(object):
count = 0
for _, _, filenames in os.walk(base_path):
count += len(filter(lambda i: not i.endswith('.flags'), filenames))
return json.dumps({"count": count})
return defer.succeed(count)
def list_blobs(self, user, namespace='', order_by=None, deleted=False,
filter_flag=False):
......@@ -279,7 +279,11 @@ class BlobsResource(resource.Resource):
logger.info("http get: %s" % request.path)
user, blob_id, namespace = self._validate(request)
if not blob_id and request.args.get('only_count', [False])[0]:
return self._handler.count(user, namespace)
d = self._handler.count(user, namespace)
d.addCallback(lambda count: json.dumps({"count": count}))
d.addCallback(lambda count: request.write(count))
d.addCallback(lambda _: request.finish())
return NOT_DONE_YET
elif not blob_id:
order = request.args.get('order_by', [None])[0]
filter_flag = request.args.get('filter_flag', [False])[0]
......
......@@ -98,9 +98,9 @@ class IBlobsBackend(Interface):
:param namespace: Restrict the count to a certain namespace.
:type namespace: str
:return: The number of blobs in the backend storage, possibly
restricted to a certain namespace.
:rtype: int
:return: A deferred that fires with the number of blobs in the backend
storage, possibly restricted to a certain namespace.
:rtype: twisted.internet.defer.Deferred
"""
def list_blobs(user, namespace='', order_by=None, deleted=False,
......
......@@ -19,6 +19,7 @@ Tests for blobs backend on server side.
"""
from twisted.trial import unittest
from twisted.internet import defer
from twisted.web.client import FileBodyProducer
from twisted.web.test.test_web import DummyRequest
from leap.common.files import mkdir_p
from leap.soledad.server import _blobs
......@@ -26,6 +27,8 @@ from mock import Mock
import mock
import os
import base64
import io
import json
import pytest
......@@ -209,11 +212,27 @@ class FilesystemBackendTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_write_blob_using_namespace(self):
backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
request = DummyRequest([''])
request.content = BytesIO('content')
yield backend.write_blob('user', 'blob_id', request,
producer = FileBodyProducer(io.BytesIO('content'))
yield backend.write_blob('user', 'blob_id', producer,
namespace='custom')
default = yield backend.list_blobs('user', request)
custom = yield backend.list_blobs('user', request, namespace='custom')
default = yield backend.list_blobs('user')
custom = yield backend.list_blobs('user', namespace='custom')
self.assertEquals([], json.loads(default))
self.assertEquals(['blob_id'], json.loads(custom))
@pytest.mark.usefixtures("method_tmpdir")
@defer.inlineCallbacks
def test_count(self):
backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
content = 'blah'
yield backend.write_blob('user', 'blob_id_1', io.BytesIO(content))
yield backend.write_blob('user', 'blob_id_2', io.BytesIO(content))
yield backend.write_blob('user', 'blob_id_3', io.BytesIO(content))
count = yield backend.count('user')
self.assertEqual(3, count)
yield backend.write_blob('user', 'blob_id_1', io.BytesIO(content),
namespace='xfiles')
yield backend.write_blob('user', 'blob_id_2', io.BytesIO(content),
namespace='xfiles')
count = yield backend.count('user', namespace='xfiles')
self.assertEqual(2, count)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment