示例#1
0
    def _perform_setattr(self, clazz, leaf_names, name, value):
        with _handle_type_error():
            if name != 'yfilter' and name != 'parent' and name != 'ignore_validation' \
                                 and hasattr(self, '_is_frozen') and self._is_frozen \
                                 and name not in self.__dict__:
                raise _YModelError(
                    "Attempt to assign unknown attribute '{0}' to '{1}'.".
                    format(name, self.__class__.__name__))
            if name in self.__dict__ and isinstance(self.__dict__[name],
                                                    YList):
                raise _YModelError(
                    "Attempt to assign value of '{}' to YList ldata. "
                    "Please use list append or extend method.".format(value))
            if name in leaf_names and name in self.__dict__:
                if self._python_type_validation_enabled:
                    _validate_value(self._leafs[name], name, value,
                                    self.logger)
                leaf = _get_leaf_object(self._leafs[name])
                prev_value = self.__dict__[name]
                self.__dict__[name] = value

                if not isinstance(value, _YFilter):
                    if isinstance(leaf, _YLeaf):
                        leaf.set(value)
                    elif isinstance(leaf, _YLeafList):
                        for item in value:
                            leaf.append(item)
                else:
                    self.logger.debug('Setting "%s" to "%s"' % (value, name))
                    leaf.yfilter = value
                    if prev_value is not None:
                        self.logger.debug(
                            'Storing previous value "%s" to "%s"' %
                            (prev_value, name))
                        if isinstance(leaf, _YLeaf):
                            leaf.set(prev_value)
                        elif isinstance(leaf, _YLeafList):
                            for item in prev_value:
                                leaf.append(item)

            else:
                if isinstance(value, Entity):
                    if hasattr(value, "parent") and name != "parent":
                        if not value.is_top_level_class:
                            value.parent = self
                if sys.version_info > (3, ):
                    super().__setattr__(name, value)
                else:
                    super(Entity, self).__setattr__(name, value)
示例#2
0
文件: py_types.py 项目: nk9b/ydk-py
    def _perform_setattr(self, clazz, leaf_names, name, value):
        with _handle_type_error():
            if name in self.__dict__ and isinstance(self.__dict__[name],
                                                    YList):
                raise _YModelError(
                    "Attempt to assign value of '{}' to YList ldata. "
                    "Please use list append or extend method.".format(value))
            if isinstance(value, _Enum.YLeaf):
                value = value.name
            if name in leaf_names and name in self.__dict__:
                # bits ..?
                self.__dict__[name] = value

                leaf = self._leafs[name]
                if not isinstance(value, _YFilter):
                    if isinstance(leaf, _YLeaf):
                        leaf.set(value)
                    elif isinstance(leaf, _YLeafList):
                        for item in value:
                            leaf.append(item)

            else:
                if hasattr(value, "parent") and name != "parent":
                    if hasattr(value, "is_presence_container"
                               ) and value.is_presence_container:
                        value.parent = self
                    elif value.parent is None and value.yang_name in self._children_yang_names:
                        value.parent = self
                super(Entity, self).__setattr__(name, value)
示例#3
0
 def set(self, other):
     if not isinstance(other, YLeafList):
         raise _YModelError("Invalid value '{}' in '{}'".format(
             other, self.leaf_name))
     else:
         super(YLeafList, self).clear()
         for item in other:
             self.append(item)
示例#4
0
 def set(self, other):
     if not isinstance(other, YLeafList):
         raise _YModelError("Invalid value '{}' in '{}'"
                         .format(other, self.leaf_name))
     else:
         super(YLeafList, self).clear()
         for item in other:
             self.append(item)
示例#5
0
def handle_type_error():
    """Rethrow TypeError as YModelError"""
    _exc = None
    try:
        yield
    except TypeError as err:
        _exc = _YModelError(str(err))
    finally:
        if _exc:
            _raise(_exc)
示例#6
0
    def _perform_setattr(self, clazz, leaf_names, name, value):
        with _handle_type_error():
            if name != 'yfilter' and name != 'parent' and name != 'ignore_validation' \
                                 and hasattr(self, '_is_frozen') and self._is_frozen \
                                 and name not in self.__dict__:
                raise _YModelError("Attempt to assign unknown attribute '{0}' to '{1}'.".format(name,
                                                                                            self.__class__.__name__))
            if name in self.__dict__ and isinstance(self.__dict__[name], YList):
                raise _YModelError("Attempt to assign value of '{}' to YList ldata. "
                                    "Please use list append or extend method."
                                    .format(value))
            if name in leaf_names and name in self.__dict__:
                if self._python_type_validation_enabled:
                    _validate_value(self._leafs[name], name, value, self.logger)
                leaf = _get_leaf_object(self._leafs[name])
                prev_value = self.__dict__[name]
                self.__dict__[name] = value

                if not isinstance(value, _YFilter):
                    if isinstance(leaf, _YLeaf):
                        leaf.set(value)
                    elif isinstance(leaf, _YLeafList):
                        for item in value:
                            leaf.append(item)
                else:
                    self.logger.debug('Setting "%s" to "%s"' % (value, name))
                    leaf.yfilter = value
                    if prev_value is not None:
                        self.logger.debug('Storing previous value "%s" to "%s"' % (prev_value, name))
                        if isinstance(leaf, _YLeaf):
                            leaf.set(prev_value)
                        elif isinstance(leaf, _YLeafList):
                            for item in prev_value:
                                leaf.append(item)

            else:
                if isinstance(value, Entity):
                    if hasattr(value, "parent") and name != "parent":
                        if not value.is_top_level_class:
                            value.parent = self
                super(Entity, self).__setattr__(name, value)
示例#7
0
def _validate_value(leaf_tuple, name, value, logger):
    if not isinstance(leaf_tuple, tuple):
        return
    if isinstance(value, _YFilter):
        return
    typs = leaf_tuple[1]
    for typ in typs:
        if _is_identity(typ):
            if _validate_identity_value_object(typ, value):
                return
        elif _is_enum(typ):
            if _validate_enum_value_object(typ, value):
                return
        else:
            if _validate_other_type_value_object(typ, value):
                return
    err_msg = "Invalid value {0} for '{1}'. Got type: '{2}'. Expected types: {3}".format(
        value, name,
        type(value).__name__, _get_types_string(typs))
    logger.error(err_msg)
    raise _YModelError(err_msg)
示例#8
0
def _validate_value(leaf_tuple, name, value, logger):
    if not isinstance(leaf_tuple, tuple):
        return
    if isinstance(value, _YFilter):
        return
    typs = leaf_tuple[1]
    for typ in typs:
        if _is_identity(typ):
            if _validate_identity_value_object(typ, value):
                return
        elif _is_enum(typ):
            if _validate_enum_value_object(typ, value):
                return
        else:
            if _validate_other_type_value_object(typ, value):
                return
    err_msg = "Invalid value {0} for '{1}'. Got type: '{2}'. Expected types: {3}".format(value, name,
                                                                                         type(value).__name__,
                                                                                         _get_types_string(typs))
    logger.error(err_msg)
    raise _YModelError(err_msg)
示例#9
0
    def _perform_setattr(self, clazz, leaf_names, name, value):
        with _handle_type_error():
            if name in self.__dict__ and isinstance(self.__dict__[name],
                                                    YList):
                raise _YModelError(
                    "Attempt to assign value of '{}' to YList ldata. "
                    "Please use list append or extend method.".format(value))
            if isinstance(value, _Enum.YLeaf):
                value = value.name
            if name in leaf_names and name in self.__dict__:
                # bits ..?
                prev_value = self.__dict__[name]
                self.__dict__[name] = value

                leaf = self._leafs[name]
                if not isinstance(value, _YFilter):
                    if isinstance(leaf, _YLeaf):
                        leaf.set(value)
                    elif isinstance(leaf, _YLeafList):
                        for item in value:
                            leaf.append(item)
                else:
                    self.logger.debug('Setting "%s" to "%s"' % (value, name))
                    leaf.yfilter = value
                    if prev_value is not None:
                        self.logger.debug(
                            'Storing previous value "%s" to "%s"' %
                            (prev_value, name))
                        if isinstance(leaf, _YLeaf):
                            leaf.set(prev_value)
                        elif isinstance(leaf, _YLeafList):
                            for item in prev_value:
                                leaf.append(item)

            else:
                if isinstance(value, Entity):
                    if hasattr(value, "parent") and name != "parent":
                        if not value.is_top_level_class:
                            value.parent = self
                super(Entity, self).__setattr__(name, value)