Source code for lmi.shell.LMINamespace

# Copyright (C) 2012-2014 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 lmi.shell.LMIBaseObject import LMIWrapperBaseObject

from lmi.shell.LMIUtil import lmi_wrap_cim_namespace
from lmi.shell.LMIUtil import lmi_wrap_cim_class
from lmi.shell.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. :param string name: class name :returns: :py:class:`.LMIClass` object """ return lmi_wrap_cim_class(self._conn, name, self.name) def __repr__(self): """ :returns: pretty string for the object """ return "%s(namespace='%s', ...)" % (self.__class__.__name__, self.name)
[docs] def classes(self): """ 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_names, _, errorstr = self._conn.client.get_class_names( self._name, DeepInheritance=True) if not class_names: return [] return class_names
[docs] def get_class(self, classname): """ Returns :py:class:`.LMIClass`. :param string classname: class name of new :py:class:`.LMIClass` :raises: :py:exc:`.LMIClassNotFound` """ class_names, _, _ = self._conn.client.get_class_names( self._name, DeepInheritance=True) if class_names is not None and classname in class_names: return lmi_wrap_cim_class(self._conn, classname, self.name) raise LMIExceptions.LMIClassNotFound(self.name, classname)
[docs] def print_classes(self): """ 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(): 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( self._conn.client.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( self._conn.client.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 """ _SUPPORTED_NAMESPACES = [ "cimv2", "dcim", "interop", "PG_InterOp", "PG_Internal" ] def __init__(self, conn): super(LMINamespaceRoot, self).__init__(conn, "root") def __getattr__(self, name): if name in LMINamespaceRoot._SUPPORTED_NAMESPACES: return lmi_wrap_cim_namespace(self._conn, "root/" + name) raise AttributeError(name) @property
[docs] def namespaces(self): """ :returns: list of strings with available namespaces **Usage:** :ref:`namespaces_available_namespaces`. """ return LMINamespaceRoot._SUPPORTED_NAMESPACES
[docs] def print_namespaces(self): """ Prints out all available namespaces accessible via the namespace `root`. **Usage:** :ref:`namespaces_available_namespaces`. """ for ns in LMINamespaceRoot._SUPPORTED_NAMESPACES: sys.stdout.write("%s\n" % ns)