Repository : http://git.fedorahosted.org/cgit/cura-tools.git
On branch : master
commit 04d89ce5b2080d1b5c0e6db269e003da7bc1c6eb Author: Peter Hatina phatina@redhat.com Date: Tue Jun 25 13:56:26 2013 +0200
introduce dictionary-based filtering
using key=something, value=something is deprecated
cli-tools/lmi/lmi_client_base.py | 41 +++++++++++++++++++++++++++++++----- cli-tools/lmi/lmi_client_shell.py | 32 +++++++++++++++++----------- 2 files changed, 54 insertions(+), 19 deletions(-)
diff --git a/cli-tools/lmi/lmi_client_base.py b/cli-tools/lmi/lmi_client_base.py index 7707098..5e5f790 100644 --- a/cli-tools/lmi/lmi_client_base.py +++ b/cli-tools/lmi/lmi_client_base.py @@ -100,9 +100,13 @@ class LmiBaseClient(object): self._cliconn = pywbem.WBEMConnection(self._hostname, (self._username, password))
- def _get_instance_names(self, class_name, namespace = None, **kwargs): + # NOTE: usage with Key=something, Value=something is deprecated + # NOTE: inst_filter is either None or dict + def _get_instance_names(self, class_name, namespace = None, inst_filter = None, **kwargs): filter_value = "" filter_key = "Name" + if inst_filter is None: + inst_filter = {} if "key" in kwargs: filter_key = kwargs["key"] kwargs.pop("key") @@ -115,10 +119,21 @@ class LmiBaseClient(object): if "Value" in kwargs: filter_value = kwargs["Value"] kwargs.pop("Value") + if filter_value: + inst_filter[filter_key] = filter_value try: inst_name_list = self._cliconn.EnumerateInstanceNames(class_name, namespace, **kwargs) - if filter_value: - inst_name_list = filter(lambda n: n[filter_key] == filter_value, inst_name_list) + if inst_filter: + inst_name_list_filtered = [] + for inst_name in inst_name_list: + append = True + for (filter_key, filter_value) in inst_filter.iteritems(): + if inst_name[filter_key] != filter_value: + append = False + break + if append: + inst_name_list_filtered.append(inst_name) + inst_name_list = inst_name_list_filtered except KeyError, e: errorstr = "Can not filter by '%s'" % filter_key raise_or_dump_exception(LmiFilterError(errorstr)) @@ -142,9 +157,13 @@ class LmiBaseClient(object): return LmiReturnValue(rval = None, errorstr = e.args[0]) return LmiReturnValue(rval = inst)
- def _get_instances(self, class_name, namespace = None, **kwargs): + # NOTE: usage with Key=something, Value=something is deprecated + # NOTE: inst_filter is either None or dict + def _get_instances(self, class_name, namespace = None, inst_filter = None, **kwargs): filter_value = "" filter_key = "Name" + if inst_filter is None: + inst_filter = {} if "key" in kwargs: filter_key = kwargs["key"] kwargs.pop("key") @@ -157,9 +176,19 @@ class LmiBaseClient(object): if "Value" in kwargs: filter_value = kwargs["Value"] kwargs.pop("Value") - query = "select * from %s" % class_name if filter_value: - query += " where %s = "%s"" % (filter_key, filter_value) + inst_filter[filter_key] = filter_value + query = "select * from %s" % class_name + if inst_filter: + more = False + query += " where" + for (filter_key, filter_value) in inst_filter.iteritems(): + if more: + query += " and" + quotes = isinstance(filter_value, basestring) + query += " %s =" % filter_key + query += " "%s"" % filter_value if quotes else " %s" % filter_value + more = True (inst_list, _, errorstr) = self._exec_query(LmiBaseClient.QUERY_LANG_WQL, query, namespace) if not inst_list: return LmiReturnValue(rval = None, errorstr = errorstr) diff --git a/cli-tools/lmi/lmi_client_shell.py b/cli-tools/lmi/lmi_client_shell.py index 48a93df..8c7321d 100644 --- a/cli-tools/lmi/lmi_client_shell.py +++ b/cli-tools/lmi/lmi_client_shell.py @@ -520,10 +520,12 @@ class _LmiClass(BaseObject): def doc(self): _LmiXmlFormatter(self._cim_class.tocimxml()).fancy_format(self._client.interactive)
+ # NOTE: usage with Key=something, Value=something is deprecated + # NOTE: inst_filter is either None or dict @lmi_return_val_if_fail("_namespace", []) - def instance_names(self, **kwargs): + def instance_names(self, inst_filter = None, **kwargs): (inst_name_list, _, errorstr) = self._client._get_instance_names( - self._cim_classname, namespace = self._namespace.name, **kwargs) + self._cim_classname, self._namespace.name, inst_filter, **kwargs) if not inst_name_list: return [] result = [] @@ -531,33 +533,37 @@ class _LmiClass(BaseObject): result.append(_LmiInstanceName(self._client, i)) return result
- def first_instance_name(self, **kwargs): - inst_name_list = self.instance_names(**kwargs) + # NOTE: usage with Key=something, Value=something is deprecated + # NOTE: inst_filter is either None or dict + def first_instance_name(self, inst_filter = None, **kwargs): + inst_name_list = self.instance_names(inst_filter, **kwargs) if not inst_name_list: return None return inst_name_list[0]
+ # NOTE: usage with Key=something, Value=something is deprecated + # NOTE: inst_filter is either None or dict @lmi_return_val_if_fail("_namespace", []) - def instances(self, **kwargs): + def instances(self, inst_filter = None, **kwargs): (instance_list, _, errorstr) = self._client._get_instances( - self._cim_classname, self._namespace.name, **kwargs) + self._cim_classname, self._namespace.name, inst_filter, **kwargs) if not instance_list: return [] return map(lambda inst: _LmiInstance(self._client, self, inst), instance_list)
- def first_instance(self, **kwargs): + # NOTE: usage with Key=something, Value=something is deprecated + # NOTE: inst_filter is either None or dict + def first_instance(self, inst_filter = None, **kwargs): result = None - keys = [k.lower() for k in kwargs.keys()] - if "value" in keys: + filter_value = "value" in [k.lower() for k in kwargs.keys()] + if inst_filter or filter_value: (instance_list, _, errorstr) = self._client._get_instances( - self._cim_classname, self._namespace.name, **kwargs) + self._cim_classname, self._namespace.name, inst_filter, **kwargs) if instance_list: result = _LmiInstance(self._client, self, instance_list[0]) else: - inst_name = self.first_instance_name(**kwargs) + inst_name = self.first_instance_name(inst_filter, **kwargs) result = inst_name.to_instance() if inst_name else None - if not result and LmiBaseClient._get_use_exceptions(): - raise return result
@lmi_class_fetch_lazy
cura-tools-devel@lists.fedorahosted.org