Re: Pb lors de la réindexation des documents
Christophe Otton <[email protected]>
| Newsgroups | gmane.comp.web.zope.cps.general.french |
|---|---|
| Message-ID | <[email protected]> |
Yves Bastide a écrit :
> 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.
>
Oui, c'est le grand CPS MAnager qui réindexe automatiquement et qui a
normalement tous les droits.
> 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)
>
> * 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)
>
> 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
>
> 3. Réimporter les documents Word
>
> 4. Supprimer et recréer les index
OK je vais essayer ça cette semaine et te tiendrai au courant .
Merci beaucoup de cette réponse et mille excuses pour le retard de cette
réponse.
Cordialement,
>> 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 : [email protected]
> Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>
_______________________________________________
cps-users-fr
Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>