build cache builds correctly now
[tiramisu.git] / tiramisu / basetype.py
1 # -*- coding: utf-8 -*-
2 "base 'interface' types for option types"
3 # Copyright (C) 2012-2013 Team tiramisu (see AUTHORS for all contributors)
4 #
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 2 of the License, or
8 # (at your option) any later version.
9 #
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.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 #
19 # The original `Config` design model is unproudly borrowed from
20 # the rough gus of pypy: pypy: http://codespeak.net/svn/pypy/dist/pypy/config/
21 # the whole pypy projet is under MIT licence
22 # ____________________________________________________________
23
24 class CommonType(object):
25     def has_properties(self):
26         return bool(len(self.properties))
27     def has_property(self, propname):
28         return propname in self.properties
29     def get_properties(self):
30         return self.properties
31     def add_property(self, propname):
32         if not propname in self.properties:
33             self.properties.append(propname)
34     def del_property(self, propname):
35         if self.has_property(propname):
36             self.properties.remove(propname)
37
38 #class HiddenBaseType(BaseType):
39 #    def hide(self):
40 #        self.add_property('hidden')
41 #    def show(self):
42 #        self.del_property('hidden')
43 #    def _is_hidden(self):
44 #        # dangerous method: how an Option() can determine its status by itself ?
45 #        return self.has_property('hidden')
46
47 #class DisabledBaseType(BaseType):
48 #    def disable(self):
49 #        self.add_property('disabled')
50 #    def enable(self):
51 #        self.del_property('disabled')
52 #    def _is_disabled(self):
53 #        return self.has_property('disabled')
54
55 # commonly used properties. Option and OptionDescription will have these methods
56 common_properties = {'hidden': ('hide', 'show', '_is_hidden'),
57               'disabled': ('disable', 'enable', '_is_disabled')
58              }
59
60 basetype_methods = dict()
61
62 def build_properties(prop, add_prop, del_prop, is_prop):
63     def add_property(self):
64         self.add_property(prop)
65     def del_property(self):
66         self.del_property(prop)
67     def is_property(self):
68         return self.has_property(prop)
69     return {add_prop:add_property, del_prop:del_property,
70                 is_prop:is_property}
71
72 for propname, meth_names in common_properties.items():
73     basetype_methods.update(build_properties(propname, meth_names[0], meth_names[1],
74                             meth_names[2]))
75
76 BaseType = type('BaseType', (CommonType,), basetype_methods)
77