[session] promote usage of [deny|all]_all_hooks_but session methods rather than hooks_control context manager directly
--- 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<event> script
mhandler.cmd_exec_event_script('pre%s' % event)
# execute cubes pre<event> script if any
--- 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
--- 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
--- 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()