Re : Re : Re : [Zope3-Users] formlib problem
Thanks Jim, I now get the page back with the right data. I now have to figure out how to have the actions work. I guess I'll have to ajaxify my page in order to pass the data and have the form do it's work. I'll let you know if I encounter further problems or if it works (hopefully). Stéphane - Message d'origine De : Jim Washington <[EMAIL PROTECTED]> À : Stéphane Brault <[EMAIL PROTECTED]> Cc : zope3-users@zope.org Envoyé le : Mercredi, 19 Avril 2006, 6h10mn 35s Objet : 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 : > 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 > 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 "", line 1, in -toplevel- > > print MyForm(None, request)() > >File "", 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.cont
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 : 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 : Re : [Zope3-Users] formlib problem
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 : 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). Thanks, Stéphane - Message d'origine De : Jim Washington <[EMAIL PROTECTED]> À : Stéphane Brault <[EMAIL PROTECTED]> Cc : zope3-users@zope.org Envoyé le : Mercredi, 19 Avril 2006, 5h01mn 09s Objet : 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', , > ) > 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', , > ) > C:\Python24\Lib\site-packages\zope\publisher\publish.py line 113 in mapply > => 'return debug_call(object, args)' > ** exceptions.TypeError: ('Could not adapt', , > ) > C:\Python24\Lib\site-packages\zope\publisher\publish.py line 119 in > debug_call > => 'return object(*args)' > ** exceptions.TypeError: ('Could not adapt', , > ) > c:\ZopeInst\lib\python\neteven\database\items.py line 43 in getItemEdit > => 'return ItemsForm(item, self.request).render()' > ** exceptions.TypeError: ('Could not adapt', , > ) > C:\Python24\Lib\site-packages\zope\formlib\form.py line 733 in render > => 'self.form_result = self.template()' > ** exceptions.TypeError: ('Could not adapt', , > ) > 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', , > ) > 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', , > ) > C:\Python24\Lib\site-packages\zope\pagetemplate\pagetemplate.py line 117 in > pt_render > => 'strictinsert=0, sourceAnnotations=sourceAnnotations)()' > ** exceptions.TypeError: ('Could not adapt', , > ) > C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 277 in __call__ > => 'self.interpret(self.program)' > ** exceptions.TypeError: ('Could not adapt', , > ) > C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in > interpret > => 'handlers[opcode](self, args)' > ** exceptions.TypeError: ('Could not adapt', , > 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', , > ) > C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in > interpret > => 'handlers[opcode](self, args)' > ** exceptions.TypeError: ('Could not adapt', , > ) > C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 926 in > do_extendMacro > => 'definingName, extending)' > ** exceptions.TypeError: ('Could not adapt', , > ) > C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 908 in > do_useMacro > => 'self.interpret(macro)' > ** exceptions.TypeError: ('Could not adapt'
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', , ) 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', , ) C:\Python24\Lib\site-packages\zope\publisher\publish.py line 113 in mapply => 'return debug_call(object, args)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\publisher\publish.py line 119 in debug_call => 'return object(*args)' ** exceptions.TypeError: ('Could not adapt', , ) c:\ZopeInst\lib\python\neteven\database\items.py line 43 in getItemEdit => 'return ItemsForm(item, self.request).render()' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\formlib\form.py line 733 in render => 'self.form_result = self.template()' ** exceptions.TypeError: ('Could not adapt', , ) 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', , ) 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', , ) C:\Python24\Lib\site-packages\zope\pagetemplate\pagetemplate.py line 117 in pt_render => 'strictinsert=0, sourceAnnotations=sourceAnnotations)()' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 277 in __call__ => 'self.interpret(self.program)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in interpret => 'handlers[opcode](self, args)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 878 in do_defineMacro => 'self.interpret(macro)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in interpret => 'handlers[opcode](self, args)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 926 in do_extendMacro => 'definingName, extending)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 908 in do_useMacro => 'self.interpret(macro)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in interpret => 'handlers[opcode](self, args)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 538 in do_optTag_tal => 'self.do_optTag(stuff)' ** exceptions.TypeError: ('Could not adapt', , ) 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', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 518 in no_tag => 'self.interpret(program)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in interpret => 'handlers[opcode](self, args)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 976 in do_defineSlot => 'self.interpret(block)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 352 in interpret => 'handlers[opcode](self, args)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tal\talinterpreter.py line 625 in do_insertText_tal => 'text = self.engine.evaluateText(stuff[0])' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\app\pagetemplate\engine.py line 101 in evaluateText => 'text = self.evaluate(expr)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tales\tales.py line 696 in evaluate => 'return expression(self)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tales\expressions.py line 249 in __call__ => 'v = var(econtext)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tales\expressions.py line 205 in __call__ => 'return self._eval(econtext)' ** exceptions.TypeError: ('Could not adapt', , ) C:\Python24\Lib\site-packages\zope\tales\expressions.py line 199 in _eval => 'return ob()' ** exceptions.TypeError: ('Could not adapt', , ) C
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 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 "", line 1, in -toplevel- > print MyForm(None, request)() >File "", 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