On Mon, Nov 08, 2004 at 11:22:13AM -0000, Tim Hicks wrote:
Paul Winkler said:
What I really want to be able to do from the server code is something like::
root = magic_that_gets_me_zodb_root()
That magic is basically (from memory):
import Zope Zope.startup() root = Zope.app()
But note that starting up a zope is slow, so you don't want to do that very often.
Well, in this case zope is already running.
Ok, so I could simply drop the Zope.startup() line and things would be fine (and quick), right?
I haven't tried it, but I think doing Zope.app() will try to acquire a lock on the database and it is already locked by the running Zope (or ZEO). So I don't think you can do that.
I think you should use the existing publisher machinery. Given an SMTPRequest instance foo, you should be able to do foo.traverse(path, response) and get back an object. This monster method is defined in ZPublisher/BaseRequest.py
What does using foo.traverse() buy me over simply accessing the ZODB objects 'by hand', as in root = Zope.app()?
Well, for one thing it might actually work ;-) Note, I'm not sure what your code looks like - if you already have a reference to any persistent object (as long as it's Traversable which basically anything of interest to you would be), you can get the root by doing root = someObject.getPhysicalRoot().
It seems I get security by using foo.traverse() - although I'm not sure whether that is really necessary for my purposes. Would it also deal with any ZODB transaction stuff for me that I would otherwise have to sort out - get_transaction().commit(). If I'm just reading ZODB objects (not writing), does the transaction stuff even matter?
I'm afraid I don't know either of those, I've never tried to hook into zope from within a ZServer server. Generally a transaction runs for the duration of one request, but I am not clear on who manages that: is it ZPublisher? It looks like transactions are managed in ZPublisher/Publish.py, but I have never looked at that code and don't have time to figure it out now. Sorry. -- Paul Winkler http://www.slinkp.com