# HG changeset patch # User Denis Laxalde # Date 1448982618 -3600 # Node ID ffd615e626f9cebeaa5a9710ca9e93f7f5b339e5 # Parent 4b18b1027d02c1a61bd64cb88d51bb763fed5e2d [hooks] Skip modification_date attribute in "notifentityupdated" hook Depending on the call order of hooks, "modification_date" may come in entity.cw_edited or not (from "metaattrsupdate" hook usually). It should however not be considered in the notification context. Closes #8842064. diff -r 4b18b1027d02 -r ffd615e626f9 hooks/notification.py --- a/hooks/notification.py Tue Dec 01 14:44:55 2015 +0100 +++ b/hooks/notification.py Tue Dec 01 16:10:18 2015 +0100 @@ -167,7 +167,7 @@ __abstract__ = True # do not register by default __select__ = NotificationHook.__select__ & hook.issued_from_user_query() events = ('before_update_entity',) - skip_attrs = set() + skip_attrs = set(['modification_date']) def __call__(self): cnx = self._cw diff -r 4b18b1027d02 -r ffd615e626f9 hooks/test/data/hooks.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hooks/test/data/hooks.py Tue Dec 01 16:10:18 2015 +0100 @@ -0,0 +1,8 @@ +from cubicweb.predicates import is_instance +from cubicweb.hooks import notification + + +class FolderUpdateHook(notification.EntityUpdateHook): + __select__ = (notification.EntityUpdateHook.__select__ & + is_instance('Folder')) + order = 100 # late trigger so that metadata hooks come before. diff -r 4b18b1027d02 -r ffd615e626f9 hooks/test/unittest_notification.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hooks/test/unittest_notification.py Tue Dec 01 16:10:18 2015 +0100 @@ -0,0 +1,39 @@ +# copyright 2015 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr +# +# This file is part of CubicWeb. +# +# CubicWeb is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 2.1 of the License, or (at your option) +# any later version. +# +# CubicWeb is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License along +# with CubicWeb. If not, see . +"""tests for notification hooks""" + +from cubicweb.devtools.testlib import CubicWebTC + + +class NotificationHooksTC(CubicWebTC): + + def test_entity_update(self): + """Check transaction_data['changes'] filled by "notifentityupdated" hook. + """ + with self.admin_access.repo_cnx() as cnx: + root = cnx.create_entity('Folder', name=u'a') + cnx.commit() + root.cw_set(name=u'b') + self.assertIn('changes', cnx.transaction_data) + self.assertEqual(cnx.transaction_data['changes'], + {root.eid: set([('name', u'a', u'b')])}) + + +if __name__ == '__main__': + from logilab.common.testlib import unittest_main + unittest_main()