def get_all(self, vault_id, file_id): vault = Vault.get(request.project_id, vault_id) assert vault is not None f = vault.get_file(file_id) if not f: abort(404) inmarker = int(request.params.get('marker', 0)) limit = int(request.params.get('limit', conf.api_configuration.max_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( request.project_id, vault_id, file_id, inmarker, limit + 1) resp = list(retblks) truncated = len(resp) > 0 and len(resp) == limit + 1 outmarker = resp.pop()[1] if truncated else None if outmarker: query_args = {'marker': outmarker} query_args['limit'] = limit returl = set_qs(request.url, query_args) response.headers["X-Next-Batch"] = returl return resp
def get_all(self, vault_id): vault = Vault.get(request.project_id, vault_id) if not vault: response.status_code = 404 return inmarker = request.params.get('marker') limit = int(request.params.get('limit', conf.api_configuration.max_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(??) resp = list(blocks) # Was the list truncated? See note above about +1 truncated = len(resp) > 0 and len(resp) == limit + 1 outmarker = resp.pop().block_id if truncated else None if outmarker: query_args = {'marker': outmarker} query_args['limit'] = limit returl = set_qs(request.url, query_args) response.headers["X-Next-Batch"] = returl return resp
def get_all(self, vault_id): vault = Vault.get(request.project_id, vault_id) if not vault: abort(404) inmarker = request.params.get('marker') limit = int(request.params.get('limit', conf.api_configuration.max_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) resp = list(files) # Note: the list may not actually be truncated truncated = len(resp) == limit + 1 outmarker = resp.pop().file_id if truncated else None if outmarker: query_args = {'marker': outmarker} query_args['limit'] = limit returl = set_qs(request.url, query_args) response.headers["X-Next-Batch"] = returl return resp
def test_set_qs(self): url = 'http://whatever:8080/hello/world?param1=value1¶m2=value2' # Empty case testurl = set_qs(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 test_set_qs_on_url(self): url = 'http://whatever:8080/hello/world' # Empty case query_string = set_qs(url, args={'param1': 'value1'}) self.assertEqual('param1=value1', query_string)