Thanks for the quick reply.  I've tried to include more specific info from my 
program for you to look over as well as the log.

    def approve_request(self, request_ids, session=None):
        if session is None:
            session = scopedSession()
            
        try:
            for request_id in request_ids:
                request = self.get_request(request_id)
                if request is None:
                    raise RequestStoreError("ID does not exist")
                #set request to True
                request.status = True
                session.add(request)
                store_logger.debug("approve_reqeuest before: session=%s, 
session dirty=%s" % (id(session), session.dirty))
                #add to the corresponding url as exception to standard rules
                filter_store.find_or_create_exception_url(request.owned_by_id, 
request.request_url, session=session)
                store_logger.debug("approve_request after: session=%s, session 
dirty=%s" % (id(session), session.dirty))
                session.commit()
        except Exception as e:
            print e
            return False
        finally:
            session.close()
        return True  

    def find_or_create_exception_url(self, fg, url, displayName=None, 
session=None):
        if session is None:
            session = scopedSession()
            
        result = self.get_exception_url(fg, url)
        store_logger.debug("result=%s" % result)
        if result is None:
            store_logger.debug("result not Found")
            banned = self.get_banned_url(fg, url)
            if banned is not None:
                session.delete(banned)
                session.flush()
            result = ExceptionUrl(url, fg, displayName)
            session.add(result)
            store_logger.debug("adding ExceptionUrl=%s", result)
        
        store_logger.debug("find_or_create_exception_url: session=%s, 
session_dirty=%s" % (id(session), session.dirty))
        return result

Notice that I have some debug statements in each function.  When the 
approve_request function is called with an array of ids, the logging results 
are below.  The session is always the same which is what is expected but a 
couple of unexpected things happen

1)  When in the find_or_create_exception_url function the IdentifySet of the 
session.dirty is empty even though those records ACTUALLY DO get created in the 
database.
2)  Upon returning to approve_request the IdentifySet is empty which means the 
status of the request is never set to True.

2011-02-09 13:36:42,817 - surf.store - DEBUG - approve_reqeuest before: 
session=4335326160, session dirty=IdentitySet([<OpenRequest('test19.com', 
'http://test19.com', '330eee30-381c-48f7-837e-34be7d2cb1c0', 'True', 'None', 
'None', 'None')>])
2011-02-09 13:36:42,985 - surf.store - DEBUG - result=None
2011-02-09 13:36:42,985 - surf.store - DEBUG - result not Found
2011-02-09 13:36:43,116 - surf.store - DEBUG - adding 
ExceptionUrl=<PageUrl('http://test19.com','67868150974853021936294845903799103936','None')>
2011-02-09 13:36:43,117 - surf.store - DEBUG - find_or_create_exception_url: 
session=4335326160, session_dirty=IdentitySet([])
2011-02-09 13:36:43,117 - surf.store - DEBUG - approve_request after: 
session=4335326160, session dirty=IdentitySet([])
monitor running
2011-02-09 13:36:43,365 - surf.store - DEBUG - approve_reqeuest before: 
session=4335326160, session dirty=IdentitySet([<OpenRequest('test18.com', 
'http://test18.com', '330eee30-381c-48f7-837e-34be7d2cb1c0', 'True', 'None', 
'None', 'None')>])
['186', '185'] approved
2011-02-09 13:36:43,540 - surf.store - DEBUG - result=None
2011-02-09 13:36:43,540 - surf.store - DEBUG - result not Found
2011-02-09 13:36:43,665 - surf.store - DEBUG - adding 
ExceptionUrl=<PageUrl('http://test18.com','67868150974853021936294845903799103936','None')>
2011-02-09 13:36:43,666 - surf.store - DEBUG - find_or_create_exception_url: 
session=4335326160, session_dirty=IdentitySet([])
2011-02-09 13:36:43,666 - surf.store - DEBUG - approve_request after: 
session=4335326160, session dirty=IdentitySet([])

Any guidance on this?  

Brent

On Feb 9, 2011, at 12:09 PM, Michael Bayer wrote:

> 
> On Feb 9, 2011, at 12:01 PM, Brent McConnell wrote:
> 
>> I'm having issues with the sqlalchemy session and completely realize this is 
>> from my own lack of understanding but can't seem to find a solution.  My 
>> plan was to create a library with functions like so...
>> 
>> def func1 (id, session=None):
>>      result = <do somework>
>>      session.add(something)
>>      return result
>> 
>> def func2 (id, session=None):
>>      result = <do somework>
>>      session.add(something)
>>      return result
>> 
>> then from someplace else use the functions like so...
>> 
>> session = scoped_session()
>> result = func1(1, session)
>> result2=func2(2, session)
>> session.commit()
>> session.close()
>> 
>> This doesn't work though.  Do I need to return the session for something 
>> like this to work?  Any advice on the correct pattern to use when trying to 
>> create a transaction across several functions?
> 
> Looks fine to me.   "doesn't work" doesn't carry a lot of detail.
> 
> I'd note that the purpose of scoped_session() is so that "session" is safe to 
> use as a global variable, though there's no reason you can't pass it 
> explicitly to functions as well.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> 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 sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to