[Zope3-Users] ComponentLookupError
Jachin Rupe
jachin at voltzsoftware.com
Thu May 11 13:12:18 EDT 2006
hi there
here's a smaller, hopefully more clearer example of a problem I have
been stuck on. I should probably also lead off by saying that I
think what I am asking is basically this question.
http://www.mail-archive.com/zope3-users@zope.org/msg00052.html
However I have read objectwidget.txt( http://svn.zope.org/Zope3/trunk/
src/zope/app/form/browser/objectwidget.txt ) several times and I
don't see where a "custom widget" gets created. I also suspect that
because the "object" I need to create a custom widget for has more
than just one field I have to do something different.
If there's a short fix for the problem that would be great, otherwise
a little explanation to point me in the right direction would be
greatly appreciated too.
thanks.
-jachin
Here's the error I'm getting any my code:
2006-05-11T11:56:47 ERROR SiteError http://localhost:8080/@@+/
action.html
Traceback (most recent call last):
File "/usr/local/Zope-3.2.1/lib/python/zope/publisher/publish.py",
line 138, in publish
result = publication.callObject(request, object)
File "/usr/local/Zope-3.2.1/lib/python/zope/app/publication/
zopepublication.py", line 161, in callObject
return mapply(ob, request.getPositionalArguments(), request)
File "/usr/local/Zope-3.2.1/lib/python/zope/publisher/publish.py",
line 113, in mapply
return debug_call(object, args)
File "/usr/local/Zope-3.2.1/lib/python/zope/publisher/publish.py",
line 119, in debug_call
return object(*args)
File "/usr/local/Zope-3.2.1/lib/python/zope/app/container/browser/
adding.py", line 128, in action
name=view_name) is not None:
File "/usr/local/Zope-3.2.1/lib/python/zope/component/
__init__.py", line 165, in queryMultiAdapter
return sitemanager.queryMultiAdapter(objects, interface, name,
default)
File "/usr/local/Zope-3.2.1/lib/python/zope/component/site.py",
line 75, in queryMultiAdapter
default)
File "/usr/local/Zope-3.2.1/lib/python/zope/interface/adapter.py",
line 475, in queryMultiAdapter
return factory(*objects)
File "/usr/local/Zope-3.2.1/lib/python/zope/app/form/browser/
editview.py", line 64, in __init__
self._setUpWidgets()
File "/usr/local/Zope-3.2.1/lib/python/zope/app/form/browser/
add.py", line 49, in _setUpWidgets
setUpWidgets(self, self.schema, IInputWidget,
names=self.fieldNames)
File "/usr/local/Zope-3.2.1/lib/python/zope/app/form/utility.py",
line 153, in setUpWidgets
context=context)
File "/usr/local/Zope-3.2.1/lib/python/zope/app/form/utility.py",
line 97, in setUpWidget
widget = _createWidget(context, field, viewType, view.request)
File "/usr/local/Zope-3.2.1/lib/python/zope/app/form/utility.py",
line 65, in _createWidget
return zapi.getMultiAdapter((field, request), viewType)
File "/usr/local/Zope-3.2.1/lib/python/zope/component/
__init__.py", line 154, in getMultiAdapter
raise ComponentLookupError(objects, interface, name)
ComponentLookupError: ((<zope.schema._field.Object object at
0x4282b70>, <zope.publisher.browser.BrowserRequest instance
URL=http://localhost:8080/@@+/action.html>), <InterfaceClass
zope.app.form.interfaces.IInputWidget>, u'')
127.0.0.1 - - [11/May/2006:11:56:47 -0500] "GET /@@+/action.html?
type_name=AddPerson.html HTTP/1.1" 500 84 "http://localhost:8080/
@@contents.html" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-
US; rv:1.8.0.3) Gecko/20060427 Camino/1.0.1"
------------interfaces.py----------------
from zope.interface import Interface
import zope.schema
class IStreetAddress(Interface):
"""A vine street address"""
street = zope.schema.Text (
title=u"Street 1",
description=u"The street address",
required = False
)
city = zope.schema.TextLine (
title=u"City",
description=u"The city.",
required = False
)
state = zope.schema.TextLine (
title=u"State",
description=u"The state.",
required = False
)
zipcode = zope.schema.TextLine (
title=u"Zip Code",
description=u"The zip code",
required = False,
min_length = 5
)
class IPerson(Interface):
firstName = zope.schema.TextLine (
title=u"First Name",
description=u"The person's first name",
required=False
)
lastName = zope.schema.TextLine (
title=u"Last Name",
description=u"The person's last name",
required=False
)
address = zope.schema.Object (
title=u"Address",
description=u"The person's adderess",
required=False,
schema = IStreetAddress
)
------------person.py----------------
from persistent import Persistent
from zope.interface import implements
from abook.interfaces import IPerson
from abook.streetAddress import StreetAddress
class Person(Persistent):
implements(IPerson)
firstName = u""
lastName = u""
address = StreetAddress()
------------configure.zcml------------
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:i18n="http://namespaces.zope.org/i18n"
i18n_domain="abook">
<!-- Person -->
<interface
interface = ".interfaces.IPerson"
type = "zope.app.content.interfaces.IContentType"
/>
<content class = ".person.Person">
<factory
id = "simple_abook.person.Person"
description = "A Person"
/>
<require
permission = "zope.View"
interface = ".interfaces.IPerson"
/>
<require
permission = "zope.View"
set_schema = ".interfaces.IPerson"
/>
</content>
<browser:addform
label = "Add a Person"
fields = "firstName lastName address"
name = "AddPerson.html"
schema = ".interfaces.IPerson"
content_factory = ".person.Person"
permission = "zope.View"
/>
<browser:editform
label = "Edit a Person"
schema = ".interfaces.IPerson"
for = ".interfaces.IPerson"
fields = "firstName lastName address"
name = "edit.html"
permission = "zope.View"
menu = "zmi_views"
title = "Edit"
/>
<browser:addMenuItem
title = "A Person"
description = "Add a Person"
view = "AddPerson.html"
class = ".person.Person"
permission = "zope.View"
/>
</configure>
More information about the Zope3-users
mailing list