Skip to content
This repository was archived by the owner on Apr 23, 2026. It is now read-only.
This repository was archived by the owner on Apr 23, 2026. It is now read-only.

CSS / JS expression can lead to traceback in plone.resourceregistries viewlet #200

Description

@laulaz

We had a problem with this expression in CSS / JS conditions :
python:'configure_faceted.html' in request.URL0

We don't know exactly why, but we have edge cases where request is :
<HTTPRequest, URL=None>

thus leading to :
KeyError: 'SERVER_URL'

and the plone.resourceregistries failing to display, resulting in an unstyled website.

Would it be OK for you to change this expression (that's what we did on our sites) to :
python:'URL0' in request and 'configure_faceted.html' in request['URL0']

Thanks for your feedback !


Full related traceback :

2020-05-30 04:26:14 ERROR plone.app.viewletmanager Error while rendering viewlet-manager=plone.htmlhead, viewlet=plone.resourceregistries
Traceback (most recent call last):
  File "/Users/plone/.buildout/eggs/plone.app.viewletmanager-2.0.11-py2.7.egg/plone/app/viewletmanager/manager.py", line 112, in render
    html.append(viewlet.render())
  File "/Users/plone/.buildout/eggs/zope.browserpage-3.12.2-py2.7.egg/zope/browserpage/simpleviewclass.py", line 44, in __call__
    return self.index(*args, **kw)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/Products/Five/browser/pagetemplatefile.py", line 125, in __call__
    return self.im_func(im_self, *args, **kw)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/Products/Five/browser/pagetemplatefile.py", line 59, in __call__
    sourceAnnotations=getattr(debug_flags, 'sourceAnnotations', 0),
  File "/Users/plone/.buildout/eggs/zope.pagetemplate-3.6.3-py2.7.egg/zope/pagetemplate/pagetemplate.py", line 132, in pt_render
    strictinsert=0, sourceAnnotations=sourceAnnotations
  File "/Users/plone/.buildout/eggs/zope.pagetemplate-3.6.3-py2.7.egg/zope/pagetemplate/pagetemplate.py", line 240, in __call__
    interpreter()
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 271, in __call__
    self.interpret(self.program)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 343, in interpret
    handlers[opcode](self, args)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 533, in do_optTag_tal
    self.do_optTag(stuff)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 518, in do_optTag
    return self.no_tag(start, program)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 513, in no_tag
    self.interpret(program)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 343, in interpret
    handlers[opcode](self, args)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 531, in do_optTag_tal
    self.no_tag(stuff[-2], stuff[-1])
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 513, in no_tag
    self.interpret(program)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 343, in interpret
    handlers[opcode](self, args)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 742, in do_insertStructure_tal
    structure = self.engine.evaluateStructure(expr)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/Products/PageTemplates/Expressions.py", line 218, in evaluateStructure
    text = super(ZopeContext, self).evaluateStructure(expr)
  File "/Users/plone/.buildout/eggs/zope.tales-3.5.3-py2.7.egg/zope/tales/tales.py", line 696, in evaluate
    return expression(self)
  File "/Users/plone/.buildout/eggs/zope.contentprovider-3.7.2-py2.7.egg/zope/contentprovider/tales.py", line 80, in __call__
    return provider.render()
  File "/Users/plone/.buildout/eggs/zope.viewlet-3.7.2-py2.7.egg/zope/viewlet/manager.py", line 124, in render
    return self.template(viewlets=self.viewlets)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/Products/Five/browser/pagetemplatefile.py", line 125, in __call__
    return self.im_func(im_self, *args, **kw)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/Products/Five/browser/pagetemplatefile.py", line 59, in __call__
    sourceAnnotations=getattr(debug_flags, 'sourceAnnotations', 0),
  File "/Users/plone/.buildout/eggs/zope.pagetemplate-3.6.3-py2.7.egg/zope/pagetemplate/pagetemplate.py", line 132, in pt_render
    strictinsert=0, sourceAnnotations=sourceAnnotations
  File "/Users/plone/.buildout/eggs/zope.pagetemplate-3.6.3-py2.7.egg/zope/pagetemplate/pagetemplate.py", line 240, in __call__
    interpreter()
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 271, in __call__
    self.interpret(self.program)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 343, in interpret
    handlers[opcode](self, args)
  File "/Users/plone/.buildout/eggs/zope.tal-3.5.2-py2.7.egg/zope/tal/talinterpreter.py", line 819, in do_loop_tal
    iterator = self.engine.setRepeat(name, expr)
  File "/Users/plone/.buildout/eggs/zope.tales-3.5.3-py2.7.egg/zope/tales/tales.py", line 682, in setRepeat
    expr = self.evaluate(expr)
  File "/Users/plone/.buildout/eggs/zope.tales-3.5.3-py2.7.egg/zope/tales/tales.py", line 696, in evaluate
    return expression(self)
  File "/Users/plone/.buildout/eggs/zope.tales-3.5.3-py2.7.egg/zope/tales/expressions.py", line 217, in __call__
    return self._eval(econtext)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/Products/PageTemplates/Expressions.py", line 155, in _eval
    return render(ob, econtext.vars)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/Products/PageTemplates/Expressions.py", line 117, in render
    ob = ob()
  File "/Users/plone/.buildout/eggs/Products.ResourceRegistries-2.2.13-py2.7.egg/Products/ResourceRegistries/browser/styles.py", line 21, in styles
    styles = registry.getEvaluatedResources(context)
  File "/Users/plone/.buildout/eggs/Products.ResourceRegistries-2.2.13-py2.7.egg/Products/ResourceRegistries/tools/BaseRegistry.py", line 1054, in getEvaluatedResources
    return [item for item in results if self.evaluate(item, context)]
  File "/Users/plone/.buildout/eggs/Products.ResourceRegistries-2.2.13-py2.7.egg/Products/ResourceRegistries/tools/BaseRegistry.py", line 597, in evaluate
    return self.evaluateExpression(item.getCookedExpression(), context)
  File "/Users/plone/.buildout/eggs/Products.ResourceRegistries-2.2.13-py2.7.egg/Products/ResourceRegistries/tools/BaseRegistry.py", line 626, in evaluateExpression
    return expression(ec)
  File "/Users/plone/.buildout/eggs/Products.CMFCore-2.2.10-py2.7.egg/Products/CMFCore/Expression.py", line 47, in __call__
    res = compiled(econtext)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/Products/PageTemplates/ZRPythonExpr.py", line 48, in __call__
    return eval(self._code, vars, {})
  File "PythonExpr", line 1, in <expression>
  File "/Users/plone/.buildout/eggs/AccessControl-3.0.11-py2.7-macosx-10.13-x86_64.egg/AccessControl/ImplPython.py", line 675, in guarded_getattr
    v = getattr(inst, name)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/ZPublisher/HTTPRequest.py", line 1380, in __getattr__
    v = self.get(key, default, returnTaints=returnTaints)
  File "/Users/plone/.buildout/eggs/Zope2-2.13.28-py2.7.egg/ZPublisher/HTTPRequest.py", line 1274, in get
    path = [other['SERVER_URL']] + path[:n]
KeyError: 'SERVER_URL'

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions