23 from zope.traversing.interfaces import IBeforeTraverseEvent |
23 from zope.traversing.interfaces import IBeforeTraverseEvent |
24 |
24 |
25 # import packages |
25 # import packages |
26 from pyams_utils.registry import utility_config |
26 from pyams_utils.registry import utility_config |
27 from pyams_utils.traversing import get_parent |
27 from pyams_utils.traversing import get_parent |
|
28 from pyams_utils.zodb import volatile_property |
28 from pyramid.events import subscriber |
29 from pyramid.events import subscriber |
29 from pyramid.threadlocal import get_current_request |
30 from pyramid.threadlocal import get_current_request |
30 from pyramid_zope_request import PyramidPublisherRequest |
31 from pyramid_zope_request import PyramidPublisherRequest |
31 from zope.interface import implementer, directlyProvidedBy, directlyProvides |
32 from zope.interface import implementer, directlyProvidedBy, directlyProvides |
32 from zope.schema.fieldproperty import FieldProperty |
33 from zope.schema.fieldproperty import FieldProperty |
49 def inherit_skin(self): |
50 def inherit_skin(self): |
50 return self._inherit_skin if self.can_inherit_skin else False |
51 return self._inherit_skin if self.can_inherit_skin else False |
51 |
52 |
52 @inherit_skin.setter |
53 @inherit_skin.setter |
53 def inherit_skin(self, value): |
54 def inherit_skin(self, value): |
54 self._inherit_skin = value if self.can_inherit_skin else False |
55 if self.can_inherit_skin: |
|
56 self._inherit_skin = value |
|
57 del self.skin_parent |
|
58 |
|
59 @property |
|
60 def no_inherit_skin(self): |
|
61 return not bool(self.inherit_skin) |
|
62 |
|
63 @no_inherit_skin.setter |
|
64 def no_inherit_skin(self, value): |
|
65 self.inherit_skin = not bool(value) |
55 |
66 |
56 @property |
67 @property |
57 def skin(self): |
68 def skin(self): |
58 return self._skin |
69 if not self.inherit_skin: |
|
70 return self._skin |
|
71 else: |
|
72 return self.skin_parent.skin |
59 |
73 |
60 @skin.setter |
74 @skin.setter |
61 def skin(self, value): |
75 def skin(self, value): |
62 self._skin = None if self.inherit_skin else value |
76 if not self.inherit_skin: |
|
77 self._skin = value |
63 |
78 |
64 @property |
79 @volatile_property |
65 def skin_parent(self): |
80 def skin_parent(self): |
66 if (not self._inherit_skin) and self.skin: |
81 if (not self._inherit_skin) and self.skin: |
67 return self |
82 return self |
68 parent = get_parent(self, ISkinnable, allow_context=False) |
83 parent = get_parent(self, ISkinnable, allow_context=False) |
69 if parent is not None: |
84 if parent is not None: |