[Zope-dev] [RFClet]: What about the request method and the client side trojan?

Toby Dickenson tdickenson@geminidataloggers.com
Fri, 12 Apr 2002 09:49:19 +0100


On Thursday 11 April 2002 6:37 pm, Jeffrey P Shell wrote:

>On 4/11/02 7:55 AM, "Toby Dickenson" <tdickenson@geminidataloggers.com>

>Then you're lucky.  Usually, any time I see <dtml-var
>"someNonIdempotentMethod()">, I immediately change it to the name lookup
>call.  Don't blame me, I've been following this paradigm for years (since
>before there were expr's in DTML).  I would hate to have to special case
>those methods

OK, that kills the second half of my proposal.

(I still think your style is bizarre though ;-)

> (which I use a lot, usually as accessors, ie:
>
>def Summary(self):
>    return self.title + self._description
>).

Aha! maybe not!

That example method definitely is idempotent. Under my proposal it should not 
be declared non-idempotent, and would not have restricted dtml-name-lookup 
semantics. I agree being able to write <dtml-var Summary> is a good thing 
whether Summary is an attribute or method (and not at all bizarre). I agree 
that changing this would be disasterous.

Im not sure whether you misunderstood the proposal, or just gave a poor 
example to explain why you thought the proposal is bad.....

My proposal only affects method which have been declared to be 
non-idempotent. This declaration would only be added to methods that change 
externally visible state (in ZODB, Filesystem etc) or have external side 
effects (such as sending an email)

Here is a differnet example. Suppose you write a method:

def setEmptyTitle(self):
    self.title = '<empty>'

How would you call it from dtml. I think the 'right' answer is that you 
generally wouldnt call this method from dtml. From a PythonScript maybe, but 
not dtml. However if you did call if from dtml, would you still be using the 
name-lookup form, such as:

<dtml-var setEmptyTitle>

or would you use

<dtml-call setEmptyTitle>
<dtml-call "setEmptyTitle()">
<dtml-var "setEmptyTitle()">

?

(Im not going to argue that anyone is 'wrong' to prefer the first form in 
this case. Its my *personal* preference that calling non-idempotent methods 
using the name-lookup form should be caught and reported as an error.... I am 
wondering whether this preference is shared.)