Martijn Faassen wrote:
Hi there,

Laurence Rowe wrote:
[snip]
The code would get a session through:

 >>> Session = getUtility(IScopedSession, 'my-app')
 >>> session = Session()

The drawback is that this is more typing. You do a utility lookup and an instantiation as opposed to simply importing the scoped session when needed:

from myapplication import session

session.query(...)

One topic we ran into during the megrok.kss discussion is doing multiple instances of the same application, each writing to a different database. You can't hardcode your database name in your application. I think sessions as local utilities would help us solve that problem, right?

What would be nice if we could do the 'from myapp import session' pattern and have it use the local utility infrastructure underneath somehow... Possible?


We'll have to stick with scoped sesssions because of threading, but the engine as local utility pattern should still work.

#myapplication/__init__.py
Session = scoped_session(sessionmaker(bind=LookupEngine('my-engine')...))
engine = EngineUtility(url='sqlite:///')
provideUtility(engine, IConnectable, 'my-engine') # but normally a local utility registration

#myapplication/foo.py
from myapplication import Session
session = Session()

One (perhaps the only) advantage I can see with looking up the scoped session as a utility is that it gives the integrator control over whether to use one or two phase commit, as this is set in the session configuration. Normally one would prefer one-phase commit as it is faster, but if an integrator arranged for two applications to be modified in a single transaction she would want to configure two-phase commit.

Laurence

_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )

Reply via email to