[Zope-dev] DTML sqltest tag and python expr. Bug in Zope Book?

Dieter Maurer dieter@handshake.de
Sat, 30 Jun 2001 11:41:57 +0200 (CEST)


Yves-Eric Martin writes:
 > > I expect that "dtml-sqltest" does not support the "expr"
 > > attribute due to its "optional".
 > > 
 > > It is not easy to define the semantics of "optional" for
 > > arbitrary expressions.
 > ....
 >     To overcome that problem, I think it would make sense to treat the
 > "optional" like this: when the expression raises a NameError, if the
 > variable name that caused the error is an expected argument of the
 > ZSQLMethod, then this argument was not provided, so do not render the
 > sqltest tag. Otherwise, we have a real error. In a pythonish algorithm,
 > that would look like this:
 > 
 > 
 >     try:
 >         renderedExpr = eval(expr)
 >     except NameError, varName:
 >         if varName in ZSQLMethodArguments:
 >             # "optional" behavior for missing variable
 >             pass
 >         else:
 >             # We have a real error
 >             raise NameError, varName
 >     else:
 >         # render sqltest tag
 >         ...
 > 
 > 
 > Do you think that makes sense?
If I were a purist, I would answer: no.

  The name error could come from a nested call that incidentally
  uses the same name for a variable as a request argument.


If I were a Zope maintainer, I would answer: no.

  The feature is rarely used and if it is, there is
  a way to do it with existing DTML means:

  As you demonstrated:

    <dtml-if XXX>
      <dtml-sqltest ...>
    </dtml-if>

  does work, although it is not really nice -- but not too bad, either.


If I would need this feature extensively, I would privately
enhance Zope as necessary. I learned yesterday, how to
use "cvs import/checkout/update" to keep such private enhancements
across Zope upgrades.


But your point was: The feature is used in the Zope book,
thus, apparently, it was useful. The question:
"why not implement the feature rather than change the book".
Maybe, DC says something about this....


Dieter