Sektionen
Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Support Dokumentation docs Plone: IndexError beim reindex vom portal_catalog durch Transforms

Plone: IndexError beim reindex vom portal_catalog durch Transforms

Wenn der Fehler "IndexError: list index out of range" beim reindizieren des portal_catalog kommt, kann es unter anderem an fehlerhaften Konfigurationen in PortalTransforms liegen.

Nachfolgend wird ein Fehler in PortalTransforms, beim reindizieren des Kataloges und dessen Behebung beschrieben.

Traceback (innermost last):
Module ZPublisher.Publish, line 119, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 42, in call_object
Module Products.CMFPlone.CatalogTool, line 506, in manage_catalogRebuild
Module Products.CMFPlone.CatalogTool, line 496, in clearFindAndRebuild
Module OFS.FindSupport, line 260, in ZopeFindAndApply
Module OFS.FindSupport, line 260, in ZopeFindAndApply
Module OFS.FindSupport, line 260, in ZopeFindAndApply
Module OFS.FindSupport, line 248, in ZopeFindAndApply
Module Products.CMFPlone.CatalogTool, line 489, in indexObject
Module Products.Archetypes.CatalogMultiplex, line 39, in indexObject
Module Products.CMFPlone.CatalogTool, line 439, in catalog_object
Module Products.ZCatalog.ZCatalog, line 536, in catalog_object
Module Products.ZCatalog.Catalog, line 361, in catalogObject
Module Products.ZCTextIndex.ZCTextIndex, line 187, in index_object
Module Products.Archetypes.BaseObject, line 537, in SearchableText
Module plone.app.blob.content, line 134, in getIndexValue
Module Products.PortalTransforms.TransformEngine, line 409, in _findPath
Module UserList, line 28, in __getitem__
IndexError: list index out of range

Hier tritt ein Fehler in der Methode _findPath im Modul TransformEngin auf. Ursache in diesem Fall ist, ein unvollständiger Eintrag vom TinyMCE in portal_transforms. Es wird davon ausgegangen, dass zu jedem Schlüssel auch ein Wert existiert. Dies ist hier nicht der Fall gewesen, wie nachfolgend gezeigt.

Um das Problem zu analisieren starten wir die Instanz im debug Modus:

./bin/instance debug

Nun können wir uns die betrefenden Einträge in portal_transforms anzeigen lassen.

>>> app.site.portal_transforms._mtmap['text/html']
{
'text/x-html-safe': [<Transform at safe_html>],
'text/x-tinymce-output-html': [],
'text/plain': [<Transform at html_to_text>],
'text/html': [<Transform at html_body>],
'text/x-web-intelligent': [<Transform at html_to_web_intelligent_plain_text>]
}

Wie wir sehen, ist der Wert für "text/x-tinymce-ouput-html" leer und dies ist auch der Grund für den Fehler. Wir entfernen daher diesen Eintrag wie folgt.

>>> del app.site.portal_transforms._mtmap['text/html']['text/x-tinymce-output-html']

Der Eintrag ist nun nicht mehr enhalten.

>>> app.site.portal_transforms._mtmap['text/html']
{
'text/x-html-safe': [<Transform at safe_html>],
'text/plain': [<Transform at html_to_text>],
'text/html': [<Transform at html_body>],
'text/x-web-intelligent': [<Transform at html_to_web_intelligent_plain_text>]
}

Damit diese Änderung persistent wird, schließen wir unsere Operation mit einem trasaction.commit() ab.

>>> import transaction as zt
>>> zt.commit()

Der Fehler sollte nun nicht mehr auftreten.