Repository :
http://git.fedorahosted.org/cgit/cura-tools.git
On branch : master
---------------------------------------------------------------
commit b0d00510953583c727eb26b632275cd74959d137
Author: Peter Hatina <phatina(a)redhat.com>
Date: Mon Nov 26 12:18:20 2012 +0100
wrap method call results into _LmiInstance or _LmiInstanceName
---------------------------------------------------------------
cli-tools/lmi/lmi_client_shell.py | 53 ++++++++++++++++++++++++++++++++++---
1 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/cli-tools/lmi/lmi_client_shell.py b/cli-tools/lmi/lmi_client_shell.py
index bf626cd..8d2d6e3 100644
--- a/cli-tools/lmi/lmi_client_shell.py
+++ b/cli-tools/lmi/lmi_client_shell.py
@@ -309,6 +309,24 @@ class _LmiClass(BaseObject):
def namespace(self):
return self.m_namespace.name
+class _LmiInstanceName(BaseObject):
+ def __init__(self, client, instance_name):
+ self.m_client = client
+ self.m_instance_name = instance_name
+
+ def toInstance(self):
+ (cim_inst, errorstr) = self.m_client.getInstance(self.m_instance_name)
+ if not cim_inst:
+ return None
+ lmi_namespace = _LmiNamespace(self.m_client, self.m_instance_name.namespace)
+ (cim_class, errorstr) = self.m_client.getClass(
+ self.m_instance_name.classname,
+ self.m_instance_name.namespace)
+ lmi_class = _LmiClass(self.m_client, lmi_namespace, cim_class)
+ if not lmi_class:
+ return None
+ return _LmiInstance(self.m_client, lmi_class, cim_inst)
+
class _LmiInstance(BaseObject):
class _LmiInstanceMethod(BaseObject):
def __init__(self, client, instance, method):
@@ -317,6 +335,29 @@ class _LmiInstance(BaseObject):
self.m_instance = instance
self.m_method = method
+ def __transformReturnValues(self, rparams):
+ lmi_rparams = {}
+ for (key, value) in rparams.iteritems():
+ if isinstance(value, pywbem.cim_obj.CIMInstance):
+ (lmi_class, errorstr) = self.m_client.getClass(value.classname,
value.namespace)
+ if not lmi_class:
+ return None
+ lmi_rparams[key] = _LmiInstance(self.m_client, lmi_class, value)
+ elif isinstance(value, pywbem.cim_obj.CIMInstanceName):
+ lmi_rparams[key] = _LmiInstanceName(self.m_client, value)
+ elif type(value) == list:
+ result = []
+ for m in value:
+ if isinstance(m, pywbem.cim_obj.CIMInstance):
+ (lmi_class, errorstr) = self.m_client.getClass(m.classname,
m.namespace)
+ if not lmi_class:
+ return None
+ lmi_rparams[key] = _LmiInstance(self.m_client, lmi_class, m)
+ elif isinstance(m, pywbem.cim_obj.CIMInstanceName):
+ result.append(_LmiInstanceName(self.m_client, m))
+ lmi_rparams[key] = result
+ return lmi_rparams
+
def __call__(self, *args, **kwargs):
for (param, value) in kwargs.iteritems():
if param in self.m_method.parameters:
@@ -334,14 +375,18 @@ class _LmiInstance(BaseObject):
if t in cast:
cast_func = cast[t]
kwargs[param] = cast_func(value)
- rval = self.m_client.callMethodRaw(
+ (rval, rparams, errorstr) = self.m_client.callMethodRaw(
self.m_instance, self.m_method.name, **kwargs)
+ lmi_rparams = self.__transformReturnValues(rparams)
+ if not lmi_rparams:
+ # NOTE: this is wrong! What should we do?
+ return (rval, lmi_rparams, errorstr)
(new_inst, errorstr) = self.m_client.getInstance(self.m_instance.path)
- # NOTE: this is wrong! What should be the corrent way?
+ # NOTE: this is wrong! What should we do?
if not new_inst:
- return rval
+ return (rval, lmi_rparams, errorstr)
self.m_instance.m_inst = new_inst
- return rval
+ return (rval, lmi_rparams, errorstr)
def __init__(self, client, klass, inst):
super(self.__class__, self).__init__()