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)
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)
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)
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)
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)
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)
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)
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)
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)