hooks/syncsources.py
author Julien Jehannet <julien.jehannet@logilab.fr>
Thu, 23 Dec 2010 15:49:29 +0100
branchstable
changeset 6777 1d423b7aa6c9
parent 6427 c8a5ac2d1eaa
child 6724 24bf6f181d0e
permissions -rw-r--r--
[ctxcomponents] RQLCtxComponent: refactor init_rendering/render_body to ease overriding init_rendering now simply execute the query to get result set to be displayed, and store it in .cw_rset attribute. Links to be displayed by default are now computed in render_body. So you may now simply customise what to be displayed by overriding render_body.

from cubicweb import ValidationError
from cubicweb.selectors import is_instance
from cubicweb.server import hook

class SourceHook(hook.Hook):
    __abstract__ = True
    category = 'cw.sources'


class SourceAddedOp(hook.Operation):
    def precommit_event(self):
        self.session.repo.add_source(self.entity)

class SourceAddedHook(SourceHook):
    __regid__ = 'cw.sources.added'
    __select__ = SourceHook.__select__ & is_instance('CWSource')
    events = ('after_add_entity',)
    def __call__(self):
        SourceAddedOp(self._cw, entity=self.entity)


class SourceRemovedOp(hook.Operation):
    def precommit_event(self):
        self.session.repo.remove_source(self.uri)

class SourceRemovedHook(SourceHook):
    __regid__ = 'cw.sources.removed'
    __select__ = SourceHook.__select__ & is_instance('CWSource')
    events = ('before_delete_entity',)
    def __call__(self):
        if self.entity.name == 'system':
            raise ValidationError(self.entity.eid, {None: 'cant remove system source'})
        SourceRemovedOp(self._cw, uri=self.entity.name)