2 # -*- coding: utf-8 -*-
3 # vim:ts=4:sw=4:et:ai:sts=4
5 class AttributesMap(object):
6 """AttributesMap is the base class for every object whose attributes
7 are going to be manipulated by the end-user in a script or GUI.
10 self._attributes = dict()
13 def attributes_name(self):
14 return set(self._attributes.keys())
16 def is_valid_attribute_value(self, name, value):
17 raise NotImplementedError
19 def set_attribute_value(self, name, value):
20 if self.is_valid_attribute_value(name, value):
21 self._attributes[name].value = value
25 def set_attribute_readonly(self, name, value):
26 self._attributes[name].readonly = value
28 def get_attribute_value(self, name):
29 return self._attributes[name].value
31 def get_attribute_help(self, name):
32 return self._attributes[name].help
34 def get_attribute_type(self, name):
35 return self._attributes[name].type
37 def get_attribute_range(self, name):
38 return self._attributes[name].range
40 def get_attribute_allowed(self, name):
41 return self._attributes[name].allowed
43 def get_attribute_readonly(self, name):
44 return self._attributes[name].readonly
46 def add_attribute(self, name, help, type, value = None, range = None,
47 allowed = None, readonly = False):
48 if name in self._attributes:
49 raise AttributeError('Attribute %s already exists' % name))
50 attribute = Attribute(name, help, type, value, range, allowed, readonly)
51 self._attributes[name] = attribute
53 def del_attribute(self, name):
54 del self._attributes[name]
56 def has_attribute(self, name):
57 return name in self._attributes
60 self._attributes = dict()
62 class Attribute(object):
63 STRING , BOOL, ENUM, DOUBLE, INTEGER, ENDPOINT, TIME = (
64 "STRING", "BOOL", "ENUM", "DOUBLE", "INTEGER", "ENDPOINT", "TIME")
66 types = [STRING, BOOL, ENUM, DOUBLE, INTEGER, ENDPOINT, TIME]
68 def __init__(self, name, help, type, value = None, range = None,
69 allowed = None, readonly = False):
70 if not type in Attribute.types:
71 raise AttributeError("invalid type %s " % type)
76 self.readonly = (readonly == True)
78 # range: max and min possible values
80 # list of possible values
81 self.allowed = allowed