Repository : http://git.fedorahosted.org/cgit/cura-tools.git
On branch : master
commit 2ecab36a8014fb0cc5a90845c3c947f531b2452e Author: Peter Hatina phatina@redhat.com Date: Tue Mar 12 14:47:44 2013 +0100
introduce lazy fetching of CIMClass
cli-tools/lmi/lmi_client_shell.py | 58 ++++++++++++++++++------------------- 1 files changed, 28 insertions(+), 30 deletions(-)
diff --git a/cli-tools/lmi/lmi_client_shell.py b/cli-tools/lmi/lmi_client_shell.py index 232dfe5..2f5bda2 100644 --- a/cli-tools/lmi/lmi_client_shell.py +++ b/cli-tools/lmi/lmi_client_shell.py @@ -398,10 +398,8 @@ class _LmiNamespace(BaseObject): self._name = name
def __getattr__(self, name): - (klass, _, errorstr) = self._client._get_class(name, self._name, LocalOnly = False) - if not klass: - return None - return _LmiClass(self._client, self, klass) + # TODO: check class existance, otherwise return None + return _LmiClass(self._client, self, name)
def __repr__(self): return "%s(namespace='%s', ...)" % (self.__class__.__name__, self._name) @@ -544,12 +542,22 @@ class _LmiNamespaceRoot(_LmiNamespace): sys.stdout.write("PG_InterOp\n") sys.stdout.write("PG_Internal\n")
+def lmi_class_fetch_lazy(fn): + def wrapped(self, *args, **kwargs): + if not self._cim_class: + # FIXME: this is wrong, throw an exception? + (self._cim_class, _, _) = self._client._get_class( + self._cim_classname, self._namespace.name, LocalOnly = False) + return fn(self, *args, **kwargs) + return wrapped + class _LmiClass(BaseObject): - def __init__(self, client, namespace, klass): + def __init__(self, client, namespace, classname): super(self.__class__, self).__init__() - self._client = client - self._namespace = namespace - self._cim_class = klass + self.__dict__["_client"] = client + self.__dict__["_namespace"] = namespace + self.__dict__["_cim_class"] = None + self.__dict__["_cim_classname"] = classname
def __repr__(self): return "%s(classname='%s', ...)" % (self.__class__.__name__, self.classname) @@ -569,12 +577,13 @@ class _LmiClass(BaseObject): return None return _LmiInstance(self._client, self, cim_instance)
+ @lmi_class_fetch_lazy def doc(self): _LmiXmlFormatter(self._cim_class.tocimxml()).fancy_format(self._client.interactive)
def instance_names(self, **kwargs): (inst_name_list, _, errorstr) = self._client._get_instance_names( - self._cim_class.classname, namespace = self._namespace.name, **kwargs) + self._cim_classname, namespace = self._namespace.name, **kwargs) if not inst_name_list: return [] result = [] @@ -590,7 +599,7 @@ class _LmiClass(BaseObject):
def instances(self, **kwargs): (instance_list, _, errorstr) = self._client._get_instances( - self._cim_class.classname, self._namespace.name, **kwargs) + self._cim_classname, self._namespace.name, **kwargs) if not instance_list: return [] return map(lambda inst: _LmiInstance(self._client, self, inst), instance_list) @@ -603,23 +612,27 @@ class _LmiClass(BaseObject): return None return inst_name.to_instance()
+ @lmi_class_fetch_lazy def properties(self): return self._cim_class.properties.keys()
+ @lmi_class_fetch_lazy def print_properties(self): for prop in self._cim_class.properties.keys(): sys.stdout.write("%s\n" % prop)
+ @lmi_class_fetch_lazy def methods(self): return self._cim_class.methods.keys()
+ @lmi_class_fetch_lazy def print_methods(self): for method in self._cim_class.methods.keys(): sys.stdout.write("%s\n" % method)
@property def classname(self): - return self._cim_class.classname + return self._cim_classname
@property def namespace(self): @@ -639,15 +652,8 @@ class _LmiInstanceName(BaseObject): if not cim_instance: return None lmi_namespace = _LmiNamespace(self._client, self._cim_instance_name.namespace) - (cim_class, _, errorstr) = self._client._get_class( - self._cim_instance_name.classname, - self._cim_instance_name.namespace, - LocalOnly = False) - if not cim_class: - return None - lmi_class = _LmiClass(self._client, lmi_namespace, cim_class) - if not lmi_class: - return None + cim_classname = self._cim_instance_name.classname + lmi_class = _LmiClass(self._client, lmi_namespace, cim_classname) return _LmiInstance(self._client, lmi_class, cim_instance)
@property @@ -867,12 +873,8 @@ class _LmiInstance(BaseObject): assoc_args["Props"] = Props associators_list = self._client._get_associators(self._cim_instance, **assoc_args) for i in associators_list: - (cim_class, _, errorstr) = self._client._get_class(i.classname, i.path.namespace, - LocalOnly = False) - if not cim_class: - return [] lmi_namespace = _LmiNamespace(self._client, i.path.namespace) - lmi_class = _LmiClass(self._client, lmi_namespace, cim_class) + lmi_class = _LmiClass(self._client, lmi_namespace, i.classname) lmi_assoc_inst = _LmiInstance(self._client, lmi_class, i) result.append(lmi_assoc_inst) return result @@ -919,12 +921,8 @@ class _LmiInstance(BaseObject): references_args["Props"] = Props references_list = self._client._get_references(self._cim_instance, **references_args) for i in references_list: - (cim_class, _, errorstr) = self._client._get_class(i.classname, i.path.namespace, - LocalOnly = False) - if not cim_class: - return [] lmi_namespace = _LmiNamespace(self._client, i.path.namespace) - lmi_class = _LmiClass(self._client, lmi_namespace, cim_class) + lmi_class = _LmiClass(self._client, lmi_namespace, i.classname) lmi_references_inst = _LmiInstance(self._client, lmi_class, i) result.append(lmi_references_inst) return result
cura-tools-devel@lists.fedorahosted.org