Source code for LMINamespace

# Copyright (C) 2012-2013 Peter Hatina <phatina@redhat.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.

import sys

import LMIExceptions

from LMIBaseObject import LMIWrapperBaseObject
from LMIBaseClient import LMIBaseClient

from LMIUtil import lmi_wrap_cim_namespace
from LMIUtil import lmi_wrap_cim_class
from LMIUtil import lmi_transform_to_lmi

[docs]class LMINamespace(LMIWrapperBaseObject): """ LMI class representing CIM namespace. :param LMIConnection conn: connection object :param string name: namespace name """ def __init__(self, conn, name): super(LMINamespace, self).__init__(conn) self._name = name def __getattr__(self, name): """ Returns a :py:class:`LMIClass` object, but first it fetches the classes list from the CIMOM. :param string name: class member, class name :returns: class member or :py:class:`LMIClass` object """ if name in self.__dict__: return self.__dict__[name] (class_list, _, _) = self._conn._client._get_class_names(self._name, DeepInheritance=True) if name in class_list: return lmi_wrap_cim_class(self._conn, name, self.name) if '_' in name: raise LMIExceptions.LMIClassNotFound(self.name, name) raise LMIExceptions.LMINamespaceNotFound(self.name, name) def __repr__(self): """ :returns: pretty string for the object """ return "%s(namespace='%s', ...)" % (self.__class__.__name__, self.name)
[docs] def classes(self, filter_key="", exact_match=False): """ Returns a list of class names. :param string filter_key: substring of a class name :param bool exact_match: tells, if to search for exact match or substring :returns: list of class names **Usage:** :ref:`namespaces_available_classes`. """ (class_name_list, _, errorstr) = self._conn._client._get_class_names( self._name, DeepInheritance=True) if not class_name_list: return [] if filter_key: if not exact_match: filter_lambda = lambda n: n.lower().find(filter_key.lower()) >= 0 else: filter_lambda = lambda n: n.lower() == filter_key.lower() class_name_list = filter(filter_lambda, class_name_list) return class_name_list
[docs] def print_classes(self, filter_key="", exact_match=False): """ Prints out a list of classes. :param string filter_key: substring of a class name :param bool exact_match: tells, if to search for exact match, or to search for a matching substring **Usage:** :ref:`namespaces_available_classes`. """ for c in self.classes(filter_key, exact_match): sys.stdout.write("%s\n" % c)
[docs] def cql(self, query): """ Executes a CQL query and returns a list of :py:class:`LMIInstance` objects. :param string query: CQL query to execute :returns: :py:class:`LMIReturnValue` object with ``rval`` set to a list of :py:class:`LMIInstance` objects **Usage:** :ref:`namespaces_queries`. """ (inst_list, _, errorstr) = self._conn._client._exec_query(LMIBaseClient.QUERY_LANG_CQL, query, self._name) if not inst_list: return [] return lmi_transform_to_lmi(self._conn, inst_list)
[docs] def wql(self, query): """ Executes a WQL query and returns a list of :py:class:`LMIInstance` objects. :param string query: WQL query to execute :returns: :py:class:`LMIReturnValue` object with ``rval`` set to a list of :py:class:`LMIInstance` objects **Usage:** :ref:`namespaces_queries`. """ (inst_list, _, errorstr) = self._conn._client._exec_query(LMIBaseClient.QUERY_LANG_WQL, query, self._name) if not inst_list: return [] return lmi_transform_to_lmi(self._conn, inst_list)
@property
[docs] def name(self): """ :returns: namespace name :rtype: string """ return self._name
[docs]class LMINamespaceRoot(LMINamespace): """ Derived class for *root* namespace. Object of this class is accessible from :py:class:`LMIConnection` object as a hierarchy entry. :param LMIConnection conn: connection object """ def __init__(self, conn): super(LMINamespaceRoot, self).__init__(conn, "root") @property
[docs] def cimv2(self): """ :returns: *root/cimv2* namespace :rtype: :py:class:`LMINamespace` """ return lmi_wrap_cim_namespace(self._conn, "root/cimv2")
@property
[docs] def interop(self): """ :returns: *root/interop* namespace :rtype: :py:class:`LMINamespace` """ return lmi_wrap_cim_namespace(self._conn, "root/interop")
@property
[docs] def PG_InterOp(self): """ :returns: *root/PG_InterIp* namespace :rtype: :py:class:`LMINamespace` """ return lmi_wrap_cim_namespace(self._conn, "root/PG_InterOp")
@property
[docs] def PG_Internal(self): """ :returns: *root/PG_Internal* namespace :rtype: :py:class:`LMINamespace` """ return lmi_wrap_cim_namespace(self._conn, "root/PG_Internal")
@property
[docs] def namespaces(self): """ :returns: list of strings with available namespaces **Usage:** :ref:`namespaces_available_namespaces`. """ return ["cimv2", "interop", "PG_InterOp", "PG_Internal"]
[docs] def print_namespaces(self): """ Prints out all available namespaces accessible via the namespace `root`. **Usage:** :ref:`namespaces_available_namespaces`. """ sys.stdout.write("cimv2\n") sys.stdout.write("interop\n") sys.stdout.write("PG_InterOp\n") sys.stdout.write("PG_Internal\n")