[zope-pt] Pegar valor de pasta que contem numeros!
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!
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!
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