[Zope3-Users] Two content objects' simultaneous adding
baiju m
baiju.m.mail at gmail.com
Sat May 20 04:47:49 EDT 2006
I have two content objects (both are containers) but I cannot add one
to another as give here :
def create(self, data):
square = Square()
square.name = data['name']
square.description = data['description']
company = Company()
company.name = data['companyname']
company.description = data['companydescription']
square['Comp1'] = company
...
return square
It was working in 3.2, now NotYet error is coming in 3.3. Here is the traceback:
2006-05-20T11:07:46 ERROR SiteError http://192.168.1.10:8080/+/AddSquare.html%3D
Traceback (most recent call last):
File "/megadisk/zopy/z33/lib/python/zope/publisher/publish.py", line
133, in publish
result = publication.callObject(request, obj)
File "/megadisk/zopy/z33/lib/python/zope/app/publication/zopepublication.py",
line 161, in callObject
return mapply(ob, request.getPositionalArguments(), request)
File "/megadisk/zopy/z33/lib/python/zope/publisher/publish.py", line
108, in mapply
return debug_call(obj, args)
- __traceback_info__: <security proxied
zope.app.pagetemplate.simpleviewclass.SimpleViewClass from
/megadisk/zopy/tzope/lib/python/websquare/browser/squareform.pt
instance at 0x41b6402c>
File "/megadisk/zopy/z33/lib/python/zope/publisher/publish.py", line
114, in debug_call
return obj(*args)
File "/megadisk/zopy/z33/lib/python/zope/formlib/form.py", line 746,
in __call__
self.update()
File "/megadisk/zopy/z33/lib/python/zope/formlib/form.py", line 727, in update
result = action.success(data)
File "/megadisk/zopy/z33/lib/python/zope/formlib/form.py", line 577,
in success
return self.success_handler(self.form, self, data)
File "/megadisk/zopy/z33/lib/python/zope/formlib/form.py", line 837,
in handle_add
self.createAndAdd(data)
File "/megadisk/zopy/z33/lib/python/zope/formlib/form.py", line 842,
in createAndAdd
ob = self.create(data)
File "/extra/myzope/lib/python/websquare/browser/squareform.py",
line 37, in create
square['Comp1'] = company
File "/megadisk/zopy/z33/lib/python/zope/app/container/sample.py",
line 86, in __setitem__
setitem(self, self.__data.__setitem__, key, object)
File "/megadisk/zopy/z33/lib/python/zope/app/container/contained.py",
line 593, in setitem
notify(event)
File "/megadisk/zopy/z33/lib/python/zope/event/__init__.py", line
23, in notify
subscriber(event)
File "/megadisk/zopy/z33/lib/python/zope/component/event.py", line
26, in dispatch
for ignored in zope.component.subscribers(event, None):
File "/megadisk/zopy/z33/lib/python/zope/component/_api.py", line
130, in subscribers
return sitemanager.subscribers(objects, interface)
File "/megadisk/zopy/z33/lib/python/zope/component/registry.py",
line 292, in subscribers
return self.adapters.subscribers(objects, provided)
File "/megadisk/zopy/z33/lib/python/zope/interface/adapter.py", line
535, in subscribers
subscription(*objects)
File "/megadisk/zopy/z33/lib/python/zope/component/event.py", line
33, in objectEventNotify
adapters = zope.component.subscribers((event.object, event), None)
File "/megadisk/zopy/z33/lib/python/zope/component/_api.py", line
130, in subscribers
return sitemanager.subscribers(objects, interface)
File "/megadisk/zopy/z33/lib/python/zope/component/registry.py",
line 292, in subscribers
return self.adapters.subscribers(objects, provided)
File "/megadisk/zopy/z33/lib/python/zope/interface/adapter.py", line
535, in subscribers
subscription(*objects)
File "/megadisk/zopy/z33/lib/python/zope/app/intid/__init__.py",
line 161, in addIntIdSubscriber
key = IKeyReference(ob, None)
File "/megadisk/zopy/z33/lib/python/zope/app/component/hooks.py",
line 96, in adapter_hook
return siteinfo.adapter_hook(interface, object, name, default)
File "/megadisk/zopy/z33/lib/python/zope/security/adapter.py", line
88, in __call__
adapter = self.factory(*args)
File "/megadisk/zopy/z33/lib/python/zope/app/keyreference/persistent.py",
line 41, in __init__
raise zope.app.keyreference.interfaces.NotYet(object)
NotYet: <websquare.square.company.Company object at 0x41b6016c>
I tried to override CreateAndAdd like this:
def createAndAdd(self, data):
square = Square()
square.name = data['name']
square.description = data['description']
event.notify(ObjectCreatedEvent(square))
square = self.context.add(square)
self._finished_add = True
company = Company()
company.name = data['companyname']
company.description = data['companydescription']
chooser = INameChooser(square)
name = chooser.chooseName('Company', company)
square[name] = company
...
return square
And this worked, but is it necessary to override createAndAdd for this?
(INameChooser could have been used in the earlier case also)
Thanks,
Baiju M
More information about the Zope3-users
mailing list