[ZCM] [ZC] 2232/ 6 Comment "DTML uncallable from ZPT in 2.10"

Collector: Zope Bugs, Features, and Patches ... zope-coders-admin at zope.org
Mon Jul 9 22:37:17 EDT 2007


Issue #2232 Update (Comment) "DTML uncallable from ZPT in 2.10"
 Status Resolved, Zope/bug+solution medium
To followup, visit:
  http://www.zope.org/Collectors/Zope/2232

==============================================================
= Comment - Entry #6 by jens on Jul 9, 2007 10:37 pm

Something may be wrong with your installation or the way you upgraded. This error is fixed on the 2.10 branch, I even tried to reproduce it right now and everything works as expected. You may want to try on a new installation.

________________________________________
= Comment - Entry #5 by dma0380 on Jul 9, 2007 10:44 pm

I am still receiving the same error under the same conditions. I updated to 2.10.4 with no change in behavior.

Thanks in Advance,
Dave
________________________________________
= Comment - Entry #4 by philikon on Nov 12, 2006 10:46 am

Danke, Jens!
________________________________________
= Resolve - Entry #3 by jens on Nov 12, 2006 10:45 am

 Status: Accepted => Resolved

Fixed on the 2.10 branch:

http://svn.zope.org/Zope/?rev=71109&view=rev

... and the trunk:

http://svn.zope.org/Zope/?rev=71110&view=rev

________________________________________
= Assign - Entry #2 by philikon on Nov 6, 2006 1:39 pm

 Status: Pending => Accepted

 Supporters added: philikon

I'll take this one.
________________________________________
= Request - Entry #1 by miwa on Nov 6, 2006 1:36 pm

If you call a DTML method from ZPT in zope 2.10 you get an error which you did not get in earlier versions:

Time  	2006/11/06 18:41:11.342 GMT
User Name (User Id) 	admin (admin)
Request URL 	http://10.0.0.103:9080/test1
Exception Type 	NameError
Exception Value 	global name 'call_with_ns' is not defined

Traceback (innermost last):

    * Module ZPublisher.Publish, line 115, in publish
    * Module ZPublisher.mapply, line 88, in mapply
    * Module ZPublisher.Publish, line 41, in call_object
    * Module Shared.DC.Scripts.Bindings, line 313, in __call__
    * Module Shared.DC.Scripts.Bindings, line 350, in _bindAndExec
    * Module Products.PageTemplates.ZopePageTemplate, line 276, in _exec
    * Module Products.PageTemplates.PageTemplate, line 89, in pt_render
    * Module zope.pagetemplate.pagetemplate, line 117, in pt_render
    * Module zope.tal.talinterpreter, line 271, in __call__
    * Module zope.tal.talinterpreter, line 346, in interpret
    * Module zope.tal.talinterpreter, line 534, in do_optTag_tal
    * Module zope.tal.talinterpreter, line 516, in no_tag
    * Module zope.tal.talinterpreter, line 346, in interpret
    * Module zope.tal.talinterpreter, line 745, in do_insertStructure_tal
    * Module zope.tales.tales, line 696, in evaluate
      URL: /test1
      Line 7, Column 4
      Expression: <PathExpr standard:'here/test2'>
      Names:

{'container': <Application at >,
 'context': <Application at >,
 'default': <object object at 0xb7da5528>,
 'here': <Application at >,
 'loop': {},
 'nothing': None,
 'options': {'args': ()},
 'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0xb54f134c>,
 'request': <HTTPRequest, URL=http://10.0.0.103:9080/test1>,
 'root': <Application at >,
 'template': <ZopePageTemplate at /test1>,
 'traverse_subpath': [],
 'user': <User 'admin'>}

    * Module zope.tales.expressions, line 217, in __call__
    * Module Products.PageTemplates.Expressions, line 130, in _eval
    * Module Products.PageTemplates.Expressions, line 92, in render

NameError: global name 'call_with_ns' is not defined


Test setup:
===========

1.  Add a DTML document or method to the root of the site called test2.  Put the text in it "This is the title from DTML"

2.  Add a Page Template to the root of the site called test1.  Put the following line in it "<div tal:replace="structure here/test2">replaced text</div>".

3.  Attempt to render the page - the error above will be generated

Fix:
====

To fix the bug, change line 92 of Products.PageTemplate.Expressions from

        if callable(base):
            try:
                if getattr(base, 'isDocTemp', 0):
-->                 ob = call_with_ns(ob, ns, 2)
                else:
                    ob = ob()

to

        if callable(base):
            try:
                if getattr(base, 'isDocTemp', 0):
-->                 ob = ZRPythonExpr.call_with_ns(ob, ns, 2)
                else:
                    ob = ob()

I would supply the unit test but I have zero understanding of what is actually happening here, or the existing tests.
==============================================================



More information about the Zope-Collector-Monitor mailing list