# HG changeset patch # User Thierry Florac # Date 1477321173 -7200 # Node ID 9491c1528b8052c38b0f73651922f5b0225c75fe # Parent c412c833a9ad1d4815e265e2826548c610d76c08 Added 'clear_engine' method with subscriber on modification event to force removal of volatile attributes diff -r c412c833a9ad -r 9491c1528b80 src/pyams_alchemy/engine.py --- a/src/pyams_alchemy/engine.py Mon Oct 24 10:13:43 2016 +0200 +++ b/src/pyams_alchemy/engine.py Mon Oct 24 16:59:33 2016 +0200 @@ -29,7 +29,7 @@ # import interfaces from pyams_alchemy.interfaces import REQUEST_SESSION_KEY, IAlchemyEngineUtility from pyams_utils.interfaces.site import IOptionalUtility -from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectRemovedEvent +from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent from zope.schema.interfaces import IVocabularyFactory # import packages @@ -163,6 +163,10 @@ **kw) return engine + def clear_engine(self): + if hasattr(self, '_v_engine'): + delattr(self, '_v_engine') + class PersistentAlchemyEngineUtility(Persistent, AlchemyEngineUtility, Contained): """Persistent implementation of SQLAlchemy engine utility""" @@ -175,6 +179,12 @@ manager.registerUtility(event.object, IAlchemyEngineUtility, name=event.object.name or '') +@subscriber(IObjectModifiedEvent, context_selector=IAlchemyEngineUtility) +def handle_modified_engine(event): + """Clear SQLAlchemy engine volatile attributes when modified""" + IAlchemyEngineUtility(event.object).clear_engine() + + @subscriber(IObjectRemovedEvent, context_selector=IAlchemyEngineUtility) def handle_removed_engine(event): """Un-register an SQLAlchemy engine when deleted""" diff -r c412c833a9ad -r 9491c1528b80 src/pyams_alchemy/interfaces/__init__.py --- a/src/pyams_alchemy/interfaces/__init__.py Mon Oct 24 10:13:43 2016 +0200 +++ b/src/pyams_alchemy/interfaces/__init__.py Mon Oct 24 16:59:33 2016 +0200 @@ -76,3 +76,6 @@ def get_engine(self, use_pool=True): """Get SQLAlchemy engine""" + + def clear_engine(self): + """Remove inner volatile attributes when utility properties are modified"""