Olá pessoal,
Olá, Luiz.
[snip]
Quando coloco para puxar uma pasta que tem como ID números e está abaixo da
pasta EXEMPLO, me da erro no código, por exemplo:
pasta = context.teste.008
-ERRO:
invalid syntax (Script (Python), line 1)
Veja que, de fato, esse não é um código Python (PythonScript do Zope,
que seja) válido, o identificador deveria começar com uma letra, como
você deve ter percebido. Talvez haja uma forma mais elegante, mas essa
aqui funciona:
pasta = context.teste
subpasta = pasta.getFolderContents({'id':'008'})
'subpasta' será um objeto tipo 'brain' resultante de consulta no
catálogo, assim, para levantar o objeto, de fato, do ZODB, faça:
obj008 = subpasta[0].getObject()
[snip]
A proposito pessoal, com a variável abaixo, só consigo pegar o valor que
está em CATALOG, mas gostaria de pegar o valor da pasta origem de onde
reside o objeto, por exemplo:
---
pa = context.portal_url.getPortalPath()+'/pasta1';
obj = context.portal_url.portal_catalog(Type = Page,
path = pa)
Você não precisa chamar 'portal_catalog' a partir de 'portal_url'.
Isso só funcionou por conta da Aquisição [1]. Seu código poderia ser
desse jeito:
pa = context.portal_url.getPortalPath()+'/pasta1';
obj = context.portal_catalog(Type = Page,
path = pa)
for objeto in obj:
print objeto.aq_parent
return printed
---
-SAÍDA:
CatalogTool at portal_catalog
Isso está correto. Quando você faz uma consulta no catálogo, os
valores retornados, por motivos de performance, são objetos proxies (o
tal 'brain' ao qual me referi anteriormente). O pai desses objetos
são, de fato, o CatalogTool. Se você deseja acessar o objeto real a
partir do 'brain', existe o método 'getObject'. Tente reescrever seu
código dessa forma:
for objeto in obj:
print objeto.getObject().aq_parent
return printed
Espero que ajude.
[1] http://www.zope.org/Documentation/Books/ZopeBook/2_6Edition/Acquisition.stx
--
André FS