[Zope3-Users] Question about menu.py
Simon Elbaz
elbazsimon9 at gmail.com
Wed Feb 4 10:51:15 EST 2009
Sorry if the mail content is a bit lengthy, but I need to put all the info.
In the following code, there are 2 render functions:
- one using the interface (ok)
- the other uses the utility (ko)
Here is the code snippet:
-----
class AMenuItem(menu.BrowserMenuItem):
grok.implements(IAMenuItem, IMenuItemType)
grok.provides(IMenuItemType)
grok.name('menuitem')
description = 'coucou'
def __init__(self, **kw):
self.kw = kw
def __call__(self, context, request):
super(menu.BrowserMenuItem, self).__init__(context, request)
grok.global_utility(AMenuItem)
class AMenuItemAdapter(grok.MultiAdapter):
grok.adapts(ICdcmenu, IBrowserRequest)
grok.implements(IAMenuItem)
title = 'hello'
description = 'toto'
def __init__(self, context, request):
self.context = context
self.request = request
class Index(grok.View):
grok.context(Cdcmenu)
a_menu = Menubar()
a_menu('toto', 'Titre toto', 'Toto est de retour')
id = 'menuitem'
def getMenuItemType(self):
return component.getUtility(IMenuItemType, self.id)
# this function render correctly
# def render(self):
# resultat = []
# for name, item in component.getAdapters((self.context,
self.request), IAMenuItem):
# resultat.append(item.description)
# return pformat(resultat)
# this function does not render correctly
def render(self):
resultat = []
for name, item in component.getAdapters((self.context,
self.request), self.getMenuItemType()):
resultat.append(item.description)
return pformat(resultat)
---
If I try to create a utility subclassing interface.Interface and
implementing IMenuItemType like this:
class OtherMenuItem(interface.Interface):
grok.implements(IAMenuItem, IMenuItemType)
I get the following error:
File
"/home/simon/.buildout/eggs/zope.interface-3.4.1-py2.4-linux-i686.egg/zope/interface/interface.py",
line 488, in __init__
raise InvalidInterface("Concrete attribute, " + name)
zope.configuration.xmlconfig.ZopeXMLConfigurationError: File
"/mnt/backup_software/virtualgrok/Menutest/etc/site.zcml", line 4.2-4.32
ZopeXMLConfigurationError: File
"/mnt/backup_software/virtualgrok/Menutest/src/menutest/configure.zcml",
line 5.2-5.27
InvalidInterface: Concrete attribute, __implements_advice_data__
Thanks for your help
Simon Elbaz
On Wed, Feb 4, 2009 at 2:37 AM, Dan Korostelev <nadako at gmail.com> wrote:
> 2009/2/4 Simon Elbaz <elbazsimon9 at gmail.com>:
> > When I look to the getMenuItemType() function, it returns a utility (
> > return zope.component.getUtility(IMenuItemType, self.id)) and the
> > consequence is that the adapter lookup returns nothing in getMenuItems.
>
> That's strange, because that IMenuItemType utility is the interface
> that the menu item adapters are registered as providing. It works as
> intended here in plain zope3. Can you provide some more info?
>
> --
> WBR, Dan Korostelev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zope3-users/attachments/20090204/83f46882/attachment-0001.html
More information about the Zope3-users
mailing list