[Zope3-dev] Re: zope.app.twisted.main?

Philipp von Weitershausen philipp at weitershausen.de
Fri Feb 2 13:17:08 EST 2007


On 2 Feb 2007, at 18:15 , Chris Withers wrote:
> Philipp von Weitershausen wrote:
>> As Jim pointed out in an earlier discussion [1], we would rather  
>> like to separate server configuration from the application  
>> definition (ZODB, logs, etc.).
>
> That sounds like any work I do here will help...
>
>>> - make twisted/zserver interchangeable through a zope.conf setting
>> Like Jim, I would rather like to see (at least the HTTP) server  
>> definition thru something that's more general, such as paste.deploy.
>
> I don't know paste.deploy and I don't have time or inclination to  
> learn it. However, any work I do will be aiming to make it simpler  
> to slot in different bits in different roles. What does  
> paste.deploy do?

It's a generic system that binds a WSGI application (such as the  
zope.publisher) to a WSGI server (such as twisted.web2 or  
zope.server). You can also register WSGI middlewares inbetween. See  
http://pythonpaste.org/deploy/. Other Python web frameworks use it or  
can at least use it. One of the big advantages of paste.deploy is the  
easy definition of middlewares. Paste itself is a large library of  
WSGI middlewares which features things like a funky live JavaScript  
exception debugging middleware (the application raises an error and  
the browser gets the full traceback, incl. a "command line" which  
allows you to debug the code TTW, see http://mrtopf.blip.tv/file/ 
47128/).

Perhaps there's not a need for that separation in the Zope 3 core  
with packages like zope.paste around...

> I was toying with the idea of trying to have an IConfiguration  
> utility such that ZConfig could be switched out, is that what  
> you're talking about?

Not sure. Note that ZCML hasn't been loaded yet when main() is  
executed and the application configuration is read.

I thik we can stick with ZConfig for now, even though Jim doesn't  
like it... *wink* ;)

>>> - refactor so that as much code as possbile is shared between  
>>> zope.app.twisted.main and zope.app.server.main
>> +1
>> I'd say that this should result in a general main() program that  
>> *can* (but doesn't have to) read the application definition from a  
>> zope.conf file,
>
> Indeed.
>
>> and does server setup (at least HTTP) through a general framework  
>> like paste.deploy.
>
> Well, I'll try and make this code encapsulated...
>
>> I would assume that this also results in a separate configuration  
>> file for paste.
>
> Yay! More config files, just what we need ;-)

Well, if we'd use ConfigParser style config files for our application  
definition, we could use one configuration file -- the one that  
paste.deploy also uses...

>>> - explore ways of seperating some of the publication concerns
>> +1
>> For one, I suggest factoring the whole root object issue out of  
>> the publication (e.g. introduce an IRootObjectFactory utility  
>> that, when called, will return the root object;
>
> How about just making an IApplication utility, or is IApplication  
> too specific?

What *is* an "Application"? Sounds like a Zope2ism to me (the root  
folder being called "application").

Yes, the publication in Zope 3 (which was written at an very early  
stage with a lot of Zope 2 background) has a method "getApplication",  
but all it does is return the root object. So let's reflect that name  
in the utility.

It just occurred to me that we could make those IRootObjectFactory  
things named utilities. Then you cna register as many of them at the  
same time and just choose which one you want using a switch in, say,  
zope.conf.

Philipp




More information about the Zope3-dev mailing list