--- a/src/pyams_skin/skin.py Mon Oct 10 11:32:08 2016 +0200
+++ b/src/pyams_skin/skin.py Mon Oct 10 15:27:10 2016 +0200
@@ -45,8 +45,7 @@
"""Skinnable content base class"""
_inherit_skin = FieldProperty(ISkinnable['inherit_skin'])
-
- skin = FieldProperty(IUserSkinnable['skin'])
+ _skin = FieldProperty(IUserSkinnable['skin'])
@property
def can_inherit_skin(self):
@@ -58,15 +57,21 @@
@inherit_skin.setter
def inherit_skin(self, value):
- if value and not self.can_inherit_skin:
- value = False
- self._inherit_skin = value
+ self._inherit_skin = value if self.can_inherit_skin else False
+
+ @property
+ def skin(self):
+ return self._skin
+
+ @skin.setter
+ def skin(self, value):
+ self._skin = None if self.inherit_skin else value
@property
def skin_parent(self):
if (not self._inherit_skin) and self.skin:
return self
- parent = get_parent(self, ISkinnable)
+ parent = get_parent(self, ISkinnable, allow_context=False)
if parent is not None:
return parent.skin_parent
@@ -113,17 +118,16 @@
def handle_content_skin(event):
"""Apply skin when traversing skinnable object"""
request = event.request
- try:
- skin = event.object.get_skin(request)
- except NotImplementedError:
- pass
- else:
- if skin is not None:
- apply_skin(request, skin)
+ skin = event.object.get_skin(request)
+ if skin is not None:
+ apply_skin(request, skin)
@subscriber(IBeforeTraverseEvent, context_selector=ISiteRoot)
def handle_root_skin(event):
"""Apply skin when traversing site root"""
- if not ISkinnable.providedBy(event.object):
+ context = event.object
+ if not ISkinnable.providedBy(context):
apply_skin(event.request, PyAMSSkin)
+ elif context.skin is None:
+ apply_skin(event.request, PyAMSSkin)