hooks/storages.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 24 Feb 2010 11:20:13 +0100
branchstable
changeset 4686 c55606a5c4b0
parent 4322 f65743cc53e4
child 4716 55b6a3262071
permissions -rw-r--r--
[integrity] temporary fix auto-delete relation (see 4673:6f8b925a29f4 and 4642:921737d2e3a8): we want no read perms, though we want to check delete perms. Should be properly fixed in 3.7 once we've proper security control and [unsafe_]execute behaviour on the repository side

"""hooks to handle attributes mapped to a custom storage
"""
from os import unlink

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', )
    #__select__ = Hook.__select__ & implements('Repository')

    def __call__(self):
        for attr in ETYPE_ATTR_STORAGE.get(self.entity.__regid__, ()):
            fpath = ETYPE_ATTR_STORAGE[self.entity.__regid__][attr].entity_added(self.entity, attr)
            if fpath is not None:
                AddFileOp(filepath=fpath)

class PreUpdateEntityHook(BFSSHook):
    """"""
    __regid__ = 'bfss_update_entity'
    events = ('before_update_entity', )
    #__select__ = Hook.__select__ & implements('Repository')

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

class PreDeleteEntityHook(BFSSHook):
    """"""
    __regid__ = 'bfss_delete_entity'
    events = ('before_delete_entity', )
    #__select__ = Hook.__select__ & implements('Repository')

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