Example #1
0
    def on_get(self, req, resp, vault_id):
        """List the blocks in the vault from storage-alone
        """
        vault = Vault.get(vault_id)
        if vault is None:
            logger.error('Vault [{0}] does not exist'.format(vault_id))
            raise errors.HTTPNotFound

        inmarker = req.get_param('marker') if req.get_param('marker') else None
        limit = req.get_param_as_int('limit') if req.get_param_as_int('limit') else \
            conf.api_configuration.default_returned_num

        # We actually fetch the user's requested
        # limit +1 to detect if the list is being
        # truncated or not.
        storage = BlockStorage.get(vault_id)
        storage_blocks = storage.get_blocks_generator(inmarker, limit + 1)

        responses = list(storage_blocks)

        # Was the list truncated? See note above about +1
        truncated = len(responses) > 0 and len(responses) == limit + 1

        outmarker = responses.pop().storage_block_id if truncated else None

        if outmarker:
            query_args = {'marker': outmarker}
            query_args['limit'] = limit
            returl = set_qs_on_url(req.url, query_args)
            resp.set_header("X-Next-Batch", returl)

        resp.body = json.dumps(
            [response.storage_block_id for response in responses])
Example #2
0
    def on_get(self, req, resp, vault_id):

        vault = Vault.get(vault_id)
        if not vault:
            logger.error('Vault [{0}] does not exist'.format(vault_id))
            raise errors.HTTPNotFound
        # NOTE(TheSriram): get_param(param) automatically returns None
        # if param is not present
        inmarker = req.get_param('marker')
        limit = req.get_param_as_int('limit') if req.get_param_as_int('limit') else \
            conf.api_configuration.default_returned_num

        # We actually fetch the user's requested
        # limit +1 to detect if the list is being
        # truncated or not.
        blocks = vault.get_blocks(inmarker, limit + 1)

        # List the blocks into JSON and return.
        # TODO: figure out a way to stream this back(??)
        responses = list(blocks)

        # Was the list truncated? See note above about +1
        truncated = len(responses) > 0 and len(responses) == limit + 1

        outmarker = responses.pop().metadata_block_id if truncated else None

        if outmarker:
            query_args = {'marker': outmarker}
            query_args['limit'] = limit
            returl = set_qs_on_url(req.url, query_args)
            resp.set_header("X-Next-Batch", returl)

        resp.body = json.dumps([response.metadata_block_id
                                for response in responses])
Example #3
0
    def on_get(self, req, resp, vault_id):

        vault = Vault.get(vault_id)
        if not vault:
            logger.error('Vault [{0}] does not exist'.format(vault_id))
            raise errors.HTTPNotFound
        # NOTE(TheSriram): get_param(param) automatically returns None
        # if param is not present
        inmarker = req.get_param('marker')
        limit = req.get_param_as_int('limit') if req.get_param_as_int('limit') else \
            conf.api_configuration.default_returned_num

        # We actually fetch the user's requested
        # limit +1 to detect if the list is being
        # truncated or not.
        blocks = vault.get_blocks(inmarker, limit + 1)

        # List the blocks into JSON and return.
        # TODO: figure out a way to stream this back(??)
        responses = list(blocks)

        # Was the list truncated? See note above about +1
        truncated = len(responses) > 0 and len(responses) == limit + 1

        outmarker = responses.pop().metadata_block_id if truncated else None

        if outmarker:
            query_args = {'marker': outmarker}
            query_args['limit'] = limit
            returl = set_qs_on_url(req.url, query_args)
            resp.set_header("X-Next-Batch", returl)

        resp.body = json.dumps(
            [response.metadata_block_id for response in responses])
Example #4
0
    def on_get(self, req, resp, vault_id):
        """List the blocks in the vault from storage-alone
        """
        vault = Vault.get(vault_id)
        if vault is None:
            logger.error("Vault [{0}] does not exist".format(vault_id))
            raise errors.HTTPNotFound

        inmarker = req.get_param("marker") if req.get_param("marker") else None
        limit = (
            req.get_param_as_int("limit")
            if req.get_param_as_int("limit")
            else conf.api_configuration.default_returned_num
        )

        # We actually fetch the user's requested
        # limit +1 to detect if the list is being
        # truncated or not.
        storage = BlockStorage.get(vault_id)
        storage_blocks = storage.get_blocks_generator(inmarker, limit + 1)

        responses = list(storage_blocks)

        # Was the list truncated? See note above about +1
        truncated = len(responses) > 0 and len(responses) == limit + 1

        outmarker = responses.pop().storage_block_id if truncated else None

        if outmarker:
            query_args = {"marker": outmarker}
            query_args["limit"] = limit
            returl = set_qs_on_url(req.url, query_args)
            resp.set_header("X-Next-Batch", returl)

        resp.body = json.dumps([response.storage_block_id for response in responses])
Example #5
0
    def on_get(self, req, resp):

        # NOTE(TheSriram): get_param(param) automatically returns None
        # if param is not present
        inmarker = req.get_param('marker')
        limit = req.get_param_as_int('limit') if req.get_param_as_int('limit') else \
            conf.api_configuration.default_returned_num

        vaultlist = Vault.get_vaults_generator(
            inmarker, limit + 1)
        response = list(vaultlist)

        if not response:
            resp.body = json.dumps([])

        # Note: the list may not actually be truncated
        truncated = len(response) == limit + 1

        outmarker = response.pop() if truncated else None

        # Set x-next-batch resp header.
        if outmarker:
            query_args = {'marker': outmarker}
            query_args['limit'] = limit
            returl = set_qs_on_url(req.url, query_args)
            resp.set_header(name="X-Next-Batch", value=returl)

        # Set return json for vault URLs.
        p = urlparse(req.url)
        resp.body = json.dumps(dict(six.moves.map(lambda vaultname:
            (vaultname, {"url": p.scheme +
                '://' + p.netloc + p.path + '/' + vaultname}), response)))
Example #6
0
    def on_get(self, req, resp, vault_id):
        vault = Vault.get(vault_id)

        if not vault:
            logger.error('Vault [{0}] does not exist'.format(vault_id))
            raise errors.HTTPNotFound
        # NOTE(TheSriram): get_param(param) automatically returns None
        # if param is not present
        inmarker = req.get_param('marker')
        limit = req.get_param_as_int('limit') if req.get_param_as_int('limit') \
            else conf.api_configuration.default_returned_num

        # The +1 is to fetch one past the user's
        # requested limit so that we can determine
        # if the list was truncated or not
        files = vault.get_files(inmarker, limit + 1)

        responses = list(files)

        # Note: the list may not actually be truncated
        truncated = len(responses) == limit + 1

        outmarker = responses.pop().file_id if truncated else None

        if outmarker:
            query_args = {'marker': outmarker}
            query_args['limit'] = limit

            returl = set_qs_on_url(req.url, query_args)

            resp.set_header("X-Next-Batch", returl)

        resp.body = json.dumps([response.file_id for response in responses])
Example #7
0
    def test_set_qs(self):
        url = 'http://whatever:8080/hello/world?param1=value1&param2=value2'

        # Empty case
        testurl = set_qs_on_url(url)
        self.assertEqual(testurl, 'http://whatever:8080/hello/world')

        positive_cases = [
            {'whatever': '3'},
            {'hello': 'whatever'},
            {'yes': u'whatever'}
        ]

        for args in positive_cases:
            output = set_qs(url, args)
            parts = parse.urlparse(output)

            qs = parts.query
            output = parse.parse_qs(qs)
Example #8
0
    def test_set_qs(self):
        url = 'http://whatever:8080/hello/world?param1=value1&param2=value2'

        # Empty case
        testurl = set_qs_on_url(url)
        self.assertEqual(testurl, 'http://whatever:8080/hello/world')

        positive_cases = [{
            'whatever': '3'
        }, {
            'hello': 'whatever'
        }, {
            'yes': u'whatever'
        }]

        for args in positive_cases:
            output = set_qs(url, args)
            parts = parse.urlparse(output)

            qs = parts.query
            output = parse.parse_qs(qs)
Example #9
0
    def on_get(self, req, resp, vault_id, file_id):

        vault = Vault.get(vault_id)

        assert vault is not None

        f = vault.get_file(file_id)

        if not f:
            logger.error('File [{0}] does not exist'.format(file_id))
            raise errors.HTTPNotFound
        # NOTE(TheSriram): get_param(param) automatically returns None
        # if param is not present
        inmarker = req.get_param_as_int('marker')
        limit = req.get_param_as_int('limit') if req.get_param_as_int('limit') \
            else conf.api_configuration.default_returned_num

        # Get the block generator from the metadata driver.
        # Note: +1 on limit is to fetch one past the limt
        # for the purpose of determining if the
        # list was truncated

        retblks = deuce.metadata_driver.create_file_block_generator(
            vault_id, file_id, inmarker, limit + 1)

        responses = list(retblks)

        truncated = len(responses) > 0 and len(responses) == limit + 1
        outmarker = responses.pop()[1] if truncated else None

        if outmarker:
            query_args = {'marker': outmarker}
            query_args['limit'] = limit

            returl = set_qs_on_url(req.url, query_args)
            resp.set_header("X-Next-Batch", returl)

        resp.body = json.dumps(responses)
Example #10
0
    def on_get(self, req, resp, vault_id, file_id):

        vault = Vault.get(vault_id)

        assert vault is not None

        f = vault.get_file(file_id)

        if not f:
            logger.error('File [{0}] does not exist'.format(file_id))
            raise errors.HTTPNotFound
        # NOTE(TheSriram): get_param(param) automatically returns None
        # if param is not present
        inmarker = req.get_param_as_int('marker')
        limit = req.get_param_as_int('limit') if req.get_param_as_int('limit') \
            else conf.api_configuration.default_returned_num

        # Get the block generator from the metadata driver.
        # Note: +1 on limit is to fetch one past the limt
        # for the purpose of determining if the
        # list was truncated

        retblks = deuce.metadata_driver.create_file_block_generator(
            vault_id, file_id, inmarker, limit + 1)

        responses = list(retblks)

        truncated = len(responses) > 0 and len(responses) == limit + 1
        outmarker = responses.pop()[1] if truncated else None

        if outmarker:
            query_args = {'marker': outmarker}
            query_args['limit'] = limit

            returl = set_qs_on_url(req.url, query_args)
            resp.set_header("X-Next-Batch", returl)

        resp.body = json.dumps(responses)