+ self._allowed = allowed
+
+ @property
+ def type(self):
+ return self._type
+
+ @property
+ def help(self):
+ return self._help
+
+ @property
+ def readornly(self):
+ return self._readonly
+
+ @property
+ def modified(self):
+ return self._modified
+
+ @property
+ def range(self):
+ return self._range
+
+ @property
+ def allowed(self):
+ return self._allowed
+
+ def get_value(self):
+ return self._value
+
+ def set_value(self, value):
+ if self._is_in_range(value) and \
+ self._is_in_allowed_values(value) and \
+ self._is_valid(value):
+ self._value = value
+ self._modified = True
+ else:
+ raise RuntimeError("Invalid value %s for attribute %s" %
+ (str(value), self.name))
+
+ value = property(get_value, set_value)
+
+ def _is_in_range(self, value):
+ return not self.range or \
+ (value >= self.range[0] and value <= self.range[1])
+
+ def _is_in_allowed_values(self, value):
+ return not self.allowed or value in self._allowed
+
+ def _is_valid(self, value):
+ return not self._validation_function or self._validation_function(value)