[zope-pt] Problemas com imagens da notícia e o catalog

2008-05-21 Por tôpico Alexandre Marinho
Bom esse problema é cabuloso.
Recentemente fui informado que o uso do getObject em consultas ao
catálogo podem causar baixo desempenho no portal.
Infelizmente possuo uma série templates para notícias com getObject.
Estou tentando remove-los mas estou com uma dificuldade séria.
Como estou fazendo hoje:

results = context.portal_catalog(path='noticias',portal_type='News Item')
resultsComFoto = [i for i in results if i.getObject().getImage()]
resultsSemFoto = [i for i in results if not i.getObject().getImage()]

Como podem ver necessito separar as noticias com foto das sem, só que
o script acima abusa do getObject, o que é muito ruim!!!

A solução mais óbvia seria criar um novo índice no catalog certo?

Bom eu fiz isso, adicionei um novo índice chamado getImage e também um
metadata getImage. Porém agora sempre que tento cadastrar uma nova
noticia com imagem acontece o erro:

Can't pickle objects in acquisition wrappers.

Se removo o índice e o metadata funciona normal. Já tentei fazer fazer
um rebild do catalog mas fica do mesmo jeito! 
O que estou fazendo de errado???

DETALHE: quando adiciono um indice chamado getImageCaption (legenda da
imagem) o processo de cadastro permanece normal, ou seja, o erro
aparentemente acontece somente com o campo imagem. Porque seria isso?
Não é possível fazer dessa forma com atributos do tipo ImageField??
Senão como poderia separar as noticias com imagem das sem imagem sem
utilizar o getObject??

Bom, acho que já fiz perguntas demais. Espero que possam me ajudar.
Obrigado

--
Alexandre Marinho
ITEC - AL



Re: [zope-pt] Problemas com imagens da notícia e o catalog

2008-05-21 Por tôpico Luciano Ramalho
2008/5/21 Alexandre Marinho [EMAIL PROTECTED]:
 Bom esse problema é cabuloso.
 Recentemente fui informado que o uso do getObject em consultas ao
 catálogo podem causar baixo desempenho no portal.
 Infelizmente possuo uma série templates para notícias com getObject.
 Estou tentando remove-los mas estou com uma dificuldade séria.
 Como estou fazendo hoje:

 results = context.portal_catalog(path='noticias',portal_type='News Item')
 resultsComFoto = [i for i in results if i.getObject().getImage()]
 resultsSemFoto = [i for i in results if not i.getObject().getImage()]

 Como podem ver necessito separar as noticias com foto das sem, só que
 o script acima abusa do getObject, o que é muito ruim!!!

 A solução mais óbvia seria criar um novo índice no catalog certo?

 Bom eu fiz isso, adicionei um novo índice chamado getImage e também um
 metadata getImage. Porém agora sempre que tento cadastrar uma nova
 noticia com imagem acontece o erro:

 Can't pickle objects in acquisition wrappers.

 Se removo o índice e o metadata funciona normal. Já tentei fazer fazer
 um rebild do catalog mas fica do mesmo jeito!
 O que estou fazendo de errado???

 DETALHE: quando adiciono um indice chamado getImageCaption (legenda da
 imagem) o processo de cadastro permanece normal, ou seja, o erro
 aparentemente acontece somente com o campo imagem. Porque seria isso?
 Não é possível fazer dessa forma com atributos do tipo ImageField??
 Senão como poderia separar as noticias com imagem das sem imagem sem
 utilizar o getObject??

 Bom, acho que já fiz perguntas demais. Espero que possam me ajudar.
 Obrigado

A mensagem de erro já dá a dica: não é possível serializar objetos que
participam do sistema de aquisição (tradução não literal da mensagem).
Note que o método getImage retorna uma imagem, um objeto complexo com
suporte à aquisição, porém você está usando o resultado com se fosse
um simples booleano nas suas list comprehensions. Então o que você
precisa é armazenar no catalog o booleano, e não a imagem inteira. Um
jeito super fácil de fazer isso via ZMI seria criar um script Python
na skin do seu portal com este código:

return bool(context.getImage())

Você poderia chamar este script de tem_imagem e criar um field index
com o mesmo nome no seu catalog.

[ ]s
Luciano