Repository :
http://git.fedorahosted.org/cgit/cura-tools.git
On branch : master
---------------------------------------------------------------
commit 4f0c1651a5e58c99553e869a34378cb41dd9c12d
Author: Michal Minar <miminar(a)redhat.com>
Date: Mon Sep 2 15:34:59 2013 +0200
use NocaseDict instead of dict where appropriate
NocaseDict should be used for properties of instances, instance names
and output parameters of method to allow for case-insesitive
comparisons.
This fixes a bug, where job was not found in output parameters of
asynchronous method, when treating it as a synchronoush one.
---------------------------------------------------------------
cli/lmi/shell/LMIInstance.py | 4 ++--
cli/lmi/shell/LMIInstanceName.py | 2 +-
cli/lmi/shell/LMIMethod.py | 8 +++++---
cli/lmi/shell/LMIReturnValue.py | 3 +++
cli/lmi/shell/LMIUtil.py | 22 +++++++---------------
5 files changed, 18 insertions(+), 21 deletions(-)
diff --git a/cli/lmi/shell/LMIInstance.py b/cli/lmi/shell/LMIInstance.py
index 17646de..037b58a 100644
--- a/cli/lmi/shell/LMIInstance.py
+++ b/cli/lmi/shell/LMIInstance.py
@@ -553,8 +553,8 @@ class LMIInstance(LMIWrapperBaseObject):
Raised exceptions:
LMIDeletedObjectError
"""
- return dict(zip(self._cim_instance.properties.keys(),
- map(lambda x: x.value, self._cim_instance.properties.values())))
+ return pywbem.NocaseDict({
+ k: x.value for k, x in self._cim_instance.properties.iteritems()})
@lmi_possibly_deleted(None)
def property_value(self, prop_name):
diff --git a/cli/lmi/shell/LMIInstanceName.py b/cli/lmi/shell/LMIInstanceName.py
index b4dcc42..4285a1d 100644
--- a/cli/lmi/shell/LMIInstanceName.py
+++ b/cli/lmi/shell/LMIInstanceName.py
@@ -88,7 +88,7 @@ class LMIInstanceName(LMIWrapperBaseObject):
"""
Returns a dictionary with key properties and corresponding values.
"""
- return dict(self._cim_instance_name.items())
+ return self._cim_instance_name.keybindings.copy()
def key_property_value(self, prop_name):
"""
diff --git a/cli/lmi/shell/LMIMethod.py b/cli/lmi/shell/LMIMethod.py
index a5bad8d..f93f04f 100644
--- a/cli/lmi/shell/LMIMethod.py
+++ b/cli/lmi/shell/LMIMethod.py
@@ -115,9 +115,11 @@ class LMIMethod(LMIWrapperBaseObject):
# Adjust return value from the job object
if job_refresh:
job_inst.refresh()
- rparams = dict(zip(job_inst.JobOutParameters.properties.keys(),
- [x.value for x in job_inst.JobOutParameters.properties.values()]))
- rval = rparams.pop("__ReturnValue")
+ rparams = pywbem.NocaseDict({
+ k: x.value
+ for k, x in job_inst.JobOutParameters.properties.iteritems()})
+ rval = rparams["__ReturnValue"]
+ del rparams["__ReturnValue"] # NocaseDict has no pop()
errorstr = ""
# Is job in exception state? If so, adjust corresponding error string
diff --git a/cli/lmi/shell/LMIReturnValue.py b/cli/lmi/shell/LMIReturnValue.py
index 9203040..dd7966b 100644
--- a/cli/lmi/shell/LMIReturnValue.py
+++ b/cli/lmi/shell/LMIReturnValue.py
@@ -14,6 +14,7 @@
# along with this program; if not, see <
http://www.gnu.org/licenses/>.
import collections
+import pywbem
_RValue = collections.namedtuple('RValue', ["rval",
"rparams", "errorstr"])
@@ -40,5 +41,7 @@ class LMIReturnValue(_RValue):
errorstr -- optional error string
"""
rparams = rparams if rparams else {}
+ if not isinstance(rparams, pywbem.NocaseDict):
+ rparams = pywbem.NocaseDict(rparams)
errorstr = errorstr if errorstr else ""
return _RValue.__new__(self, rval=rval, rparams=rparams, errorstr=errorstr)
diff --git a/cli/lmi/shell/LMIUtil.py b/cli/lmi/shell/LMIUtil.py
index 9f34d21..f536b80 100644
--- a/cli/lmi/shell/LMIUtil.py
+++ b/cli/lmi/shell/LMIUtil.py
@@ -135,11 +135,9 @@ def _lmi_do_cast(t, value, cast):
cast -- dictionary with type:cast_func
"""
cast_func = cast[t.lower()] if t.lower() in cast else lambda x: x
- if isinstance(value, dict):
- return dict(
- zip(value.keys()),
- map(lambda val: _lmi_do_cast(t, val, cast), value.values())
- )
+ if isinstance(value, (dict, pywbem.NocaseDict)):
+ return pywbem.NocaseDict({
+ k: _lmi_do_cast(t, val, cast) for k, val in value.iteritems()})
elif isinstance(value, list):
return map(lambda val: _lmi_do_cast(t, val, cast), value)
elif isinstance(value, tuple):
@@ -268,16 +266,10 @@ def lmi_transform_to_lmi(conn, value):
return int(value)
elif isinstance(value, pywbem.CIMFloat):
return float(value)
- elif isinstance(value, dict):
- return dict(
- zip(value.keys(),
- map(lambda val: lmi_transform_to_lmi(conn, val), value.values()))
- )
- elif isinstance(value, pywbem.NocaseDict):
- return pywbem.NocaseDict(
- zip(value.keys(),
- map(lambda val: lmi_transform_to_lmi(conn, val), value.values()))
- )
+ elif isinstance(value, (dict, pywbem.NocaseDict)):
+ return pywbem.NocaseDict({
+ k: lmi_transform_to_lmi(conn, val)
+ for k, val in value.iteritems()})
elif isinstance(value, list):
return map(lambda val: lmi_transform_to_lmi(conn, val), value)
elif isinstance(value, tuple):