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
38 # Attribute is a filter used to discover resources
41 class Attribute(object):
42 def __init__(self, name, help, type = Types.String,
43 flags = Flags.NoFlags, default = None, allowed = None,
44 range = None, set_hook = None):
49 self._allowed = allowed
51 self._default = self._value = default
52 # callback to be invoked upon changing the
54 self.set_hook = set_hook
84 def has_flag(self, flag):
85 return (self._flags & flag) == flag
90 def set_value(self, value):
93 if self.type == Types.Enumerate:
94 valid = value in self._allowed
96 if self.type in [Types.Double, Types.Integer] and self.range:
97 (min, max) = self.range
98 valid = (value >= min and value <= max)
100 valid = valid and self.is_valid_value(value)
104 # Hook receives old value, new value
105 value = self.set_hook(self._value, value)
109 raise ValueError("Invalid value %s for attribute %s" %
110 (str(value), self.name))
112 value = property(get_value, set_value)
114 def is_valid_value(self, value):
115 """ Attribute subclasses will override this method to add
116 adequate validation"""