[Zope-dev] Re: zope.sqlalchemy, integration ideas

Martijn Faassen faassen at startifact.com
Fri May 30 09:44:07 EDT 2008


Hey,

Michael Bayer wrote:

[snip discussion on BoundMetadata I don't comprehend yet but probably 
should :)]

> As far as ScopedSession, it's really just a thread local variable.  Like 
> any global threadlocal, you can stick whatever you want on it at the 
> start of a request, and tear it down at the end.  

Is it really needed to set things up at the start and the request and 
tear things down on the end, or can a session be retained between 
requests? I.e. is the intent to recreate a Session class each time a 
request is issued?

> Then again it's also 
> reasonable that you might want to have individual ScopedSessions for 
> each application instance within a multi-app process, that way the 
> burden of setting up/tearing down is reduced or removed.   

This indicates to me is possible to retain a Session object between two 
requests? I.e. it's a worthwhile goal to reduce the amount of Session 
configuration going on, right?

> A single 
> ScopedSession for a multi-app process is like a one-dimensional approach 
> where both current thread and current app are identified by the current 
> "get()" of the registry; a collection of ScopedSessions is more like a 
> two-dimensional approach where the first level of registry (i.e. which 
> ScopedSession do I choose) distinguishes between app instance, and the 
> second level (i.e. what Session is bound to this thread ID) 
> distinguishes between threads.
> 
> All of that said I think it can work either way but I think the latter 
> approach might have the explicitness you're looking for.

I'm trying to understand why you think so. I am looking for a way to let 
developers use SQLAlchemy in a straightforward way. They should be able 
to import 'Session', instantiate session in their app, and everything 
works as expected. The framework takes care of making you get the 
appropriately configured Session.

That underneath sessions are scoped per thread and per app, and 
configured per app, is something the developer who handles the session 
object ideally should not have to worry about. Since I hope we can 
actually make this work, why do you think an explicit approach with a 
custom registry which then contains scoped sessions would be better? The 
less of our own new registries we invent the better, I'd say.

That said, I guess you could make the same semantics work if you make 
Session be some factory that uses a nested registry.

(I'd still absolutely like to avoid passing in context explicitly each 
time you need a session; it puts unnecessary burden on the developer and 
promises to make multi-application interactions easier while it actually 
doesn't do so)

Regards,

Martijn



More information about the Zope-Dev mailing list