diff --git a/src/leap/soledad/server/_blobs.py b/src/leap/soledad/server/_blobs.py index 9d1c9b1eaf1e99d8de2adb69acd2f22dbd2ec4e3..5fe9c1b70dd529e8d6a460d2123dbed46c943c95 100644 --- a/src/leap/soledad/server/_blobs.py +++ b/src/leap/soledad/server/_blobs.py @@ -101,11 +101,12 @@ class FilesystemBlobsBackend(object): def get_flags(self, user, blob_id, namespace=''): path = self._get_path(user, blob_id, namespace) if not os.path.isfile(path): - raise BlobNotFound + return defer.fail(BlobNotFound) if not os.path.isfile(path + '.flags'): - return [] + return defer.succeed([]) with open(path + '.flags', 'r') as flags_file: - return json.loads(flags_file.read()) + flags = json.loads(flags_file.read()) + return defer.succeed(flags) def set_flags(self, user, blob_id, flags, namespace=''): path = self._get_path(user, blob_id, namespace) @@ -298,8 +299,11 @@ class BlobsResource(resource.Resource): only_flags = request.args.get('only_flags', [False])[0] try: if only_flags: - flags = self._handler.get_flags(user, blob_id, namespace) - return json.dumps(flags) + d = self._handler.get_flags(user, blob_id, namespace) + d.addCallback(lambda flags: json.dumps(flags)) + d.addCallback(lambda flags: request.write(flags)) + d.addCallback(lambda _: request.finish()) + return NOT_DONE_YET tag = self._handler.get_tag(user, blob_id, namespace) request.responseHeaders.setRawHeaders('Tag', [tag]) except BlobNotFound: diff --git a/src/leap/soledad/server/interfaces.py b/src/leap/soledad/server/interfaces.py index ecea0bf85bcd7387c95eb49fa6e45be59e066659..bd804573d388c19b9e51945eec32d17e14adff1c 100644 --- a/src/leap/soledad/server/interfaces.py +++ b/src/leap/soledad/server/interfaces.py @@ -173,8 +173,8 @@ class IBlobsBackend(Interface): :param namespace: An optional namespace for the blob. :type namespace: str - :return: a list of flags. - :rtype: list of str + :return: A deferred that fires with the list of flags for a blob. + :rtype: twisted.internet.defer.Deferred """ def set_flags(user, blob_id, flags, namespace=''):