diff --git a/CHANGES.rst b/CHANGES.rst index ab15c41..372444c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,10 @@ Changes 1.3 (unreleased) ---------------- -- Nothing changed yet. +* ``.datamanager.register()`` now returns the ``ZopeTransactionEvents`` + instance which was used to register the events. This allows to change its + parameters afterwards. + (`#40 `_) 1.2 (2019-10-17) diff --git a/src/zope/sqlalchemy/README.rst b/src/zope/sqlalchemy/README.rst index 73f7188..0fcbb60 100644 --- a/src/zope/sqlalchemy/README.rst +++ b/src/zope/sqlalchemy/README.rst @@ -102,6 +102,7 @@ same session. At present there are no users in the database. >>> session = Session() >>> register(session) + >>> session.query(User).all() [] @@ -169,6 +170,7 @@ session in the 'changed' state initially. >>> Session.remove() >>> register(Session, 'changed') + >>> session = Session() >>> conn = session.connection() >>> conn.execute(users.update(users.c.name=='ben'), name='bob') @@ -197,6 +199,7 @@ in test suites) you can specify to keep a session when registering the events: >>> Session = scoped_session(sessionmaker(bind=engine, ... twophase=TEST_TWOPHASE)) >>> register(Session, keep_session=True) + >>> session = Session() >>> bob = session.query(User).all()[0] >>> bob.name = 'bobby' diff --git a/src/zope/sqlalchemy/datamanager.py b/src/zope/sqlalchemy/datamanager.py index 75fadca..4c98b91 100644 --- a/src/zope/sqlalchemy/datamanager.py +++ b/src/zope/sqlalchemy/datamanager.py @@ -308,6 +308,9 @@ def register( Event listening will be specific to the scope of the type of argument passed, including specificity to its subclass as well as its identity. + It returns the instance of ZopeTransactionEvents those methods where used + to register the event listeners. + """ from sqlalchemy import event @@ -323,3 +326,4 @@ def register( event.listen(session, "after_bulk_update", ext.after_bulk_update) event.listen(session, "after_bulk_delete", ext.after_bulk_delete) event.listen(session, "before_commit", ext.before_commit) + return ext