feat: add TransactionMetaPlugin to save comments when applicable
This commit is contained in:
parent
09e4ef6a1e
commit
b19f565aa1
3 changed files with 87 additions and 3 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue