hooks/storages.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Tue, 02 Feb 2010 18:22:25 +0100
changeset 4428 03614b377ecd
parent 4322 f65743cc53e4
child 4716 55b6a3262071
permissions -rw-r--r--
Add a ``schema`` command to cmd ctrl to generate schema image. This changeset add the new commande and do some refactoring in cwconfig and schema.py to allow the use of CubicWebNoAppConfiguration with CubicWebSchemaLoader.

"""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)