[PEAK] FYI: peak.web refactoring in progress...

Phillip J. Eby pje at telecommunity.com
Thu Jun 3 11:57:55 EDT 2004

I'm going to try to keep it so that existing apps (such as the DDT web 
runner) will still work, with the following exceptions:

* The pageProtocol, pathProtocol, and errorProtocol machinery is going 
away, being replaced by direct usage of IWebPage, IWebTraversable, and 
IWebException respectively.  This means that you won't be able to define 
multiple web applications layered over the same domain objects and 
services, but I don't think anybody has used that feature yet, because it 
was so obscure as to *how*.  In the long run, this feature will come back 
via a different route: you'll simply write a different XML file to define a 
new application over the same components.

* The DOMlet interfaces and implementation may change significantly.

* The Zope request/response objects will be going away, so all capabilities 
based on them will have to go away too.  This means no cookie parsing or 
setting, unless you roll your own (or use another library).  It also means 
no query string or form variable processing, unless you roll your own or 
use another library (such as the 'cgi' module).  And last, but far from 
least, it means that arbitrary callables (such as functions and methods) 
can't be used as web pages, unless they use a fixed calling signature.  The 
CallableAsWebPage adapter will be changed to use this calling format:

     def someMethod(environ,input,errors):
         return status,headers,output_iterable

For example, in 'trivial_web', the current:

     def index_html(self):
         return "Hello world!"

would need to be rephrased as:

     def index_html(self, environ, input, errors):
         return "200", ["Content-type: text/plain"], ["Hello world!"]

Once the basic refactoring is complete, we can begin to replace some of the 
Zope request/response functionality, via functions that operate on 
environ+input, or that return header lines for use in the return 
value.  For example, if index_html wanted to set a cookie, it might do 
something like:

     def index_html(self, environ, input, errors):
         return "200", [
             "Content-type: text/plain",
         ], ["Hello world!"]

Please let me know if you have any questions or concerns.  And I'd 
especially like to know if any of my checkins breaks anything in your 
existing applications.  Thanks.

More information about the PEAK mailing list