Working on a Plone 3.3.6 instance with a custom product that should display an flv type video. I’m trying to figure where to start in troubleshooting this traversalerror. I’m sure this was working on Plone 3.1.x (though I do have a good imagination).
TraversalError: (<Products.Five.viewlet.metaconfigure.MyFormWrapper object at 0xe4c36cc>, 'contents')
I’ve included the traceback below:
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 zope.formlib.form, line 770, in __call__
Module zope.formlib.form, line 764, in render
Module Shared.DC.Scripts.Bindings, line 313, in __call__
Module Shared.DC.Scripts.Bindings, line 350, in _bindAndExec
Module Products.PageTemplates.PageTemplateFile, line 129, in _exec
Module Products.CacheSetup.patch_cmf, line 77, in PT_pt_render
Module Products.CacheSetup.patch_utils, line 9, in call_pattern
Module Products.PageTemplates.PageTemplate, line 98, in pt_render
Module zope.pagetemplate.pagetemplate, line 117, in pt_render
- Warning: Macro expansion failed
- Warning: exceptions.AttributeError: @@tag_macros
Module zope.tal.talinterpreter, line 271, in __call__
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 891, in do_useMacro
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 957, in do_defineSlot
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 861, in do_defineMacro
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 957, in do_defineSlot
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 949, in do_defineSlot
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 861, in do_defineMacro
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 855, in do_condition
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 534, in do_optTag_tal
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 745, in do_insertStructure_tal
Module Products.PageTemplates.Expressions, line 223, in evaluateStructure
Module zope.tales.tales, line 696, in evaluate
- URL: index
- Line 128, Column 8
- Expression: <StringExpr 'plone.belowcontentbody'>
- Names:
{'container': <ATFile at /sites/videoserver/plone/Members/johndoe/sample-video.flv>,
'context': <ATFile at /sites/videoserver/plone/Members/johndoe/sample-video.flv>,
'default': <object object at 0xb7f33528>,
'here': <ATFile at /sites/videoserver/plone/Members/johndoe/sample-video.flv>,
'loop': {},
'nothing': None,
'options': {'args': ()},
'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0xe3c866c>,
'request': <HTTPRequest, URL=http://videoserver/Members/johndoe/sample-video.flv/file_view>,
'root': <Application at >,
'template': <ImplicitAcquirerWrapper object at 0xe34dcec>,
'traverse_subpath': [],
'user': <PropertiedUser 'admin'>,
'view': <Products.Five.metaclass.SimpleViewClass from /data/Plone/buildout/eggs/p4a.video-1.3-py2.4.egg/p4a/video/browser/video.pt object at 0xe4ce36c>,
'views': <zope.app.pagetemplate.viewpagetemplatefile.ViewMapper object at 0xe2fa86c>}
Module Products.Five.browser.providerexpression, line 37, in __call__
Module plone.app.viewletmanager.manager, line 154, in render
Module plone.app.viewletmanager.manager, line 83, in render
Module plone.app.layout.viewlets.common, line 44, in render
Module alteroo.assesscontent.browser.viewlet, line 95, in index
Module Shared.DC.Scripts.Bindings, line 313, in __call__
Module Shared.DC.Scripts.Bindings, line 350, in _bindAndExec
Module Products.PageTemplates.PageTemplateFile, line 129, in _exec
Module Products.CacheSetup.patch_cmf, line 77, in PT_pt_render
Module Products.CacheSetup.patch_utils, line 9, in call_pattern
Module Products.PageTemplates.PageTemplate, line 98, in pt_render
Module zope.pagetemplate.pagetemplate, line 117, in pt_render
Module zope.tal.talinterpreter, line 271, in __call__
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 855, in do_condition
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 534, in do_optTag_tal
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 745, in do_insertStructure_tal
Module Products.PageTemplates.Expressions, line 223, in evaluateStructure
Module zope.tales.tales, line 696, in evaluate
- URL: assessment_input
- Line 12, Column 4
- Expression: <PathExpr standard:'view/contents'>
- Names:
{'container': <ATFile at /sites/videoserver/plone/Members/johndoe/sample-video.flv>,
'context': <ATFile at /sites/videoserver/plone/Members/johndoe/sample-video.flv>,
'default': <object object at 0xb7f33528>,
'here': <ATFile at /sites/videoserver/plone/Members/johndoe/sample-video.flv>,
'loop': {},
'nothing': None,
'options': {'args': (<Products.Five.viewlet.metaconfigure.MyFormWrapper object at 0xe4c36cc>,)},
'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0xe15590c>,
'request': <HTTPRequest, URL=http://videoserver/Members/johndoe/sample-video.flv/file_view>,
'root': <Application at >,
'template': <ImplicitAcquirerWrapper object at 0xe0dacec>,
'traverse_subpath': [],
'user': <PropertiedUser 'admin'>,
'view': <Products.Five.viewlet.metaconfigure.MyFormWrapper object at 0xe4c36cc>,
'views': <zope.app.pagetemplate.viewpagetemplatefile.ViewMapper object at 0xe4bb78c>}
Module zope.tales.expressions, line 217, in __call__
Module Products.PageTemplates.Expressions, line 155, in _eval
Module zope.tales.expressions, line 124, in _eval
Module Products.PageTemplates.Expressions, line 105, in trustedBoboAwareZopeTraverse
Module zope.traversing.adapters, line 164, in traversePathElement
- __traceback_info__: (<Products.Five.viewlet.metaconfigure.MyFormWrapper object at 0xe4c36cc>, 'contents')
Module zope.traversing.adapters, line 52, in traverse
- __traceback_info__: (<Products.Five.viewlet.metaconfigure.MyFormWrapper object at 0xe4c36cc>, 'contents', [])
TraversalError: (<Products.Five.viewlet.metaconfigure.MyFormWrapper object at 0xe4c36cc>, 'contents')
Further Information:
I pinned p4a.video to version 1.1, the buildout was pulling in 1.3. p4a.video was not compatible with older versions of hachoir packages, I needed at least the 1.2.1 packages before my instances would start properly. My versions section of my buildout configuration now includes the following.
But it seems to be related to plone.app.z3cform
extends =
...
http://good-py.appspot.com/release/plone.app.z3cform/0.4.9?plone=3.3.6
[versions]
p4a.plonevideoembed = 1.1
p4a.video = 1.1
hachoir-core = 1.2.1
hachoir-metadata = 1.2.1
hachoir-parser = 1.2.1
How I’ve been going about this:
- In general it has been very useful to launch my instance in foreground mode for troubleshooting (bin/instance fg).
- http://good-py.appspot.com is an absolute life saver on this to pin versions (there was no option to pin for plone.app.z3cform 0.4.3, but 0.4.9 was close enough. As a result I still had to explicitly pin 0.4.3 in the [versions] section of my buildout.
To answer my own question.
The issue was related to a viewlet, associated with the view that I was trying to access.
The viewlet references a custom z3c.form in a template called ‘assessment_input’ hence this part of the traceback:
I know this for sure because when I temporarily disabled the offending viewlet by commenting it out in the browser/configure.zcml of my custom product the view began to work (without showing the viewlet of course).
The way that a z3c.form based form is rendered in plone changed in version 0.5.8 of plone.z3cform and greater(this is documented here: https://dev.plone.org/ticket/10022), in versions of plone.z3cform prior to 0.5.8, it used to be possible to render the form by calling “view/contents” in the viewlet template. The traceback implies that the newer plone.z3cform (which doesn’t support the “view/contents” convention) was causing the error.
The fix required that I pin my version of plone.z3cform to 0.5.7 in my buildout
As mentioned in the question I pinned the version of plone.app.z3cform 0.4.9 using a good-py known good set (KGS), I think this is necessary but haven’t absolutely tested it.
This is a good enough solution for now, moving forward I will need to rewrite my viewlet for newer versions of my product so that when I upgrade to Plone 4.x the viewlet supports plone.z3cform’s newer, and arguably better, approach of rendering the forms.