[Zope-dev] Re: zope2 requests VS zope3 requests

Philipp von Weitershausen philipp at weitershausen.de
Wed Jun 7 16:26:27 EDT 2006


Stefan H. Holek wrote:
> -1
> 
> The whole point of sticking with Zope2 is backward compatibility, isn't
> it? If I wanted something that doesn't run my old products and
> applications anymore I would go to Zope3 directly, why thank you.

Hey, the idea isn't to run Zope 3 directly but to evolve, remember? How
can we evolve if we don't ever change anything? Of course we'll provide
BBB for the usual amount of time.

> Please keep this in mind in your spree to make Zope2 look like Zope3.
> Backward compatibility is paramount.

Of course, but not forever. Eternal backward compatibility (even with
Zope 1) has lead to what Zope 2 and its various bit-rotten APIs are
today. Is it such a surprise then that Zope 3 ended up being a complete
rewrite because people realized early on that it was just way too hard
to satisfy all those weird quirks in Zope 2? Well, it turns out that we
do want to evolve Zope 2, so now we're doing all that work in cleaning
up the mess.

The amount of time I alone have spent in debugging Zope 2 because it
eats exceptions, magically acquires things or excepts this or that is
just ridiculous. But don't get me wrong, I'm not complaining. I'm just
trying to improve things.

> Next thing you are going to remove implicit acquisition ;-).

Nope :).

> On 28. Mai 2006, at 12:53, Philipp von Weitershausen wrote:
> 
>> That's true. However, we really want the Zope 2 request to (eventually)
>> become like the Zope 3 browser request. In fact, in many places we
>> already assume that the Zope 2 request is like a Zope 3 browser request.
>> We stick IBrowserRequest on it and hand it over to lots of Zope 3
>> machinery. So far this has worked relatively well, but there are
>> problems coming up with certain API subtleties.
>>
>> I think the biggest challenge will be to deprecate __getattr__ access
>> for request variables and only allow __getitem__ for this. Then, the
>> getattr protocol will be used to access the request API only. For
>> example, IBrowserRequest demands that requests have a 'debug' attribute.
>> In Zope 2, we have the problem that request.debug is an alternate
>> spelling of request.form['debug']. If that alternate spelling wasn't
>> there, request.debug was free for the IBrowserRequest API. Right now
>> we're doing a frame hack to see where the caller is coming from and
>> either yield request.debug or request.form['debug'].


More information about the Zope-Dev mailing list