summaryrefslogtreecommitdiff
path: root/src/leap/soledad/server/_streaming_resource.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/leap/soledad/server/_streaming_resource.py')
-rw-r--r--src/leap/soledad/server/_streaming_resource.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/leap/soledad/server/_streaming_resource.py b/src/leap/soledad/server/_streaming_resource.py
index 9b672107..59bb383e 100644
--- a/src/leap/soledad/server/_streaming_resource.py
+++ b/src/leap/soledad/server/_streaming_resource.py
@@ -24,7 +24,7 @@ import base64
from zope.interface import implementer
from twisted.internet.interfaces import IPushProducer
-from twisted.internet import task
+from twisted.internet import task, defer
from twisted.web.server import NOT_DONE_YET
from twisted.web.resource import Resource
@@ -61,12 +61,20 @@ class StreamingResource(Resource):
db = self._handler
raw_content = request.content.read()
blob_ids = json.loads(raw_content)
- paths = []
+ deferreds = []
for blob_id in blob_ids:
+
+ def _get_blob_info(blob_id, path):
+ d = db.get_blob_size(user, blob_id, namespace)
+ d.addCallback(lambda size: (blob_id, path, size))
+ return d
+
path = db._get_path(user, blob_id, namespace)
- size = db.get_blob_size(user, blob_id, namespace)
- paths.append((blob_id, path, size))
- DownstreamProducer(request, paths).start()
+ d = _get_blob_info(blob_id, path)
+ deferreds.append(d)
+ d = defer.gatherResults(deferreds)
+ d.addCallback(
+ lambda paths: DownstreamProducer(request, paths).start())
return NOT_DONE_YET