src/pyams_skin/skin.py
changeset 319 7ad85ca36f04
parent 288 735cb26095e8
child 331 a473eb11ed15
equal deleted inserted replaced
318:2ab5b80afa3f 319:7ad85ca36f04
    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: