2 NEPI, a framework to manage network experiments
3 Copyright (C) 2013 INRIA
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
30 # Attribute can be modified by the user
32 # Attribute is not modifiable by the user
34 # Attribute is not modifiable by the user during runtime
36 # Attribute is an access credential
39 class Attribute(object):
40 def __init__(self, name, help, type = Types.String,
41 flags = Flags.NoFlags, default = None, allowed = None,
47 self._allowed = allowed
48 self._default = self._value = default
49 # callback to be invoked upon changing the
51 self.set_hook = set_hook
77 def has_flag(self, flag):
78 return (self._flags & flag) == flag
83 def set_value(self, value):
86 if self.type == Types.Enum:
87 valid = value in self._allowed
89 valid = valid and self.is_valid_value(value)
93 # Hook receives old value, new value
94 value = self.set_hook(self._value, value)
98 raise ValueError("Invalid value %s for attribute %s" %
99 (str(value), self.name))
101 value = property(get_value, set_value)
103 def is_valid_value(self, value):
104 """ Attribute subclasses will override this method to add
105 adequate validation"""