12 # Attribute can be modified by the user
14 # Attribute is not modifiable by the user
16 # Attribute is not modifiable by the user during runtime
18 # Attribute is an access credential
21 class Attribute(object):
22 def __init__(self, name, help, type = Types.String,
23 flags = Flags.NoFlags, default = None, allowed = None,
29 self._allowed = allowed
30 self._default = self._value = default
31 # callback to be invoked upon changing the
33 self.set_hook = set_hook
59 def has_flag(self, flag):
60 return (self._flags & flag) == flag
65 def set_value(self, value):
68 if self.type == Types.Enum:
69 valid = value in self._allowed
71 valid = valid and self.is_valid_value(value)
75 # Hook receives old value, new value
76 value = self.set_hook(self._value, value)
80 raise ValueError("Invalid value %s for attribute %s" %
81 (str(value), self.name))
83 value = property(get_value, set_value)
85 def is_valid_value(self, value):
86 """ Attribute subclasses will override this method to add
87 adequate validation"""