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 [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.