# HG changeset patch # User Sylvain Thénault # Date 1348145406 -7200 # Node ID 77ea3eed99469840583b72a90dd38a433391e3ed # Parent fef0b8214fcfc5bf151f7beb7b3d1a2d076461ba [session] promote usage of [deny|all]_all_hooks_but session methods rather than hooks_control context manager directly diff -r fef0b8214fcf -r 77ea3eed9946 server/__init__.py --- a/server/__init__.py Mon Sep 10 16:25:48 2012 +0200 +++ b/server/__init__.py Thu Sep 20 14:50:06 2012 +0200 @@ -247,15 +247,13 @@ def initialize_schema(config, schema, mhandler, event='create'): from cubicweb.server.schemaserial import serialize_schema - from cubicweb.server.session import hooks_control session = mhandler.session cubes = config.cubes() # deactivate every hooks but those responsible to set metadata # so, NO INTEGRITY CHECKS are done, to have quicker db creation. # Active integrity is kept else we may pb such as two default # workflows for one entity type. - with hooks_control(session, session.HOOKS_DENY_ALL, 'metadata', - 'activeintegrity'): + with session.deny_all_hooks_but('metadata', 'activeintegrity'): # execute cubicweb's pre script mhandler.cmd_exec_event_script('pre%s' % event) # execute cubes pre script if any diff -r fef0b8214fcf -r 77ea3eed9946 server/hook.py --- a/server/hook.py Mon Sep 10 16:25:48 2012 +0200 +++ b/server/hook.py Thu Sep 20 14:50:06 2012 +0200 @@ -197,14 +197,12 @@ ~~~~~~~~~~~~~ It is sometimes convenient to explicitly enable or disable some hooks. For -instance if you want to disable some integrity checking hook. This can be +instance if you want to disable some integrity checking hook. This can be controlled more finely through the `category` class attribute, which is a string giving a category name. One can then uses the -:class:`~cubicweb.server.session.hooks_control` context manager to explicitly -enable or disable some categories. - -.. autoclass:: cubicweb.server.session.hooks_control - +:meth:`~cubicweb.server.session.Session.deny_all_hooks_but` and +:meth:`~cubicweb.server.session.Session.allow_all_hooks_but` context managers to +explicitly enable or disable some categories. The existing categories are: @@ -230,10 +228,8 @@ * ``bookmark``, bookmark entities handling hooks -Nothing precludes one to invent new categories and use the -:class:`~cubicweb.server.session.hooks_control` context manager to -filter them in or out. Note that ending the transaction with commit() -or rollback() will restore the hooks. +Nothing precludes one to invent new categories and use existing mechanisms to +filter them in or out. Hooks specific predicates diff -r fef0b8214fcf -r 77ea3eed9946 server/session.py --- a/server/session.py Mon Sep 10 16:25:48 2012 +0200 +++ b/server/session.py Thu Sep 20 14:50:06 2012 +0200 @@ -108,6 +108,11 @@ with hooks_control(self.session, self.session.HOOKS_DENY_ALL, 'integrity'): # ... do stuff with none but 'integrity' hooks activated + + This is an internal api, you should rather use + :meth:`~cubicweb.server.session.Session.deny_all_hooks_but` or + :meth:`~cubicweb.server.session.Session.allow_all_hooks_but` session + methods. """ def __init__(self, session, mode, *categories): self.session = session @@ -217,6 +222,9 @@ :attr:`running_dbapi_query`, boolean flag telling if the executing query is coming from a dbapi connection or is a query from within the repository + + .. automethod:: cubicweb.server.session.deny_all_hooks_but + .. automethod:: cubicweb.server.session.all_all_hooks_but """ is_request = False is_internal_session = False diff -r fef0b8214fcf -r 77ea3eed9946 server/test/unittest_session.py --- a/server/test/unittest_session.py Mon Sep 10 16:25:48 2012 +0200 +++ b/server/test/unittest_session.py Thu Sep 20 14:50:06 2012 +0200 @@ -18,7 +18,6 @@ from __future__ import with_statement from cubicweb.devtools.testlib import CubicWebTC -from cubicweb.server.session import hooks_control class InternalSessionTC(CubicWebTC): @@ -36,7 +35,7 @@ self.assertEqual(session.disabled_hook_categories, set()) self.assertEqual(session.enabled_hook_categories, set()) self.assertEqual(len(session._tx_data), 1) - with hooks_control(session, session.HOOKS_DENY_ALL, 'metadata'): + with session.deny_all_hooks_but('metadata'): self.assertEqual(session.hooks_mode, session.HOOKS_DENY_ALL) self.assertEqual(session.disabled_hook_categories, set()) self.assertEqual(session.enabled_hook_categories, set(('metadata',))) @@ -48,7 +47,7 @@ self.assertEqual(session.hooks_mode, session.HOOKS_DENY_ALL) self.assertEqual(session.disabled_hook_categories, set()) self.assertEqual(session.enabled_hook_categories, set(('metadata',))) - with hooks_control(session, session.HOOKS_ALLOW_ALL, 'integrity'): + with session.allow_all_hooks_but('integrity'): self.assertEqual(session.hooks_mode, session.HOOKS_ALLOW_ALL) self.assertEqual(session.disabled_hook_categories, set(('integrity',))) self.assertEqual(session.enabled_hook_categories, set(('metadata',))) # not changed in such case @@ -65,4 +64,5 @@ if __name__ == '__main__': + from logilab.common.testlib import unittest_main unittest_main()