From 36d8a134d679d9c0e6c9b09c3c1c584a32797cfb Mon Sep 17 00:00:00 2001 From: Chad Roberts Date: Mon, 17 Nov 2014 16:12:29 -0500 Subject: 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 --- saharaclient/api/base.py | 10 ++++++++++ saharaclient/api/cluster_templates.py | 5 +++-- saharaclient/api/clusters.py | 5 +++-- saharaclient/api/data_sources.py | 5 +++-- saharaclient/api/images.py | 5 +++-- saharaclient/api/job_binaries.py | 5 +++-- saharaclient/api/job_binary_internals.py | 5 +++-- saharaclient/api/job_executions.py | 5 +++-- saharaclient/api/jobs.py | 5 +++-- saharaclient/api/node_group_templates.py | 6 ++++-- saharaclient/api/plugins.py | 5 +++-- 11 files changed, 41 insertions(+), 20 deletions(-) diff --git a/saharaclient/api/base.py b/saharaclient/api/base.py index c2c9c36..ee85c2d 100644 --- a/saharaclient/api/base.py +++ b/saharaclient/api/base.py @@ -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 \ No newline at end of file diff --git a/saharaclient/api/cluster_templates.py b/saharaclient/api/cluster_templates.py index 7bb3f61..44f4bc5 100644 --- a/saharaclient/api/cluster_templates.py +++ b/saharaclient/api/cluster_templates.py @@ -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, diff --git a/saharaclient/api/clusters.py b/saharaclient/api/clusters.py index ec9a822..a86c270 100644 --- a/saharaclient/api/clusters.py +++ b/saharaclient/api/clusters.py @@ -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') diff --git a/saharaclient/api/data_sources.py b/saharaclient/api/data_sources.py index 7ba0059..1fa5fb6 100644 --- a/saharaclient/api/data_sources.py +++ b/saharaclient/api/data_sources.py @@ -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') diff --git a/saharaclient/api/images.py b/saharaclient/api/images.py index a705e15..8606d5e 100644 --- a/saharaclient/api/images.py +++ b/saharaclient/api/images.py @@ -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') diff --git a/saharaclient/api/job_binaries.py b/saharaclient/api/job_binaries.py index a1e4b9e..d6f84c9 100644 --- a/saharaclient/api/job_binaries.py +++ b/saharaclient/api/job_binaries.py @@ -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') diff --git a/saharaclient/api/job_binary_internals.py b/saharaclient/api/job_binary_internals.py index b90d478..c92cd4d 100644 --- a/saharaclient/api/job_binary_internals.py +++ b/saharaclient/api/job_binary_internals.py @@ -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, diff --git a/saharaclient/api/job_executions.py b/saharaclient/api/job_executions.py index 68ef4e6..c5af07e 100644 --- a/saharaclient/api/job_executions.py +++ b/saharaclient/api/job_executions.py @@ -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') diff --git a/saharaclient/api/jobs.py b/saharaclient/api/jobs.py index d3231eb..6e10ccd 100644 --- a/saharaclient/api/jobs.py +++ b/saharaclient/api/jobs.py @@ -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') diff --git a/saharaclient/api/node_group_templates.py b/saharaclient/api/node_group_templates.py index 9344163..eb4e5f4 100644 --- a/saharaclient/api/node_group_templates.py +++ b/saharaclient/api/node_group_templates.py @@ -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, diff --git a/saharaclient/api/plugins.py b/saharaclient/api/plugins.py index 967da39..0e877a4 100644 --- a/saharaclient/api/plugins.py +++ b/saharaclient/api/plugins.py @@ -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') -- cgit v1.2.1