[Zope] acquisition failure puuzzle or maybe something else

Dennis Allison allison at shasta.stanford.edu
Fri Jul 27 13:18:29 EDT 2007


Zope 2.9.X
Python 2.4
Centos 4.4 Linux
Firefox 2.0.0.5  (Linux and Win XP)


I have a dtml method is a folder C and a folder setup  

/ 
  A
  B
  C
  scripts


In the dtml method, there is a call to a script passing in a composed 
string made up of variables passed in through request inside of a 
dtml-let, 

	<dtml-let  someval="scripts.cleanfilename(cgivar1+'_'+cgivar2)" 
        >
             --- methods that use someval ---
        </dtml-let>

a pattern we have used in many places without a problem.

In this particular case, Zope throws an error

   Traceback (most recent call last):
     File "/usr/local/src/zope/Zope2.9/lib/python/ZPublisher/Publish.py", 
   line 115, in publish
       request, bind=1)
     File "/usr/local/src/zope/Zope2.9/lib/python/ZPublisher/mapply.py", line 
   88, in mapply
       if debug is not None: return debug(object,args,context)
     File "/usr/local/src/zope/Zope2.9/lib/python/ZPublisher/Publish.py", 
   line 41, in call_object
       result=apply(object,args) # Type s<cr> to step into published object.
     File "/usr/local/src/zope/Zope2.9/lib/python/OFS/DTMLMethod.py", line 
   144, in __call__
       r=apply(HTML.__call__, (self, client, REQUEST), kw)
     File 
   "/usr/local/src/zope/Zope2.9/lib/python/DocumentTemplate/DT_String.py", 
   line 476, in __call__
       try: result = render_blocks(self._v_blocks, md)
     File "/usr/local/src/zope/Zope2.9/lib/python/DocumentTemplate/DT_In.py", 
   line 630, in renderwob
       if self.elses: return render_blocks(self.elses, md)
     File "/usr/local/src/zope/Zope2.9/lib/python/DocumentTemplate/DT_In.py", 
   line 703, in renderwob
       try: append(render(section, md))
     File 
   "/usr/local/src/zope/Zope2.9/lib/python/DocumentTemplate/DT_Let.py", line 
   75, in render
       else: d[name]=expr(md)
     File 
   "/usr/local/src/zope/Zope2.9/lib/python/DocumentTemplate/DT_Util.py", line 
   196, in eval
       return eval(code, d)
     File "<string>", line 1, in <expression>
   AttributeError: cleanfilename
   
The failing line is (literally)

  <dtml-let sname="scripts.cleanfilename(user_lastname+'_'+user_firstname)"

which is part of a <dtml-let> with several components.


Now, the failing element is part of a method that fundamentally has a
if-elif structure and the actual code fragment is embedded in a pair of
nested <dtml-in> blocks which have internal <try>-<except>-<else> blocks,
but that is all control structure and should not impact name/attribute
resolution, or so I believe.  A trace through the executing method shows
the control flow is functioning as expected.  Security settings appear to
be correct--and the correct execution of simple test methods (see below)
tend to support that conclusion.

Moving the script into the same folder as the method (that is, moving it from 
the folder scripts to the folder C in the layout above) is a workaround, but it
breaks our coding conventions.  i

Simple test methods in folder C 

   <dtml-var standard_html_header>
   <dtml-let sss="scripts.cleanfilename('able baker charlie  ')">
   <dtml-var sss>
   </dtml-let>
   <dtml-var standard_html_footer>

work fine and do not throw the attribute error.

I suspect that this is a problem caused by some trivial error, but we've been
unable to find it.  Any help/suggestions as to how to resolve this puzzle would
be appreciated.





More information about the Zope mailing list