Source code for ucsmsdk.ucscore

# Copyright 2015 Cisco Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License prop
#  http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""
This module contains the UcsSdk Core classes.
"""

import logging

from . import ucsgenutils
from . import ucscoreutils

try:
    import xml.etree.cElementTree as ET
    from xml.etree.cElementTree import Element, SubElement
except ImportError:
    import cElementTree as ET
    from cElementTree import Element, SubElement

log = logging.getLogger('ucs')


[docs]class UcsBase(object): """ This class acts as the base class for ManagedObject, ExternalMethod and AbstractFilter and BaseObject classes. """ def __init__(self, class_id): self._class_id = class_id self._child = [] self._handle = None @property def child(self): """Getter Method of UcsBase Class""" return self._child @property def dirty_mask(self): """Getter Method of UcsBase Class""" return self._dirty_mask
[docs] def get_class_id(self): return self._class_id
[docs] def get_handle(self): return self._handle
[docs] def child_add(self, obj): """Method adds the child managed object.""" self._child.append(obj)
[docs] def child_remove(self, obj): """Method removes the child managed object.""" self._child.remove(obj)
[docs] def child_count(self): """Method returns the child managed object count.""" return len(self._child)
[docs] def child_to_xml(self, xml_doc, option=None): """Method writes the xml representation for the object.""" for child in self._child: child.to_xml(xml_doc, option)
[docs] def child_is_dirty(self): """Method checks whether the child object is dirty or not.""" for child in self._child: if child.is_dirty(): return True return False
[docs] def child_mark_clean(self): """Method Method cleans the dirty mask of child managed object.""" for child in self._child: child.mark_clean()
[docs] def mark_clean(self): """Method cleans the dirty mask of the managed object.""" self._dirty_mask = 0
[docs] def is_dirty(self): """Method checks whether the object is dirty or not.""" return self.child_is_dirty()
[docs] def write_object(self): """Method writes the string representation of the object.""" for child in self._child: if child is not None: child.write_object()
[docs] def clone(self): """ Method returns the clone of the Managed Object. """ import copy return copy.deepcopy(self)
def __deepcopy__(self, memo): """ Overridden method to support deepcopy of Managed Object. """ import copy clone = copy.copy(self) clone_child = [] for child in clone._child: clone_child.append(copy.deepcopy(child)) clone._child = clone_child return clone
[docs] def attr_set(self, key, value): """This method sets attribute value of the Method object.""" self.__dict__[key] = value
[docs] def attr_get(self, key): """This method gets attribute value of the Method object.""" return self.__dict__[key]
[docs] def elem_create(self, class_tag, xml_doc=None, override_tag=None): if xml_doc is None: xml_obj = Element(class_tag) else: if override_tag: xml_obj = SubElement(xml_doc, override_tag) else: xml_obj = SubElement(xml_doc, class_tag) return xml_obj
[docs]class AbstractFilter(UcsBase): """class AbstractFilter.""" def __init__(self, class_id, tag_name=None): self._tag_name = tag_name UcsBase.__init__(self, class_id)
[docs] def to_xml(self, xml_doc=None, option=None, elem_name=None): """This method writes the xml representation of the Method object.""" xml_obj = self.elem_create(class_tag=self._tag_name, xml_doc=xml_doc, override_tag=elem_name) for key in self.__dict__: if key.startswith("_"): continue elif key == "class_": xml_obj.set("class", self.attr_get(key)) else: xml_obj.set(key, self.attr_get(key)) self.child_to_xml(xml_obj, option) return xml_obj
[docs]class BaseObject(UcsBase): """class BaseObject.""" def __init__(self, class_id, tag_name=None): self._tag_name = tag_name UcsBase.__init__(self, class_id)
[docs] def to_xml(self, xml_doc=None, option=None, elem_name=None): """This method writes the xml representation of the Method object.""" xml_obj = self.elem_create(class_tag=self._tag_name, xml_doc=xml_doc, override_tag=elem_name) for key in self.__dict__: if key.startswith("_"): continue else: xml_obj.set(key, self.attr_get(key)) self.child_to_xml(xml_obj, option) return xml_obj
[docs] def from_xml(self, elem, handle=None): """This method creates the object from the xml representation of the Method object.""" self._handle = handle if elem.attrib: for attr_name, attr_value in ucsgenutils.iteritems(elem.attrib): self.attr_set(ucsgenutils.convert_to_python_var_name( attr_name), str(attr_value)) child_elems = elem.getchildren() if child_elems: for child_elem in child_elems: if not ET.iselement(child_elem): continue cln = ucsgenutils.word_u(child_elem.tag) child = ucscoreutils.get_ucs_obj(cln, child_elem) self._child.append(child) child.from_xml(child_elem, handle)