hooks/syncsources.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Tue, 04 Jan 2011 14:11:41 +0100
branchstable
changeset 6761 84b67ae41a0d
parent 6427 c8a5ac2d1eaa
child 6724 24bf6f181d0e
permissions -rw-r--r--
[html generation] even when doctype without extension are asked, we should define the xmlns:cubicweb attribute to avoid html validation error during tests (break tests with new calendar view in default branch since it demote to html)

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)