David Bain gives a complete explanation at http://lists.plone.org/pipermail/product-developers/2007-October/000882.html
This is a straight copy-and-paste from that page. My comments below... ----- snippet --- I have some code that creates a simple folder. It seems that when invokeFactory is called via a "kss wrapper", the result is a 'could not adapt' error. Maybe I'm misinterpreting this, anyone familiar with this issue? Would love your assistance. I've included traceback and snippets of the original code, I figure that should help. Note: - that when the method is called directly or via a non-kss based method it works fine. - When called wrapped in a kss based method I get a 'could not adapt' error. the traceback when called from my KSS based method: 2007-10-23 07:46:06 ERROR Zope.SiteErrorLog http://localhost:8081/Plone/poleroll/my-roll/kss_do_stuff/do_stuff Traceback (innermost last): Module ZPublisher.Publish, line 119, in publish Module ZPublisher.mapply, line 88, in mapply Module ZPublisher.Publish, line 42, in call_object Module <wrapper>, line 5, in wrapper Module kss.core.actionwrapper, line 238, in apply Module Products.peopleroll.browser.dostuff, line 12, in do_stuff Module Products.peopleroll.content.organization, line 276, in do_the_stuff Module Products.CMFCore.PortalFolder, line 315, in invokeFactory Module Products.CMFCore.TypesTool, line 716, in constructContent Module Products.CMFCore.TypesTool, line 276, in constructInstance Module Products.CMFCore.TypesTool, line 450, in _constructInstance Module Products.ATContentTypes.content.folder, line 7, in addATFolder Module OFS.ObjectManager, line 348, in _setObject Module zope.app.container.contained, line 365, in notifyContainerModified Module zope.event, line 23, in notify Module zope.component.event, line 26, in dispatch Module zope.component._api, line 130, in subscribers Module zope.component.registry, line 290, in subscribers Module zope.interface.adapter, line 535, in subscribers Module kss.core.kssview, line 127, in _eventRedispatcher Module zope.component._api, line 130, in subscribers Module zope.component.registry, line 290, in subscribers Module zope.interface.adapter, line 535, in subscribers Module plone.app.kss.globalui, line 23, in attributesTriggerDocumentBylineReload Module kss.core.kssview, line 169, in getCommandSet TypeError: ('Could not adapt', <Products.Five.metaclass.DoTheStuff object at 0x6ca7470>, <InterfaceClass plone.app.kss.commands.interfaces.IZopeCommands >) The Original Method from a content type called an organization: ----snip--- security.declarePublic('do_the_stuff') def do_the_stuff(self,results, **kwargs): """ do stuff here """ dtnow = DateTime() year = str(DateTime.year(dtnow)) if year not in self.contentIds(): self.invokeFactory(id=year,title=year,type_name="Folder") ----snip--- The KSS class: from kss.core import KSSView, kssaction from Acquisition import aq_inner from datetime import datetime class DoTheStuff(KSSView): @kssaction def do_stuff(self, widgetid='blah', href='yah.com'): ksscore = self.getCommandSet('core') selector = ksscore.getHtmlIdSelector('organization-results') do_it = self.context.do_the_stuff output = do_it() ksscore.replaceInnerHTML(selector, '<h1>%s</h1>' % output) -------------- next part -------------- ----- snippet --- I have the exact same error when trying to call portal_membership.addMember during an ajax call. It seems that an event subscriber notifyContainerModified branches off into some code that updates the document byline via ajax. From globalui.py we have @component.adapter(None, IKSSView, IObjectModifiedEvent) def attributesTriggerDocumentBylineReload(obj, view, event): ksscore = view.getCommandSet('core') selector = ksscore.getHtmlIdSelector('plone-document-byline') zopecommands = view.getCommandSet('zope') zopecommands.refreshViewlet(selector, 'plone.belowcontenttitle', 'plone.belowcontenttitle.documentbyline') From kssview.py we have def getCommandSet(self, name): commandset = getRegisteredCommandSet(name) # return the adapted view return commandset.provides(self) getCommandSet successfully retrieves the core commandset, but the "could not adapt" error happens when trying to retrieve the zope commandset. At first I thought that the calling context must be wrong (the commandset.provides(self) bit), but how can that be? self is surely a view? So, bit stuck here. David Bain also received no replies. Anyone else have this issue? Hedley _______________________________________________ Kss-devel mailing list Kss-devel@codespeak.net http://codespeak.net/mailman/listinfo/kss-devel