From: "Andreas Kostyrka" <andreas@kostyrka.priv.at>
Nope it is not. In a normal method you can access something acquired like this: self.acquired_value.
I often do just that. :-) I'm not 100% sure what you need to include for that to work, but I would expect that it is Aqcuisition.Implicit.
The problem is, that __getattr__ does not have access to the acquisition chain.
Well, it does, but it typically causes infinite recursion if you aren't careful. Something like this might work (this is untested code, adapted from something that is a bit more complex that we are doing): def __getattr__(self, name, marker=None): if not name.startswith('_') and not name.startswith('aq_'): if not name in self._v_ignore_attrib: subob = getattr(self,name,_marker) self._v_ignore_attrib=[] # Return it in context of self, forgetting # its location and acting as if it were located # in self. return aq_base(subob) else: self._v_ignore_attrib.append(name) raise AttributeError, name
Basically I want "Transparent Folders" which get their "transparent values from the Acquisition path.
Aha. Well, I wouldn't call it trivial, but it is definitely doable.
Well, I just had an idea for an implementation: Third idea: I return some callable object the was generated specifically for the access from the __getattr__. This is than executed with Acquisition enabled, so it can try to get the real one, .... Problem: What if the attribute does not exist? I do not thing that Zope reacts to well when instead of a AttributeError exception it gets some object that raises AttributeError when accessed, ....
Andreas