a24e76d0da53262a97545b7aa00f3b98bc1dc6df
[nepi.git] / src / neco / execution / attribute.py
1
2 ### Attribute Types
3 class Types:
4     String  = "STRING"
5     Bool    = "BOOL"
6     Enum    = "ENUM"
7     Double  = "DOUBLE"
8     Integer = "INTEGER"
9
10 ### Attribute Flags
11 class Flags:
12     # Attribute can be modified by the user 
13     NoFlags         = 0x00
14     # Attribute is not modifiable by the user
15     ReadOnly        = 0x01
16     # Attribute is an access credential
17     Credential      = 0x02
18
19 class Attribute(object):
20     def __init__(self, name, help, type = Types.String,
21             flags = Flags.NoFlags, default_value = None):
22         self._name = name
23         self._help = help
24         self._type = type
25         self._flags = flags
26         self._default = self._value = default_value
27
28     @property
29     def name(self):
30         return self._name
31
32     @property
33     def default(self):
34         return self._default_value
35
36     @property
37     def type(self):
38         return self._type
39
40     @property
41     def help(self):
42         return self._help
43
44     @property
45     def flags(self):
46         return self._flags
47
48     def has_flag(self, flag):
49         return (self._flags & flag) == flag
50
51     def get_value(self):
52         return self._value
53
54     def set_value(self, value):
55         if self.is_valid_value(value):
56             self._value = value
57         else:
58             raise ValueError("Invalid value %s for attribute %s" %
59                     (str(value), self.name))
60
61     value = property(get_value, set_value)
62
63     def is_valid_value(self, value):
64         """ Attribute subclasses will override this method to add 
65         adequate validation"""
66         return True
67