feat: add TransactionMetaPlugin to save comments when applicable

This commit is contained in:
Lance Edgar 2025-12-18 23:02:08 -06:00
parent 09e4ef6a1e
commit b19f565aa1
3 changed files with 87 additions and 3 deletions

View file

@ -28,7 +28,7 @@ import socket
from sqlalchemy.orm import configure_mappers
from sqlalchemy_continuum import make_versioned
from sqlalchemy_continuum.plugins import Plugin
from sqlalchemy_continuum.plugins import Plugin, TransactionMetaPlugin
from wuttjamaican.conf import WuttaConfigExtension
from wuttjamaican.util import load_object
@ -66,6 +66,20 @@ class WuttaContinuumConfigExtension(WuttaConfigExtension):
For more about SQLAlchemy-Continuum see
:doc:`sqlalchemy-continuum:intro`.
Two plugins are provided to ``make_versioned()``:
The first is ``TransactionMetaPlugin`` for sake of adding
comments (see
:mod:`~sqlalchemy-continuum:sqlalchemy_continuum.plugins.transaction_meta`).
The second by default is :class:`WuttaContinuumPlugin` but you
can override with config:
.. code-block:: ini
[wutta_continuum]
wutta_plugin_spec = poser.db.continuum:PoserContinuumPlugin
"""
# only do this if config enables it
if not config.get_bool(
@ -86,7 +100,7 @@ class WuttaContinuumConfigExtension(WuttaConfigExtension):
raise RuntimeError("something not right, app already has model")
# let sqlalchemy-continuum do its thing
make_versioned(plugins=[plugin()])
make_versioned(plugins=[TransactionMetaPlugin(), plugin()])
# must load model *between* prev and next calls
app.get_model()
@ -148,3 +162,16 @@ class WuttaContinuumPlugin(Plugin):
kwargs["user_id"] = user_id
return kwargs
def before_flush(self, uow, session):
"""
We use this hook to inject the "comment" for current
transaction, if applicable.
This checks the session for the comment; so any session can
specify one like so::
session.info["continuum_comment"] = "hello world"
"""
if comment := session.info.get("continuum_comment"):
uow.current_transaction.meta["comment"] = comment