Re : Re : [Zope3-Users] formlib problem
Hi, when I use formlib the traditional way (registering the page via ZCML, going to it via the ZMI), everything works fine. The problem is I can't access it programatically. The thing I try to do is : - call a method via JSON RPC (by the way jsonserver is great ;-)) - in this method I get my object (through sqlos, which is nice too ;-)) and then call the formlib class to render my page in html - send back the html which is used to update my page. Has anyone tried to use formlib this way, I really need to use AJAX and it seems that I can't have both working together, I must be missing something. Thanks, Stéphane - Message d'origine De : Stéphane Brault [EMAIL PROTECTED] À : zope3-users@zope.org Envoyé le : Mardi, 18 Avril 2006, 4h16mn 55s Objet : Re : [Zope3-Users] formlib problem Thanks Michael, There is indeed something missing : ComponentLookupError: (( zope.schema._bootstrapfields.Int object at 0x01A83610 , zope.publisher.browser.TestRequest instance URL=http://127.0.0.1 ), InterfaceClass zope.app.form.interfaces.IDisplayWidget , u'') My problem has nothing to do with containers, since my interface is not a container. It seems that zope can't find the adapters for the shema fields, even when I register them by code. I really don't know what to do from now. The fact is I use AJAX, so I don't need to register my views, I just call them from code to use the generated html as a response to a javascript call that then update my page. Thanks, Stéphane - Message d'origine De : Michael Howitz [EMAIL PROTECTED] À : Stéphane Brault [EMAIL PROTECTED] Cc : user-list zope zope3-users@zope.org Envoyé le : Mardi, 18 Avril 2006, 3h40mn 16s Objet : Re: [Zope3-Users] formlib problem Stéphane Brault wrote: Hi, I can't use formlib, when I run the example in the form.txt I get this error: Traceback (most recent call last): File pyshell#29, line 1, in -toplevel- print MyForm(None, request)() File pyshell#26, line 6, in __call__ widgets = form.setUpWidgets(self.form_fields, 'form', self.context, self.request, ignore_request= ignore_request) File C:\Python24\Lib\site-packages\zope\formlib\form.py, line 255, in setUpWidgets IInputWidget) File C:\Python24\Lib\site-packages\zope\component\__init__.py, line 154, in getMultiAdapter raise ComponentLookupError(objects, interface, name) ComponentLookupError: ((, http://127.0.0.1), , u'') There seems to be something missing before , http... ... did you copy it form the browser output? It happens when setUpWidgets is called in the first example, do I need to import something or to configure a component for formlib to work ? Any hint ? Guess out of the dust: does the interface of the object you want to display have a zope.app.container.constraints.containers directive? This thread seems similar to your problem. http://mail.zope.org/pipermail/zope3-users/2006-March/002802.html HTH, mac ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: Re : [Zope3-Users] formlib problem
Stéphane Brault wrote: Hi again, sorry to be a bore ;-) I keep on trying to use formlib, I no longer have a problem of adapters for my fields but I get this error: 2006-04-19T16:13:32 ERROR root C:\Python24\Lib\site-packages\zope\publisher\publish.py line 138 in publish = 'result = publication.callObject(request, object)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\app\publication\zopepublication.py line 161 in callObject = 'return mapply(ob, request.getPositionalArguments(), request)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\publisher\publish.py line 113 in mapply = 'return debug_call(object, args)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\publisher\publish.py line 119 in debug_call = 'return object(*args)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) c:\ZopeInst\lib\python\neteven\database\items.py line 43 in getItemEdit = 'return ItemsForm(item, self.request).render()' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\formlib\form.py line 733 in render = 'self.form_result = self.template()' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\app\pagetemplate\viewpagetemplatefile.py line 83 in __call__ = 'return self.im_func(im_self, *args, **kw)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\app\pagetemplate\viewpagetemplatefile.py line 51 in __call__ = sourceAnnotations=getattr(debug_flags, 'sourceAnnotations', 0), ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\pagetemplate\pagetemplate.py line 117 in pt_render = 'strictinsert=0, sourceAnnotations=sourceAnnotations)()' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 277 in __call__ = 'self.interpret(self.program)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in interpret = 'handlers[opcode](self, args)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceCla ss zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 878 in do_defineMacro = 'self.interpret(macro)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in interpret = 'handlers[opcode](self, args)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 926 in do_extendMacro = 'definingName, extending)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 908 in do_useMacro = 'self.interpret(macro)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in interpret = 'handlers[opcode](self, args)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 538 in do_optTag_tal = 'self.do_optTag(stuff)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 523 in do_optTag = 'return self.no_tag(start, program)' ** exceptions.TypeError: ('Could not adapt', Items at 0x3d7ce30, InterfaceClass zope.app.traversing.interfaces.IPhysicallyLocatable) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 518 in no_tag = 'self.interpret(program)' ** exceptions.TypeError:
Re: Re : Re : [Zope3-Users] formlib problem
Stéphane Brault wrote: Hi Jim, the Items object is my object, linked to my items, table which implements the IItems interface I use for my form: from neteven.interfaces.items import IItems from zope.formlib import form class ItemsForm(form.EditForm): form_fields = form.Fields(IItems) form_fields = form_fields.omit('dateLastUpdate') Items is defined this way: from zope.interface import implements from sqlobject import * from sqlos import SQLOS from neteven.interfaces.items import IItems class Items(SQLOS): implements(IItems) class sqlmeta: table = 'items' When I add this zcml declaration : browser:page for=.interfaces.items.IItems name=edit.html class=.forms.items.ItemsForm menu=zmi_views title=Edit a Item permission=zope.ManageContent / everything works fine from the ZMI (I created simple containers to test that). My JSON server side code is: def getItemEdit(self, itemId): item = Items.get(itemId) #a sqlos function to get an Item instance from the table given its Id return ItemsForm(item, self.request)() The fact is I don't use any page template right now ( though I might do this later to have a nice GUI). Actually, you are using a page template. Calling ItemsForm() invokes the render() method of zope.formlib.form.FormBase, which uses pageform.pt in the zope.formlib folder by default. This is where title_or_id is requested. You may wish to set a different template for your ItemsForm class. Have you tried subclassing form.SubPageEditForm instead of form.EditForm? -Jim Washington ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: FW: Re : Re : [Zope3-Users] formlib problem
Stéphane, i'm working on what sounds to be a pretty much identical issue currently... i'm attempting to use formlib and jsonserver. i've been throwing around a number of possible solutions, but none that i'm comfortable with so far. i agree, i don't know how to access my form.Form class programmatically, but i don't want to sacrifice all the utility provided me by formlib (errors, checking of invariants, etc, etc). i've considered having my exposed json-rpc methods pull in the params explicitly, and then wrap them back up into formlib-style data (if it's possible, i haven't had a chance to try yet), and then use the handleSubmit and applyChanges logic out of formlib directly. but i'm not happy with that solution. i would like to find a way to build my forms agnostic of how they're to be used, and associate jsonrpc:view's to a particular content area that can access the forms i've displayed. i've been really happy with the ability to build formlib forms into viewlets, and use them where/how i want... but if that keeps them from being ajax-y accessible, it will present a significant hurdle :\ if anyone has any suggestions, or has solved this kind of problem before, i'd really appreciate pointers. if i stumble across anything that seems useful, i'll post it back out. Pete -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Stéphane Brault Sent: Wednesday, April 19, 2006 10:05 AM To: user-list zope Subject: Re : Re : [Zope3-Users] formlib problem Hi, when I use formlib the traditional way (registering the page via ZCML, going to it via the ZMI), everything works fine. The problem is I can't access it programatically. The thing I try to do is : - call a method via JSON RPC (by the way jsonserver is great ;-)) - in this method I get my object (through sqlos, which is nice too ;-)) and then call the formlib class to render my page in html - send back the html which is used to update my page. Has anyone tried to use formlib this way, I really need to use AJAX and it seems that I can't have both working together, I must be missing something. Thanks, Stéphane - Message d'origine De : Stéphane Brault [EMAIL PROTECTED] À : zope3-users@zope.org Envoyé le : Mardi, 18 Avril 2006, 4h16mn 55s Objet : Re : [Zope3-Users] formlib problem Thanks Michael, There is indeed something missing : ComponentLookupError: (( zope.schema._bootstrapfields.Int object at 0x01A83610 , zope.publisher.browser.TestRequest instance URL=http://127.0.0.1 ), InterfaceClass zope.app.form.interfaces.IDisplayWidget , u'') My problem has nothing to do with containers, since my interface is not a container. It seems that zope can't find the adapters for the shema fields, even when I register them by code. I really don't know what to do from now. The fact is I use AJAX, so I don't need to register my views, I just call them from code to use the generated html as a response to a javascript call that then update my page. Thanks, Stéphane - Message d'origine De : Michael Howitz [EMAIL PROTECTED] À : Stéphane Brault [EMAIL PROTECTED] Cc : user-list zope zope3-users@zope.org EnvoyÃ(c) le : Mardi, 18 Avril 2006, 3h40mn 16s Objet : Re: [Zope3-Users] formlib problem Stéphane Brault wrote: Hi, I can't use formlib, when I run the example in the form.txt I get this error: Traceback (most recent call last): File pyshell#29, line 1, in -toplevel- print MyForm(None, request)() File pyshell#26, line 6, in __call__ widgets = form.setUpWidgets(self.form_fields, 'form', self.context, self.request, ignore_request= ignore_request) File C:\Python24\Lib\site-packages\zope\formlib\form.py, line 255, in setUpWidgets IInputWidget) File C:\Python24\Lib\site-packages\zope\component\__init__.py, line 154, in getMultiAdapter raise ComponentLookupError(objects, interface, name) ComponentLookupError: ((, http://127.0.0.1), , u'') There seems to be something missing before , http... ... did you copy it form the browser output? It happens when setUpWidgets is called in the first example, do I need to import something or to configure a component for formlib to work ? Any hint ? Guess out of the dust: does the interface of the object you want to display have a zope.app.container.constraints.containers directive? This thread seems similar to your problem. http://mail.zope.org/pipermail/zope3-users/2006-March/002802.html HTH, mac ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users -- All guilt is relative, loyalty counts, and never let your conscience be your guide. - Lucas Buck, American Gothic