Martijn Faassen wrote:
Hi there,

On Tue, Jun 17, 2008 at 2:30 PM, Brian Sutherland
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):

    def session_factory(self):
        engine = create_engine(
        return create_session(

    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__

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.


Zope-Dev maillist  -
**  No cross posts or HTML encoding!  **
(Related lists - )

Reply via email to