[zope-pt] Pegar valor de pasta que contem numeros!

2009-02-17 Por tôpico Luiz
Olá pessoal,





Eu tenho esta variável abaixo que pega a pasta, por exemplo:
--
pasta = context.teste
print pasta
return printed
---
-SAÍDA:
ATFolder at teste

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)

-Gostaria que a SAÍDA fosse:

ATFolder at 008

Se eu renomeio para a008 ou se a pasta nao contém números, dai dá a saída 
correta. Como posso resolver isso pessoal, já que não posso renomear cada uma 
pasta númerica? Eu só quero pegar o valor da pasta, como na pasta TESTE logo 
acima.

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)

for objeto in obj:
    print objeto.aq_parent
return printed
---
-SAÍDA:
CatalogTool at portal_catalog

-Gostaria que a SAÍDA fosse:
ATFolder at pasta1

Mas não sei como fazer, alguém pode me dar uma luz?

Obrigado pela atenção.
 


  Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com

Re: [zope-pt] Pegar valor de pasta que contem numeros!

2009-02-17 Por tôpico André FS
 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


Re: [zope-pt] Pegar valor de pasta que contem numeros!

2009-02-17 Por tôpico softdrive...@yahoo.com.br
H... entendi André! Nossa, ajudou demais colega...!
Muito obrigado pela ajuda. 

Saudações!

--- Em ter, 17/2/09, André FS fs.an...@gmail.com escreveu:
De: André FS fs.an...@gmail.com
Assunto: Re: [zope-pt] Pegar valor de pasta que contem numeros!
Para: zope-pt@yahoogrupos.com.br
Data: Terça-feira, 17 de Fevereiro de 2009, 15:14












 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.getFolderCont ents({'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.getPortalPat h()+'/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.getPortalPat h()+'/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/Documentatio n/Books/ZopeBook /2_6Edition/ 
Acquisition. stx



--

André FS


 

  




 

















  Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com