diff options
| -rw-r--r-- | src/leap/soledad/client/_db/blobs.py | 18 | ||||
| -rw-r--r-- | src/leap/soledad/common/blobs/__init__.py | 19 | ||||
| -rw-r--r-- | src/leap/soledad/server/_blobs.py | 8 | ||||
| -rw-r--r-- | testing/tests/server/test_blobs_server.py | 9 | 
4 files changed, 39 insertions, 15 deletions
| diff --git a/src/leap/soledad/client/_db/blobs.py b/src/leap/soledad/client/_db/blobs.py index dbaf00b1..148e1ff1 100644 --- a/src/leap/soledad/client/_db/blobs.py +++ b/src/leap/soledad/client/_db/blobs.py @@ -114,7 +114,7 @@ def check_http_status(code):      elif code == 406:          raise InvalidFlagsError()      elif code != 200: -        raise SoledadError("Server Error") +        raise SoledadError("Server Error: %s" % code)  class DecrypterBuffer(object): @@ -272,6 +272,11 @@ class BlobManager(object):          flags = BytesIO(json.dumps(flags))          uri = urljoin(self.remote, self.user + "/" + blob_id)          response = yield self._client.post(uri, data=flags, params=params) +        if response.code == 404: +            logger.error("Blob not found during set_flags: %s" % blob_id) +            msg = "No blob found on server while trying to set flags: %s" +            raise SoledadError(msg % (blob_id)) +          check_http_status(response.code)      @defer.inlineCallbacks @@ -290,12 +295,11 @@ class BlobManager(object):          """          uri = urljoin(self.remote, self.user + "/" + blob_id)          params.update({'only_flags': True}) -        data = yield self._client.get(uri, params=params) -        try: -            data = yield data.json() -        except: -            data = [] -        defer.returnValue(data) +        response = yield self._client.get(uri, params=params) +        if response.code == 404: +            logger.warn("Blob not found in server: %s" % blob_id) +            defer.returnValue(None) +        defer.returnValue((yield response.json()))      @defer.inlineCallbacks      def get(self, blob_id): diff --git a/src/leap/soledad/common/blobs/__init__.py b/src/leap/soledad/common/blobs/__init__.py index 814829ab..34a04d3c 100644 --- a/src/leap/soledad/common/blobs/__init__.py +++ b/src/leap/soledad/common/blobs/__init__.py @@ -1,3 +1,22 @@ +# -*- coding: utf-8 -*- +# __init__.py +# Copyright (C) 2017 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +""" +Represents flags that can be used on blobs. +"""  from collections import namedtuple  ACCEPTED_FLAGS = ['PENDING', 'PROCESSING', 'PROCESSED', 'FAILED']  Flags = namedtuple('Flags', ' '.join(ACCEPTED_FLAGS))(*ACCEPTED_FLAGS) diff --git a/src/leap/soledad/server/_blobs.py b/src/leap/soledad/server/_blobs.py index 85983bd1..6afd802c 100644 --- a/src/leap/soledad/server/_blobs.py +++ b/src/leap/soledad/server/_blobs.py @@ -76,10 +76,6 @@ class FilesystemBlobsBackend(object):      def get_flags(self, user, blob_id, request, namespace=''):          path = self._get_path(user, blob_id, namespace) -        try: -            mkdir_p(os.path.split(path)[0]) -        except OSError: -            pass          if not os.path.isfile(path):              # 404 - Not Found              request.setResponseCode(404) @@ -91,10 +87,6 @@ class FilesystemBlobsBackend(object):      def set_flags(self, user, blob_id, request, namespace=''):          path = self._get_path(user, blob_id, namespace) -        try: -            mkdir_p(os.path.split(path)[0]) -        except OSError: -            pass          if not os.path.isfile(path):              # 404 - Not Found              request.setResponseCode(404) diff --git a/testing/tests/server/test_blobs_server.py b/testing/tests/server/test_blobs_server.py index dde25668..152215d1 100644 --- a/testing/tests/server/test_blobs_server.py +++ b/testing/tests/server/test_blobs_server.py @@ -31,6 +31,7 @@ from leap.soledad.server import _blobs as server_blobs  from leap.soledad.client._db.blobs import BlobManager  from leap.soledad.client._db.blobs import BlobAlreadyExistsError  from leap.soledad.client._db.blobs import InvalidFlagsError +from leap.soledad.client._db.blobs import SoledadError  class BlobServerTestCase(unittest.TestCase): @@ -70,6 +71,14 @@ class BlobServerTestCase(unittest.TestCase):      @defer.inlineCallbacks      @pytest.mark.usefixtures("method_tmpdir") +    def test_set_flags_raises_if_no_blob_found(self): +        manager = BlobManager('', self.uri, self.secret, +                              self.secret, 'user') +        with pytest.raises(SoledadError): +            yield manager.set_flags('missing_id', [Flags.PENDING]) + +    @defer.inlineCallbacks +    @pytest.mark.usefixtures("method_tmpdir")      def test_list_filter_flag(self):          manager = BlobManager('', self.uri, self.secret,                                self.secret, 'user') | 
