Martijn Faassen wrote:
Hi there,
On Tue, Jun 17, 2008 at 2:30 PM, Brian Sutherland
<[EMAIL PROTECTED]> wrote:
[snip]
Just commenting that IDatabase.engine is not used by any code external
to the Database object. There's no use case for it to be public.
While I am not sure we have a strong use case for engine anyway, I
like methods that people can implement to affect behavior (especially
when subclassing) to be public. I don't feel comfortable implementing
something that starts with an underscore.
Why not just have:
class IDatabase(Interface):
"""A utility that specifies the database.
"""
def session_factory():
"""Create a new session
"""
def id():
"""Get unique id for this database configuration.
This should be unique per site (application).
"""
class Database(grok.LocalUtility):
grok.implements(IDatabase)
def session_factory(self):
engine = create_engine(
'postgres:///experiment',
convert_unicode=True)
return create_session(
bind=engine,
autocommit=True,
autoflush=True,
extension=ZopeTransactionExtension())
def id(self):
# we use the application name as the unique id. Can we use
# something more clever and universally working?
return self.__parent__.__name__
[snip]
[snip]
As Laurence has suggested, the session persists, so
IDatabase.configuration will only be called once per thread. Not sure if
creating one new engine per thread is bad.
I don't know either. I've assumed that one wouldn't want to recreate the
engine for each thread, but perhaps that's fine and we don't break any,
say, connection pooling mechanisms that way? I do not know.
Unfortunately I don't either...
I'm not sure connection pooling is really useful in a threaded
environment with recycled sessions. You want n threads = n connections.
If we started creating new sessions each request then things would be
different.
Laurence
_______________________________________________
Zope-Dev maillist - [email protected]
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 )