hooks/storages.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 17 Mar 2010 09:23:04 +0100
changeset 4922 0c9ff7e496ce
parent 4721 8f63691ccb7f
permissions -rw-r--r--
Added tag cubicweb-version-3.7.0 for changeset 270aba1e6fa2

"""hooks to handle attributes mapped to a custom storage
"""
from cubicweb.server.hook import Hook
from cubicweb.server.sources.storages import ETYPE_ATTR_STORAGE


class BFSSHook(Hook):
    """abstract class for bytes file-system storage hooks"""
    __abstract__ = True
    category = 'bfss'


class PreAddEntityHook(BFSSHook):
    """"""
    __regid__ = 'bfss_add_entity'
    events = ('before_add_entity', )

    def __call__(self):
        etype = self.entity.__regid__
        for attr in ETYPE_ATTR_STORAGE.get(etype, ()):
            ETYPE_ATTR_STORAGE[etype][attr].entity_added(self.entity, attr)

class PreUpdateEntityHook(BFSSHook):
    """"""
    __regid__ = 'bfss_update_entity'
    events = ('before_update_entity', )

    def __call__(self):
        etype = self.entity.__regid__
        for attr in ETYPE_ATTR_STORAGE.get(etype, ()):
            ETYPE_ATTR_STORAGE[etype][attr].entity_updated(self.entity, attr)

class PreDeleteEntityHook(BFSSHook):
    """"""
    __regid__ = 'bfss_delete_entity'
    events = ('before_delete_entity', )

    def __call__(self):
        etype = self.entity.__regid__
        for attr in ETYPE_ATTR_STORAGE.get(etype, ()):
            ETYPE_ATTR_STORAGE[etype][attr].entity_deleted(self.entity, attr)