Merge "Pass query parameters in GET request to list handler"
This commit is contained in:
commit
261aa2c188
|
@ -31,14 +31,15 @@ class API(object):
|
|||
# Leases operations
|
||||
|
||||
@policy.authorize('leases', 'get')
|
||||
def get_leases(self):
|
||||
def get_leases(self, query):
|
||||
"""List all existing leases."""
|
||||
ctx = context.current()
|
||||
if policy.enforce(ctx, 'admin', {}, do_raise=False):
|
||||
project_id = None
|
||||
else:
|
||||
project_id = ctx.project_id
|
||||
return self.manager_rpcapi.list_leases(project_id=project_id)
|
||||
return self.manager_rpcapi.list_leases(project_id=project_id,
|
||||
query=query)
|
||||
|
||||
@policy.authorize('leases', 'post')
|
||||
@trusts.use_trust_auth()
|
||||
|
|
|
@ -28,10 +28,10 @@ _api = utils.LazyProxy(service.API)
|
|||
|
||||
# Leases operations
|
||||
|
||||
@rest.get('/leases')
|
||||
def leases_list():
|
||||
@rest.get('/leases', query=True)
|
||||
def leases_list(query):
|
||||
"""List all existing leases."""
|
||||
return api_utils.render(leases=_api.get_leases())
|
||||
return api_utils.render(leases=_api.get_leases(query))
|
||||
|
||||
|
||||
@rest.post('/leases')
|
||||
|
|
|
@ -23,9 +23,9 @@ class API(object):
|
|||
self.manager_rpcapi = manager_rpcapi.ManagerRPCAPI()
|
||||
|
||||
@policy.authorize('oshosts', 'get')
|
||||
def get_computehosts(self):
|
||||
def get_computehosts(self, query):
|
||||
"""List all existing computehosts."""
|
||||
return self.manager_rpcapi.list_computehosts()
|
||||
return self.manager_rpcapi.list_computehosts(query=query)
|
||||
|
||||
@policy.authorize('oshosts', 'post')
|
||||
@trusts.use_trust_auth()
|
||||
|
|
|
@ -25,10 +25,10 @@ _api = utils.LazyProxy(service.API)
|
|||
|
||||
# Computehosts operations
|
||||
|
||||
@rest.get('')
|
||||
def computehosts_list():
|
||||
@rest.get('', query=True)
|
||||
def computehosts_list(query=None):
|
||||
"""List all existing computehosts."""
|
||||
return api_utils.render(hosts=_api.get_computehosts())
|
||||
return api_utils.render(hosts=_api.get_computehosts(query))
|
||||
|
||||
|
||||
@rest.post('')
|
||||
|
|
|
@ -33,8 +33,12 @@ LOG = logging.getLogger(__name__)
|
|||
class Rest(flask.Blueprint):
|
||||
"""REST helper class."""
|
||||
|
||||
def get(self, rule, status_code=200):
|
||||
return self._mroute('GET', rule, status_code)
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Rest, self).__init__(*args, **kwargs)
|
||||
self.routes_with_query_support = []
|
||||
|
||||
def get(self, rule, status_code=200, query=False):
|
||||
return self._mroute('GET', rule, status_code, query=query)
|
||||
|
||||
def post(self, rule, status_code=201):
|
||||
return self._mroute('POST', rule, status_code)
|
||||
|
@ -55,13 +59,13 @@ class Rest(flask.Blueprint):
|
|||
"""Routes REST method and its params to the actual request."""
|
||||
status = options.pop('status_code', None)
|
||||
file_upload = options.pop('file_upload', False)
|
||||
query = options.pop('query', False)
|
||||
|
||||
def decorator(func):
|
||||
endpoint = options.pop('endpoint', func.__name__)
|
||||
|
||||
def handler(**kwargs):
|
||||
LOG.debug("Rest.route.decorator.handler, kwargs=%s", kwargs)
|
||||
|
||||
_init_resp_type(file_upload)
|
||||
|
||||
# update status code
|
||||
|
@ -71,6 +75,10 @@ class Rest(flask.Blueprint):
|
|||
if flask.request.method in ['POST', 'PUT']:
|
||||
kwargs['data'] = request_data()
|
||||
|
||||
if flask.request.endpoint in self.routes_with_query_support:
|
||||
params = {k: v for k, v in get_request_args().items()}
|
||||
kwargs['query'] = params
|
||||
|
||||
with context.ctx_from_headers(flask.request.headers):
|
||||
try:
|
||||
return func(**kwargs)
|
||||
|
@ -103,6 +111,9 @@ class Rest(flask.Blueprint):
|
|||
except Exception as e:
|
||||
return internal_error(500, 'Internal Server Error', e)
|
||||
|
||||
if query:
|
||||
self.routes_with_query_support.append(
|
||||
'.'.join([self.name, endpoint]))
|
||||
self.add_url_rule(rule, endpoint, handler, **options)
|
||||
self.add_url_rule(rule + '.json', endpoint, handler, **options)
|
||||
|
||||
|
|
|
@ -30,9 +30,9 @@ class ManagerRPCAPI(service.RPCClient):
|
|||
"""Get detailed info about some lease."""
|
||||
return self.call('get_lease', lease_id=lease_id)
|
||||
|
||||
def list_leases(self, project_id=None):
|
||||
def list_leases(self, project_id=None, query=None):
|
||||
"""List all leases."""
|
||||
return self.call('list_leases', project_id=project_id)
|
||||
return self.call('list_leases', project_id=project_id, query=query)
|
||||
|
||||
def create_lease(self, lease_values):
|
||||
"""Create lease with specified parameters."""
|
||||
|
|
|
@ -37,9 +37,9 @@ class ManagerRPCAPI(service.RPCClient):
|
|||
"""Get detailed info about some computehost."""
|
||||
return self.call('physical:host:get_computehost', host_id=host_id)
|
||||
|
||||
def list_computehosts(self):
|
||||
def list_computehosts(self, query=None):
|
||||
"""List all computehosts."""
|
||||
return self.call('physical:host:list_computehosts')
|
||||
return self.call('physical:host:list_computehosts', query=query)
|
||||
|
||||
def create_computehost(self, host_values):
|
||||
"""Create computehost with specified parameters."""
|
||||
|
|
|
@ -215,7 +215,7 @@ class ManagerService(service_utils.RPCServer):
|
|||
def get_lease(self, lease_id):
|
||||
return db_api.lease_get(lease_id)
|
||||
|
||||
def list_leases(self, project_id=None):
|
||||
def list_leases(self, project_id=None, query=None):
|
||||
return db_api.lease_list(project_id)
|
||||
|
||||
def create_lease(self, lease_values):
|
||||
|
|
|
@ -317,7 +317,7 @@ class PhysicalHostPlugin(base.BasePlugin, nova.NovaClientWrapper):
|
|||
else:
|
||||
return host
|
||||
|
||||
def list_computehosts(self):
|
||||
def list_computehosts(self, query=None):
|
||||
raw_host_list = db_api.host_list()
|
||||
host_list = []
|
||||
for host in raw_host_list:
|
||||
|
|
|
@ -36,8 +36,8 @@ class RESTApiTestCase(tests.TestCase):
|
|||
self.fake_id = '1'
|
||||
|
||||
def test_lease_list(self):
|
||||
self.api.leases_list()
|
||||
self.render.assert_called_once_with(leases=self.get_leases())
|
||||
self.api.leases_list(query={})
|
||||
self.render.assert_called_once_with(leases=self.get_leases(query={}))
|
||||
|
||||
def test_leases_create(self):
|
||||
self.api.leases_create(data=None)
|
||||
|
|
|
@ -40,8 +40,9 @@ class RESTApiTestCase(tests.TestCase):
|
|||
self.fake_id = '1'
|
||||
|
||||
def test_computehost_list(self):
|
||||
self.api.computehosts_list()
|
||||
self.render.assert_called_once_with(hosts=self.get_computehosts())
|
||||
self.api.computehosts_list(query={})
|
||||
self.render.assert_called_once_with(
|
||||
hosts=self.get_computehosts(query={}))
|
||||
|
||||
def test_computehosts_create(self):
|
||||
self.api.computehosts_create(data=None)
|
||||
|
|
|
@ -36,7 +36,8 @@ class RPCAPITestCase(tests.TestCase):
|
|||
|
||||
def test_list_leases(self):
|
||||
self.manager.list_leases('fake')
|
||||
self.call.assert_called_once_with('list_leases', project_id='fake')
|
||||
self.call.assert_called_once_with('list_leases', project_id='fake',
|
||||
query=None)
|
||||
|
||||
def test_create_lease(self):
|
||||
self.manager.create_lease(self.fake_values)
|
||||
|
|
|
@ -210,7 +210,7 @@ class PhysicalHostPluginTestCase(tests.TestCase):
|
|||
|
||||
@testtools.skip('incorrect decorator')
|
||||
def test_list_hosts(self):
|
||||
self.fake_phys_plugin.list_computehosts()
|
||||
self.fake_phys_plugin.list_computehosts({})
|
||||
self.db_host_list.assert_called_once_with()
|
||||
del self.service_utils
|
||||
|
||||
|
|
Loading…
Reference in New Issue