On Jun 6, 2012, at 1:48 PM, Damian wrote:

> Hello,
> 
> Thanks for the response - how do I access the public new collection?

it's called session.new




> 
> In terms of the date not being updated - turns out that in my code the
> columns are called last_update_date and not last_updated which
> explains why it wasn't committing anything....
> 
> Also, for the Session.dirty objects I check that they've actually been
> modified before committing using is_modified -
> 
>   for obj in Session.dirty:
>         log.debug('Objects in dirty: %s' % obj.__dict__)
>         if Session.is_modified(obj, passive=True):
>             obj.user_id = user_id
>             obj.last_updated = datetime.now()
> 
> 
> Thank you for helping me spot this,
> 
> Damian
> 
> On Jun 6, 4:06 pm, Michael Bayer <[email protected]> wrote:
>> The code looks fine to me, other than the access of Session._new for which 
>> you should be really calling upon the public "new" collection.
>> 
>> What you might want to make sure of is that the objects you expect to see in 
>> "dirty" are actually there.   Sometimes objects don't make it into "dirty" 
>> until they are found to be impacted by a relationship() changing something 
>> on them.   If this is the case you'd want to navigate to those objects 
>> differently.
>> 
>> On Jun 6, 2012, at 6:36 AM, Damian Dimmich wrote:
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>>> Hi,
>> 
>>> I have a before flush event set up that sets the current user_id and 
>>> datetime on new objects that are going to be commited to the database (all 
>>> tables have these fields).
>> 
>>> Unfortunately, it seems to ignore changes I make to existing objects, ie 
>>> when I set the user_id (which i get from pyramid) and last_updated columns 
>>> in the event handler, the sql only issues updates for the other columns 
>>> that where modified.
>> 
>>> Any ideas as to what am I missing?
>> 
>>> Thanks in advance,
>>> Damian
>> 
>>> def attach_user_committing(Session, flush_context, instances):
>>>    """This function gets called by the before_flush event,
>>>    it grabs the current threads request and extracts the
>>>    authenticated user_id out of it.  You can only
>>>    commit things if you are authenticated.
>> 
>>>    Once it has that id, it goes through and adds the id
>>>    of the user who modified it to new commits- need to be careful that
>>>    _new doesn't change.
>>>    """
>> 
>>>    #this is used when creating databases & testing only
>>>    user_id = 1
>>>    if not creating_database:
>>>        user_id = 
>>> authenticated_userid(pyramid.threadlocal.get_current_request())
>>>    #for each object being committed/flushed, set the flushing/commiting user
>>>    for obj in Session._new.values():
>>>        #log.debug(obj)
>>>        obj.user_id = user_id
>>>        obj.last_updated = datetime.now()
>>>    log.debug('Session dirty is : %s' %Session.dirty)
>>>    for obj in Session.dirty:
>>>        log.debug('Objects in dirty: %s' % obj.__dict__)
>>>        #if obj._sa_instance_state.modified:
>>>        obj.user_id = user_id
>>>        obj.last_updated = datetime.now()
>> 
>>>    #session.user_id = request
>>> #this event ensures that user_id & lastupdate is correctly stored on each 
>>> commit.
>>> event.listen(Session, "before_flush", attach_user_committing)
>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "sqlalchemy" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to 
>>> [email protected].
>>> For more options, visit this group 
>>> athttp://groups.google.com/group/sqlalchemy?hl=en.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to