[Zope3-Users] zmi menu error

john saponara john at saponara.net
Mon Jan 14 09:24:45 EST 2008


I get reasonable edit screens for my car and driver classes when I use a 
url like "limoService/car1/edit.html" but when I try to add the edit 
screens as zmi menu entries I get an error:

   File 
"C:\Python24\Lib\site-packages\zope\app\publisher\browser\menu.py", line 
62, in getMenuItems
     result = [(ifaces.index(item._for or Interface),
ValueError: list.index(x): x not in list

The complete call stack is in the attached error.txt.  I'm using v3.3.1 
under winxpprosp2.  What am I doing wrong?

Thanks,
John

-------------- next part --------------
<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser"
	i18n_domain="limoService"
	>
	
  <interface
      interface=".interfaces.ICar"
      type="zope.app.content.interfaces.IContentType"
      />
  <interface
      interface=".interfaces.IDriver"
      type="zope.app.content.interfaces.IContentType"
      />

  <class class=".classes.Car">
    <implements
        interface="zope.annotation.interfaces.IAttributeAnnotatable"
        />
    <factory
        id="limoService.classes.Car"
        description="a car" 
        />
    <require
        permission="zope.Public"
        interface=".interfaces.ICar"
        />
    <require
        permission="zope.ManageContent"
        set_schema=".interfaces.ICar"
        />
  </class>
  <class class=".classes.Driver">
    <implements
        interface="zope.annotation.interfaces.IAttributeAnnotatable"
        />
    <factory
        id="limoService.classes.Driver"
        description="a driver" 
        />
    <require
        permission="zope.Public"
        interface=".interfaces.IDriver"
        />
    <require
        permission="zope.ManageContent"
        set_schema=".interfaces.IDriver"
        />
  </class>

  <browser:addMenuItem
      class=".classes.Car"
      title="a car"
      permission="zope.ManageContent"
      description="add Car"
  />
  <browser:addMenuItem
      class=".classes.Driver"
      title="a driver"
      permission="zope.ManageContent"
      description="add Driver"
  />

  <browser:page
    for="zope.app.container.interfaces.IAdding"
    name="newdriver"
    class=".classes.DriverAddForm"
    permission="zope.ManageContent"
	menu="zmi_views" title="newdriver"
    />


  <browser:page
      for=".classes.Car"
      name="index.html"
      class=".classes.CarView"
      permission="zope.Public"
	  template="read.pt"
	  menu="zmi_views" title="view"
      />
  <browser:page
      for=".classes.Driver"
      name="index.html"
      class=".classes.DriverView"
      permission="zope.Public"
	  template="read.pt"
	  menu="zmi_views" title="view"
      />

  <browser:page
      for=".interfaces.ICar"
      name="edit.html"
      class=".classes.CarEdit"
      permission="zope.ManageContent"
      template="edit.pt"
	  menu="zmi_views" title="edit"
      />
  <browser:page
      for=".interfaces.IDriver"
      name="edit.html"
      class=".classes.DriverEdit"
      permission="zope.ManageContent"
      template="edit.pt"
	  menu="zmi_views" title="edit"
	  />

  <utility
      provides="zope.schema.interfaces.IVocabularyFactory"
      component=".classes.carsInParent"
      name="allCars"
      />

  <interface
      interface=".interfaces.ILimoservice"
      type="zope.app.content.interfaces.IContentType"
      />
  
  <class class=".classes.Limoservice">
    <implements
        interface="zope.app.annotation.interfaces.IAttributeAnnotatable"
        />
    <implements
        interface="zope.app.container.interfaces.IContentContainer" 
        />
    <factory
        id="limoService.classes.Limoservice"
        description="Limoservice" 
        />
    <require
        permission="zope.ManageContent"
        interface=".interfaces.ILimoservice"
        />
    <require
        permission="zope.ManageContent"
        set_schema=".interfaces.ILimoservice"
        />
  </class>
  
  <browser:addMenuItem
      class=".classes.Limoservice"
      title="Limoservice"
      permission="zope.ManageContent"
  />
  <browser:containerViews
      for="limoService.interfaces.ILimoservice"
      index="zope.View"
      contents="zope.View"
      add="zope.ManageContent"
      />

  </configure>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zope3-users/attachments/20080114/fcfc6cd2/edit.htm
-------------- next part --------------

from zope.interface import Interface
from zope.schema import Field, Text, TextLine, Choice, Int, Bool, Date, Datetime, Object
from zope.schema.vocabulary import SimpleVocabulary

from zope.app.container.constraints import ContainerTypesConstraint
from zope.app.container.constraints import ItemTypePrecondition
from zope.app.container.interfaces import IContained, IContainer

class ICar(Interface):
	model = TextLine(
		title = u'model',
		description = u'model',
		default = u'',
		required = False)
	nPassengers = Int(
		title = u'nPassengers',
		description = u'nPassengers',
		default = 0,
		required = False)

class IDriver(Interface):
	car = Choice(
		title = u'car',
		description = u'car',
		default = None,
		source = 'allCars',
		required = False)

class ILimoservice(IContainer):
	'''container for items of type ICar, IDriver'''
	name = TextLine(
		title=u'Limoservice',
		description=u'a Limoservice container',
		default=u'',
		required=True)
	def __setitem__(name, obj): pass 
	__setitem__.precondition = ItemTypePrecondition(ICar, IDriver)

class ILimoserviceContained(IContained):
	'''for types that can only be contained in a Limoservice'''
	__parent__ = Field(constraint = ContainerTypesConstraint(ILimoservice))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zope3-users/attachments/20080114/fcfc6cd2/read.htm
-------------- next part --------------

from zope.app import zapi
from zope.interface import implements
from zope.app.container.btree import BTreeContainer
from zope.app.container.contained import Contained
# from persistent import Persistent

from interfaces import ICar, IDriver, ILimoservice, ILimoserviceContained

class Car(Contained):
	implements(ICar,ILimoserviceContained)
	model=u''
	nPassengers=0

class Driver(Contained):
	implements(IDriver,ILimoserviceContained)
	car=None

class Limoservice(BTreeContainer):
	implements(ILimoservice)

class CarView(object):
    def message(self):
        return 'car model %s holds %d passengers' % (self.context.model, self.context.nPassengers)
class DriverView(object):
	def message(self):
		if self.context.car:
			car=self.context.car
			msg='driver drives car model %s, can carry %d passengers' % (car.model,car.nPassengers)
		else:
			print 'driver has no car!'
			msg='no car info'
		return msg

from zope.formlib import form
class CarEdit(form.EditForm):
	form_fields = form.Fields(ICar)
class DriverEdit(form.EditForm):
	form_fields = form.Fields(IDriver)

class DriverAddForm(form.AddForm):
	form_fields = form.Fields(IDriver)

from zope.schema.vocabulary import SimpleVocabulary
def carsInParent(context):
    '''returns child cars __name__ for subobjects of parent as a vocabulary'''
    return SimpleVocabulary.fromItems(
        [(k, v) for k, v in context.__parent__.items() if ICar.providedBy(v)])

-------------- next part --------------
2008-01-14T09:13:39 ERROR SiteError http://localhost:2020/mylimo/c1/@@SelectedManagementView.html
Traceback (most recent call last):
  File "C:\Python24\Lib\site-packages\zope\publisher\publish.py", line 133, in publish
    result = publication.callObject(request, obj)
  File "C:\Python24\Lib\site-packages\zope\app\publication\zopepublication.py", line 161, in callObject
    return mapply(ob, request.getPositionalArguments(), request)
  File "C:\Python24\Lib\site-packages\zope\publisher\publish.py", line 108, in mapply
    return debug_call(obj, args)
   - __traceback_info__: <security proxied zope.app.publisher.browser.viewmeta.ManagementViewSelector instance at 0x022384B0>
  File "C:\Python24\Lib\site-packages\zope\publisher\publish.py", line 114, in debug_call
    return obj(*args)
  File "C:\Python24\Lib\site-packages\zope\app\publisher\browser\managementviewselector.py", line 35, in __call__
    item = getFirstMenuItem('zmi_views', self.context, self.request)
  File "C:\Python24\Lib\site-packages\zope\app\publisher\browser\menu.py", line 181, in getFirstMenuItem
    items = getMenu(id, object, request)
  File "C:\Python24\Lib\site-packages\zope\app\publisher\browser\menu.py", line 176, in getMenu
    return menu.getMenuItems(object, request)
  File "C:\Python24\Lib\site-packages\zope\app\publisher\browser\menu.py", line 62, in getMenuItems
    result = [(ifaces.index(item._for or Interface),
ValueError: list.index(x): x not in list
127.0.0.1 - - [14/Jan/2008:09:13:39 -0400] "GET /mylimo/c1/@@SelectedManagementView.html HTTP/1.1" 500 84 "http://localhost:2020/mylimo/@@contents.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11"


More information about the Zope3-users mailing list