Adding support for query filtering to list() calls

Each of the list() methods now supports an extra
parameter, search_opts, which is a dict that will
contain search fields and values to limit the result
sets.  The changes here will also rely upon changes
to the Sahara service to support query-style
parameters.

Change-Id: I26986cbc153c3f8ad74b52d91086afbdfbd93926
Implements: bp enable-result-filtering
This commit is contained in:
Chad Roberts
2014-11-17 16:12:29 -05:00
parent 8cfc1d6a1f
commit 36d8a134d6
11 changed files with 41 additions and 20 deletions

View File

@@ -17,6 +17,7 @@ import json
import logging
import six
from six.moves.urllib import parse
from saharaclient.openstack.common.gettextutils import _
@@ -161,3 +162,12 @@ class APIException(Exception):
self.error_code = error_code
self.error_name = error_name
self.error_message = error_message
def get_query_string(search_opts):
if search_opts:
qparams = sorted(search_opts.items(), key=lambda x: x[0])
query_string = "?%s" % parse.urlencode(qparams)
else:
query_string = ""
return query_string

View File

@@ -60,8 +60,9 @@ class ClusterTemplateManager(base.ResourceManager):
return self._update('/cluster-templates/%s' % cluster_template_id,
data, 'cluster_template')
def list(self):
return self._list('/cluster-templates', 'cluster_templates')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/cluster-templates%s' % query, 'cluster_templates')
def get(self, cluster_template_id):
return self._get('/cluster-templates/%s' % cluster_template_id,

View File

@@ -64,8 +64,9 @@ class ClusterManager(base.ResourceManager):
def scale(self, cluster_id, scale_object):
return self._update('/clusters/%s' % cluster_id, scale_object)
def list(self):
return self._list('/clusters', 'clusters')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/clusters%s' % query, 'clusters')
def get(self, cluster_id):
return self._get('/clusters/%s' % cluster_id, 'cluster')

View File

@@ -37,8 +37,9 @@ class DataSourceManager(base.ResourceManager):
password=credential_pass)
return self._create('/data-sources', data, 'data_source')
def list(self):
return self._list('/data-sources', 'data_sources')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/data-sources%s' % query, 'data_sources')
def get(self, data_source_id):
return self._get('/data-sources/%s' % data_source_id, 'data_source')

View File

@@ -26,8 +26,9 @@ class Image(base.Resource):
class ImageManager(base.ResourceManager):
resource_class = Image
def list(self):
return self._list('/images', 'images')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/images%s' % query, 'images')
def get(self, id):
return self._get('/images/%s' % id, 'image')

View File

@@ -33,8 +33,9 @@ class JobBinariesManager(base.ResourceManager):
return self._create('/job-binaries', data, 'job_binary')
def list(self):
return self._list('/job-binaries', 'binaries')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/job-binaries%s' % query, 'binaries')
def get(self, job_binary_id):
return self._get('/job-binaries/%s' % job_binary_id, 'job_binary')

View File

@@ -27,8 +27,9 @@ class JobBinaryInternalsManager(base.ResourceManager):
return self._update('/job-binary-internals/%s' % name, data,
'job_binary_internal', dump_json=False)
def list(self):
return self._list('/job-binary-internals', 'binaries')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/job-binary-internals%s' % query, 'binaries')
def get(self, job_binary_id):
return self._get('/job-binary-internals/%s' % job_binary_id,

View File

@@ -23,8 +23,9 @@ class JobExecution(base.Resource):
class JobExecutionsManager(base.ResourceManager):
resource_class = JobExecution
def list(self):
return self._list('/job-executions', 'job_executions')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/job-executions%s' % query, 'job_executions')
def get(self, obj_id):
return self._get('/job-executions/%s' % obj_id, 'job_execution')

View File

@@ -34,8 +34,9 @@ class JobsManager(base.ResourceManager):
return self._create('/jobs', data, 'job')
def list(self):
return self._list('/jobs', 'jobs')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/jobs%s' % query, 'jobs')
def get(self, job_id):
return self._get('/jobs/%s' % job_id, 'job')

View File

@@ -93,8 +93,10 @@ class NodeGroupTemplateManager(base.ResourceManager):
return self._update('/node-group-templates/%s' % ng_template_id, data,
'node_group_template')
def list(self):
return self._list('/node-group-templates', 'node_group_templates')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/node-group-templates%s' % query,
'node_group_templates')
def get(self, ng_template_id):
return self._get('/node-group-templates/%s' % ng_template_id,

View File

@@ -31,8 +31,9 @@ class Plugin(base.Resource):
class PluginManager(base.ResourceManager):
resource_class = Plugin
def list(self):
return self._list('/plugins', 'plugins')
def list(self, search_opts=None):
query = base.get_query_string(search_opts)
return self._list('/plugins%s' % query, 'plugins')
def get(self, plugin_name):
return self._get('/plugins/%s' % plugin_name, 'plugin')