Added tag cubicweb-version-3.6.3 for changeset 9c342fa4f1b7
"""hooks to ensure use_email / primary_email relations consistency:organization: Logilab:copyright: 2001-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses"""__docformat__="restructuredtext en"fromcubicweb.serverimporthookfromlogilab.common.compatimportanyclassSetUseEmailRelationOp(hook.Operation):"""delay this operation to commit to avoid conflict with a late rql query already setting the relation """rtype='use_email'entity=email=None# make pylint happydefcondition(self):"""check entity has use_email set for the email address"""returnnotany(eforeinself.entity.use_emailifself.email.eid==e.eid)defprecommit_event(self):ifself.condition():self.session.unsafe_execute('SET X %s Y WHERE X eid %%(x)s, Y eid %%(y)s'%self.rtype,{'x':self.entity.eid,'y':self.email.eid},'x')classSetPrimaryEmailRelationOp(SetUseEmailRelationOp):rtype='primary_email'defcondition(self):"""check entity has no primary_email set"""returnnotself.entity.primary_emailclassSetPrimaryEmailHook(hook.Hook):"""notify when a bug or story or version has its state modified"""__regid__='setprimaryemail'__select__=hook.Hook.__select__&hook.match_rtype('use_email')category='email'events=('after_add_relation',)def__call__(self):entity=self._cw.entity_from_eid(self.eidfrom)if'primary_email'inentity.e_schema.subject_relations():SetPrimaryEmailRelationOp(self._cw,entity=entity,email=self._cw.entity_from_eid(self.eidto))classSetUseEmailHook(hook.Hook):"""notify when a bug or story or version has its state modified"""__regid__='setprimaryemail'__select__=hook.Hook.__select__&hook.match_rtype('primary_email')category='email'events=('after_add_relation',)def__call__(self):entity=self._cw.entity_from_eid(self.eidfrom)if'use_email'inentity.e_schema.subject_relations():SetUseEmailRelationOp(self._cw,entity=entity,email=self._cw.entity_from_eid(self.eidto))