Hi Elmer,

Thanks for your reply !
My issue is not with obtaining the info I want to inject (the logged in 
users's email), I already have that all ready to go :)

My whole database is versioned using the history_meta.py example from 
SQLAlchemy
https://docs.sqlalchemy.org/en/13/_modules/examples/versioned_history/history_meta.html

I was hoping for a simple way to inject the user info into the _history row 
creation steps.

The SQLAlchemy example makes use of this event listener:

def versioned_session(session):

    @event.listens_for(session, "before_flush") 
    def before_flush(session, flush_context, instances): 
        for obj in versioned_objects(session.dirty): 
            create_version(obj, session) 
       for obj in versioned_objects(session.deleted): 
            create_version(obj, session, deleted=True)

So I'm tempted to follow the same strategy and just override this listener 
to supplement it with the user info but I'm wondering how to pass in non 
SQLAlchemy info into its execution context...

So basically, I have the info I want to inject, I'm just not sure how to 
pass it to SQLAlchemy

Thanks,

JP

On Friday, March 12, 2021 at 6:55:19 p.m. UTC-5 elmer....@gmail.com wrote:

> Hi JP,
>
> Depending on how you've implemented your history tracking, that routine is 
> quite far removed from your web framework and getting a neat, clean way of 
> dealing with that might not be within reach.
>
> However, most web frameworks have some concept of a threadlocal request 
> (or function to retrieve it), which you could invoke and if such a request 
> exists, you could use that to load whatever user identity you have 
> available on there (again, the details differ, but this tends to be a 
> shared feature). From there you can store the user either as a foreign key, 
> or a unique identifier like email. Which one you pick would depend on how 
> you want the history to be affected when you delete a user record for 
> example.
>
>
>
> On Fri, Mar 12, 2021 at 11:58 PM JPLaverdure <jp.lav...@gmail.com> wrote:
>
>> Hello everyone,
>>
>> We already have the ability to timestamp the creation of the history row, 
>> but it would also be interesting to be able to track the user responsible 
>> for the content update. 
>> I would like to get suggestions on the best way to achieve this.
>>
>> I realize this is somewhat outside the scope of sqlalchemy as the notion 
>> of a "logged in user" is more closely related to the context of the 
>> app/webapp using SQLAlchemy as its ORM but maybe other people would benefit 
>> from having a way to inject arbitrary data in the history table.
>>
>> Ideally, I would like the insert in the _history table to be atomic, so I 
>> feel like hooking an update statement to an event might not be the way to 
>> go.
>> I'm tempted to modify the signature of before_flush but I'm not sure 
>> where it gets called.
>>
>> Any help is welcome !
>> Thanks
>>
>> JP
>>
>> -- 
>> SQLAlchemy - 
>> The Python SQL Toolkit and Object Relational Mapper
>>  
>> http://www.sqlalchemy.org/
>>  
>> To post example code, please provide an MCVE: Minimal, Complete, and 
>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
>> description.
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to sqlalchemy+...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/sqlalchemy/82a24998-14e1-4ff4-a725-dd25c20a8bf2n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/sqlalchemy/82a24998-14e1-4ff4-a725-dd25c20a8bf2n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
>
> -- 
>
> Elmer
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/58bb6713-18f4-4d69-8d7b-a27772711bd5n%40googlegroups.com.

Reply via email to