Hi!
Some one could help me to construct a correct __bobo_traverse__ or wrapper for my necesities.

The clues:

I have this model of __bobo_traverse__:

def __bobo_traverse__(self, REQUEST, nombre):
        obj = getattr(self, nombre, None)
        if obj is None:
            self.REQUEST.set('TraversalRequestNameStack', self.REQUEST["TraversalRequestNameStack"] + [nombre])
            if hasattr(self, ' index.html'): return getattr(self, 'index.html')
            else:
                resultado = self.__call__()
                if type(resultado) == type(unicode()): return WrapperUnicode(resultado)
                elif type(resultado) == type(str()): return WrapperStr(resultado)
                elif type(resultado) == type(dict()): return WrapperDict(resultado)
                else: return resultado
        return obj

With this Wrapper classes:

class WrapperStr(str):
    """ """
    __roles__ = None
   
    def __bobo_traverse__(self, REQUEST, nombre):
        obj = getattr(self, nombre, None)
        if obj is None: return self
        else: return obj
   
class WrapperUnicode(unicode):
    """ """
    __roles__ = None
   
    def __init__(self, cadena):
        self.cadena = cadena
   
    def __bobo_traverse__(self, REQUEST, nombre):
        obj = getattr(self, nombre, None)
        if obj is None: return self
        else: return obj.__of__(self)
       
    def __call__(self):
        return self.cadena
       
    def __str__(self):
        return str(self.cadena.decode('latin-1'))

class WrapperDict(dict):
    """ """
    __roles__ = None
   
    def __bobo_traverse__(self, REQUEST, nombre):
        obj = getattr(self, nombre, None)
        if obj is None: return self
        else: return obj

With this version I have the security problem I'm asking this days. The last opinion was the Wrapper classes are the problem but you could see the wrappers I can do with the information I have

But if I change the __bobo_traverse__ to this:

def __bobo_traverse__(self, REQUEST, nombre):
        obj = getattr(self, nombre, None)
        if obj is None:
            self.REQUEST.set('TraversalRequestNameStack', self.REQUEST["TraversalRequestNameStack"] + [nombre])
            if hasattr(self, 'index.html'): return getattr(self, 'index.html')
            else:
                obj = getattr(self, 'lanzador', None)
        return obj

Where lanzador is a page template with this code:

<tal:b tal:replace='structure here' />

Then it works perfect!! (we can conclude, then, that Martijn has good clues about the problem, thanks again!)

Here my petition of help:

Could someone explain or point me to how the wrappers need to be? I don't like so much the idea that all my work depends on a page template with 1 line of code if I could implement it at product code

Thank you!

--
Mis Cosas
http://blogs.sistes.net/Garito