Hi,

I don't know how to get the renderers in zope.app.renderer.
getMultiAdapter fails with a ComponentLookupError. Here is a minimal
example driven by the debugger:

    (zope-sandbox)[EMAIL PROTECTED]:~/tools/quotationtool$
bin/quotationtool-debug
    ...
    >>> import zope.interface
    >>> import zope.component
    >>> import zope.app.renderer
Get a factory for plaintext sources
    >>> source_factory =
zope.component.getUtility(zope.component.interfaces.IFactory, name =
'zope.source.plaintext')
    >>> source_factory
    <zope.app.renderer.SourceFactory object at 0xb68b9b2c>
    >>> list(source_factory.getInterfaces())
    [<InterfaceClass zope.app.renderer.plaintext.IPlainTextSource>,
<InterfaceClass zope.app.renderer.interfaces.ISource>, <InterfaceClass
zope.interface.Interface>]
We have the factory. That even means that zope.app.renderer is
configured (registered).
Now let's make a source object.
    >>> text = u"Hello World!\nZope is cool..."
    >>> source = source_factory(text)
    >>> source
    u'Hello World!\nZope is cool...'
    >>> list(zope.interface.providedBy(source))
    [<InterfaceClass zope.app.renderer.plaintext.IPlainTextSource>]
    >>> list(zope.interface.directlyProvidedBy(source))
    [<InterfaceClass zope.app.renderer.plaintext.IPlainTextSource>]
It's a Source object with a IPlainTextSource interfaces directly slammed on
Now let's try to get the renderer
    >>> from zope.testbrowser.browser import Browser
    >>> request = Browser()
    >>> request
    <zope.testbrowser.browser.Browser object at 0xb74e308c>
    >>> renderer = zope.component.getMultiAdapter((source, request),
zope.app.renderer.interfaces.IHTMLRenderer, name='')
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File
"/home/clueck/.buildout-eggs/tmpyxUXwG/zope.component-3.4.0-py2.5.egg/zope/component/_api.py",
line 103, in getMultiAdapter
    ComponentLookupError: ((u'Hello World!\nZope is cool...',
<zope.testbrowser.browser.Browser object at 0xb74e308c>),
<InterfaceClass zope.app.renderer.interfaces.IHTMLRenderer>, '')
Damn it!
    >>> renderer = zope.component.getMultiAdapter((source, request),)
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File
"/home/clueck/.buildout-eggs/tmpyxUXwG/zope.component-3.4.0-py2.5.egg/zope/component/_api.py",
line 103, in getMultiAdapter
    ComponentLookupError: ((u'Hello World!\nZope is cool...',
<zope.testbrowser.browser.Browser object at 0xb74e308c>),
<InterfaceClass zope.interface.Interface>, u'')
    >>> from zope.publisher.interfaces.browser import IBrowserView
    >>> renderer = zope.component.getMultiAdapter((source, request),
IBrowserView, name='')
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File
"/home/clueck/.buildout-eggs/tmpyxUXwG/zope.component-3.4.0-py2.5.egg/zope/component/_api.py",
line 103, in getMultiAdapter
    ComponentLookupError: ((u'Hello World!\nZope is cool...',
<zope.testbrowser.browser.Browser object at 0xb74e308c>),
<InterfaceClass zope.publisher.interfaces.browser.IBrowserView>, '')
Does a proxy cause this?
    >>> from zope.security.proxy import removeSecurityProxy
    >>> renderer =
zope.component.getMultiAdapter((removeSecurityProxy(source), request),
IBrowserView, name='')
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File
"/home/clueck/.buildout-eggs/tmpyxUXwG/zope.component-3.4.0-py2.5.egg/zope/component/_api.py",
line 103, in getMultiAdapter
    ComponentLookupError: ((u'Hello World!\nZope is cool...',
<zope.testbrowser.browser.Browser object at 0xb74e308c>),
<InterfaceClass zope.publisher.interfaces.browser.IBrowserView>, '')
    >>> from zope.proxy import removeAllProxies
    >>> renderer =
zope.component.getMultiAdapter((removeAllProxies(source), request),
IBrowserView, name = '')
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File
"/home/clueck/.buildout-eggs/tmpyxUXwG/zope.component-3.4.0-py2.5.egg/zope/component/_api.py",
line 103, in getMultiAdapter
    ComponentLookupError: ((u'Hello World!\nZope is cool...',
<zope.testbrowser.browser.Browser object at 0xb74e308c>),
<InterfaceClass zope.publisher.interfaces.browser.IBrowserView>, '')
    >>>

What's the problem with that? The adapter query should consider directly
provided interfaces, too, shouldn't it?

The renderers (for plaintext, rest and stx) are configured as
BrowserViews, aren't they?

Regards,
Christian
_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to