Re: [CPS-users-fr] Re: Pb lors de la réindexation des documents

Georges Racinet gracinet at nuxeo.com
Mer 18 Oct 16:22:46 CEST 2006


On Oct 18, 2006, at 3:08 PM, Yves Bastide wrote:

> Christophe Otton wrote:
>> Bonjour,
>> J'ai toujours mon pb de réindexation et quelques difficultés à  
>> savoir d'où ça vient.
>> Mon premier souci serait de comprendre les messages d'erreur du  
>> event.log / est-ce que quelqu'un peut m'aider à déchiffrer ce type  
>> de message :
>>> 2006-10-16T21:15:09 PROBLEM(100) FilteredSet eval() failed
>>> Object: document.html, expr: getattr(o, 'portal_type', None) not  
>>> in ('Section', 'Workspace')
>>> Traceback (most recent call last):
>>>   File "/home/zope/Zope-2.7.6-final/lib/python/Products/ 
>>> PluginIndexes/TopicIndex/FilteredSet.py", line 73, in index_object
>>>     if RestrictionCapableEval(self.expr).eval({'o': o}):
>>>   File "/home/zope/Zope-2.7.6-final/lib/python/RestrictedPython/ 
>>> Eval.py", line 112, in eval
>>>     return eval(code, d)
>>>   File "<string>", line 1, in <expression>
>>> Unauthorized: You are not allowed to access 'portal_type' in this  
>>> context
>
> Littéralement, que l'utilisateur qui demande d'afficher  
> document.html n'en a pas le droit... Mais c'est plus sûrement que  
> ledit document.html est corrompu. D'autant plus avec tes autres  
> messages d'erreur.
>
> Tu peux peut-être essayer ceci :
>
> 1. supprimer les documents Word qui ont lancé la cascade d'erreurs
>
> 2. installer le patch pour PortalTransforms que j'ai mis hier dans  
> le Trac : http://svn.nuxeo.org/trac/pub/ticket/1760. Il accélère  
> notamment word_to_html. Au point de les rendre utilisables. Deux  
> bémols :
>
> * il nécessite une version récente de lxml (au moins 1.0, je pense)

Si je comprends bien c'est parce que lxml comprend bien le html pas  
bien formé ?

>
> * il est faux :-) (supprimant les parties du document HTML sous les  
> balises inconnues, au lieu de supprimer les balises seules ; il  
> faut au minimum ajouter 'font' aux balises reconnues)

Bonjour, on se demandait justement si on l'incorporerait dans la  
(future mais proche) 3.4.3 :-)
Pour cela, il faudrait, bien sûr qu'il soit corrigé, s'il est  
incomplet et faire attention à la dépendance sur lxml:
par exemple, lxml 1.0.3 est actuellement dans la branche "testing" de  
Debian. Àma, ce serait bien de tester la présence de lxml et  
d'utiliser l'ancien système par défaut, je crois qu'il y a pas mal de  
gens qui se débarassent simplement de CPSBlog pour faire tourner leur  
CPS dans lxml (ceci date d'une époque où l'installation de lmxl était  
plus difficile).


>
> 2b. j'attache aussi un word_to_text.py utilisant wvware : le mettre  
> dans PortalTransforms/transforms, modifier transforms/__init__.py  
> pour qu'il l'appelle, et l'ajouter sous la ZMI

On peut avoir ça aussi dans le ticket ? une source unique c'est plus  
simple.

Merci pour les contributions en tout cas.


>
> 3. Réimporter les documents Word
>
> 4. Supprimer et recréer les index
>
>> Ch Otton
>> Poyry Environment.
>
> yves
>
> # $Id$
>
> import os
> import sys
> from lxml import etree
> from Products.PortalTransforms.interfaces import itransform
> from Products.PortalTransforms.transforms import office_wvware
>
> ENCODING = "iso-8859-15"
>
> # This could go in libtransforms/utils
> def getBodyTextFromHTML( html_fd, encoding ):
>     """Return the body, as text, of an HTML document.
>     """
>     parser = etree.HTMLParser()
>     tree = etree.parse(html_fd, parser)
>     body = []
>     body_elt = tree.getroot().find('body')
>     if not body_elt:
>         return ''
>     for event, elem in etree.iterwalk(body_elt, events=('start',  
> 'end')):
>         if VALID_TAGS.get(elem.tag, 0):
>             if elem.text:
>                 txt = elem.text.strip()
>                 if isinstance(txt, unicode):
>                     txt = txt.encode(encoding, 'xmlcharrefreplace')
>                 if txt:
>                     body.append(txt)
>             if elem.tail:
>                 txt = elem.tail.strip()
>                 if isinstance(txt, unicode):
>                     txt = txt.encode(encoding, 'xmlcharrefreplace')
>                 if txt:
>                     body.append(txt)
>     return " ".join(body)
>
>
> class document(office_wvware.document):
>
>     def text(self):
>         htmlfile = open(os.path.join(self.tmpdir, self.__name__ 
> +'.html'))
>         text = getBodyTextFromHTML(htmlfile, ENCODING)
>         return text
>
>
> class word_to_text:
>     __implements__ = itransform
>
>     __name__ = 'word_to_text'
>     inputs   = ('application/msword',)
>     output  = 'text/plain'
>
>     def name(self):
>         return self.__name__
>
>     def convert(self, data, cache, **kwargs):
>         orig_file = os.path.basename((kwargs.get('filename') or  
> 'unknown.doc'))
>
>         doc = document(orig_file, data)
>         doc.convert()
>         text = doc.text()
>
>         doc.cleanDir(doc.tmpdir)
>
>         cache.setData(text)
>         return cache
>
> def register():
>     return word_to_text()
> _______________________________________________
> cps-users-fr
> Adresse de la liste : cps-users-fr at lists.nuxeo.com
> Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/ 
> cps-users-fr>

---------
Georges Racinet,   Nuxeo SAS
Open Source Enterprise Content Management (ECM)
Web: http://www.nuxeo.com/ and http://www.nuxeo.org/ - Tel: +33 1 40  
33 79 87






This list archive provided by Nuxeo, the leaders of open source ECM. Check out the Nuxeo 5 open source, standards-based ECM project.