[Zope-dev] Bug in careful_getattr()?

Jeff Hoffman jeff.hoffman@goingv.com
Tue, 22 Aug 2000 12:48:40 -0400 (EDT)


Hello,

I have been fighting a problem with PythonMethods/ZClasses. I have a
ZClass, MyTestClass, which has four methods:

  method1 (DTML Method)
  method2 (DTML Method)
  showMethods (DTML Method)
  showMethods2 (PythonMethod)

showMethods is defined as:

  <dtml-var standard_html_header>
  <p>
  method1 = <dtml-var "_.hasattr(this(), 'method1')"><br>
  method2 = <dtml-var "_.hasattr(this(), 'method2')"><br>
  nullmethod = <dtml-var "_.hasattr(this(), 'nullmethod')">
  </p>
  <dtml-var standard_html_footer>

and showMethods2 is defined:

  print getattr(self, 'method1')
  print getattr(self, 'method2')
  print getattr(self, 'nullmethod')
  return printed

showMethods, when invoked on an instance of my ZClass, returns:

  method1 = 1
  method2 = 1
  nullmethod = 0

Bingo. showMethods2, the PythonMethod, results in an AttributeError in
DT_Util.py:135. Digging into the Zope source, I see:

  validate=md.validate  # line 135

  if validate is None: return v

By inserting some print statements, I notice that md is an empty 
dictionary ([]) when careful_getattr() is called. Therefore, the
validate=md.validate line throws an AttributeError.

I fixed the "problem", and my code as a result, by changing this to read:

  try: validate=md.validate
  except: validate=None

  if validate is None: return v

I have a really strong feeling, though, that I just opened a whole can of
worms. Does my change break an intended behavior of Zope? Is it supposed
to throw an AttributeError when md does not have a 'validate'? If so, is
there a bug in PythonMethods that is causing md to not be initialized
properly before the call to careful_getattr()?

I am pressed for time on this project, and could really use some insight,
here. I am fresh out of ideas, and have hit the limits of my knowledge.

Thanks,

--Jeff

---
Jeff K. Hoffman                               704.849.0731 x108
Chief Technology Officer                      mailto:jeff.hoffman@goingv.com
Going Virtual, L.L.C.                         http://www.goingv.com/