[Zope] Acquisition question

Hannu Krosing hannu@trust.ee
Fri, 12 Feb 1999 01:13:20 +0200


Hi,

Can anybody explain why my dynamically created attributes 
can't find their acquired attributes up the hierarchy?

I have the following code

---8<------8<------8<------8<------8<------8<------8<---
class AcquTest(Acquisition.Implicit):
    "the implicitluy aquired one"
    __roles__ = None
    def __init__(self,color=None):
        if color:
            self.color = color
    def __getitem__(self,attr):
        if self.__class__.__dict__.has_key(attr):
            return self.__class__.__dict__[attr]
        if self.__dict__.has_key(attr):
            return self.__dict__[attr]
        try: 
            return self.aq_acquire(attr)
        except: 
            self.__dict__[attr] = AcquTest(attr)
            return self.__dict__[attr]
    local_html = HTML("<html>Local <!--#var color--></html>")
    index_html = HTML("""
       <!--#var page_header-->
       <!--#var color--><br>
       <!--#var page_footer-->""")

aq = AcquTest('orange')
aq.page_header = HTML('<html><font color="<!--#var color-->"
size=+3><b>')
aq.page_footer = '</font></html>'
aq.name = 'AQ root object'

aq.a = AcquTest()
aq.a.b = AcquTest('blue')
aq.a.color= 'green'
---8<------8<------8<------8<------8<------8<------8<---

and when I access it through web as /aq , /aq/a or /aq/a/b
it works as expected (prints orange, green and blue in 
respective coluor)

but when i want to access a new attribute (retrieved from 
a database by attr in my real application), then it can't 
acquire the other attributes up the hierarchy.

ie /aq/black does _not_ print black, instead it produces a traceback:

Traceback (innermost last):
  File /usr/lib/python1.5/cgi_module_publisher.py, line 1457, in
publish_module
  File /usr/lib/python1.5/cgi_module_publisher.py, line 933, in publish
  File /usr/lib/python1.5/DocumentTemplate/DT_String.py, line 471, in
__call__
    (Object: <string>)
  File /usr/lib/python1.5/DocumentTemplate/pDocumentTemplate.py, line
201, in render_blocks
  File /usr/lib/python1.5/DocumentTemplate/pDocumentTemplate.py, line
166, in __getitem__
  File /usr/lib/python1.5/DocumentTemplate/pDocumentTemplate.py, line
135, in __getitem__
KeyError: page_header

So obviously acquisition is not working for me here ;(

Can anyone tell me what I'm doing wrong ?

Or more importantly, how should I proceed to get the dynamically 
generated attributes into the acquisition mechanism?


FWIW, the method local_html works fine.
----------------------
Hannu