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])
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])
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])
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])
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)))
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])
def test_set_qs(self): url = 'http://whatever:8080/hello/world?param1=value1¶m2=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)
def test_set_qs(self): url = 'http://whatever:8080/hello/world?param1=value1¶m2=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)
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)