Hi, in addition to Gavrie's mail from the 01/01/2004. I have done a little debugging myself on this issue. It seems that when render itself implements a formless interface, rather than apply a seperate class as 'original' which implements a formless interface(see examples). 1. Both forms are construction appears to be ok 2. when clicking on the submit button of a list item formpost4-bad.tac program raise an exception. 3. All hell breaks through when trying to configurate a configurable object in postForm (freeform.py) 4. formpost4-good.tac comes back ok on second call with the configurable list of [Address(), Address().. TypedInterfaceConfigurable where formpost4-bad.tac returns a TypedInterfaceConfigurable - FormPost() insted of the above. 5. Values returned bad from method locateConfigurable() in freeform.py Help would be very much appreciated on figuring the matter. I'm using Twisted 1.1.0 and the latest Quotient CVS Gavrie's mail and the attached examples: I took one of Donovan's examples (at http://www.livejournal.com/users/fzzzy/) and modified it to work this way, but to no avail. Attached are two scripts, based in the freeformpost4.tac example. The formpost4-good.tac uses a separate class that implements the formless interface, and works perfectly. The formpost4-bad.tac script uses a Renderer subclass which also implements the formless interface (I need to do it this way because my pages include forms and also other renderers on the same page). However, this script renders the form fine, but blows up when submitting the form (traceback attached). Any form that does not use the formless.List type does work correctly this way (i.e. using a Renderer subclass which implements the formless interface). Help would be very much appreciated. I'm using Twisted 1.1.0 with the latest nevow code from the Quotient CVS. Thanks, -- Gavrie. --------------090003070107020805050604 Content-Type: text/plain; name="formpost4-bad.tac" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="formpost4-bad.tac" from twisted.application import service, internet from nevow import appserver from nevow import renderer from nevow import tags from nevow import formless from nevow import freeform import nevow class IAddress(formless.TypedInterface): street = formless.String() class Address(object): __implements__ = IAddress street = "foo" def __str__(self): return "%s" % self.street class IPerson(formless.TypedInterface): addresses = formless.List() class FormPage(renderer.Renderer): __implements__ = IPerson, renderer.Renderer.__implements__ name = "a person's name" addresses = [Address(), Address(), Address()] document = tags.html[ tags.head[ tags.link(href="/freeform_css", rel="stylesheet") ], tags.body[ freeform.configure ] ] def child_freeform_css(self, request): from twisted.python import util from twisted.web import static return static.File(util.sibpath(nevow.__file__, 'freeform-default.css')) application = service.Application("form") internet.TCPServer( 8081, appserver.NevowSite( FormPage()#Person()) ) ).setServiceParent(application) # vim: ft=python --------------090003070107020805050604 Content-Type: text/plain; name="formpost4-good.tac" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="formpost4-good.tac" from twisted.application import service, internet from nevow import appserver from nevow import renderer from nevow import tags from nevow import formless from nevow import freeform import nevow class IAddress(formless.TypedInterface): street = formless.String() class Address(object): __implements__ = IAddress street = "foo" def __str__(self): return "%s" % self.street class IPerson(formless.TypedInterface): addresses = formless.List() class Person(object): __implements__ = IPerson name = "a person's name" addresses = [Address(), Address(), Address()] class FormPage(renderer.Renderer): document = tags.html[ tags.head[ tags.link(href="/freeform_css", rel="stylesheet") ], tags.body[ freeform.configure ] ] def child_freeform_css(self, request): from twisted.python import util from twisted.web import static return static.File(util.sibpath(nevow.__file__, 'freeform-default.css')) application = service.Application("form") internet.TCPServer( 8080, appserver.NevowSite( FormPage(Person()) ) ).setServiceParent(application) # vim: ft=python --------------090003070107020805050604 Content-Type: text/plain; name="traceback" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="traceback" 2004/01/01 12:07 IST [HTTPChannel,0,127.0.0.1] Traceback (most recent call last): File "/usr/lib/python2.3/site-packages/twisted/protocols/http.py", line 950, in lineReceiv ed self.allContentReceived() File "/usr/lib/python2.3/site-packages/twisted/protocols/http.py", line 991, in allContent Received req.requestReceived(command, path, version) File "/usr/lib/python2.3/site-packages/twisted/protocols/http.py", line 549, in requestRec eived self.process() File "/usr/lib/python2.3/site-packages/nevow/appserver.py", line 99, in process return server.Request.process(self) --- <exception caught here> --- File "/usr/lib/python2.3/site-packages/twisted/web/server.py", line 158, in process resrc = self.site.getResourceFor(self) File "/usr/lib/python2.3/site-packages/nevow/appserver.py", line 125, in getResourceFor res = gener.getResourceForRequest(request) File "/usr/lib/python2.3/site-packages/nevow/appserver.py", line 50, in getResourceForReqest return self.postForm(request, res, configurable, ctx, bindingName, request.args) File "/usr/lib/python2.3/site-packages/nevow/appserver.py", line 53, in postForm return configurable.postForm(ctx, bindingName, args) File "/usr/lib/python2.3/site-packages/nevow/freeform.py", line 750, in postForm binding = configurable.getBinding(ctx, seg) File "/usr/lib/python2.3/site-packages/nevow/freeform.py", line 735, in getBinding raise ImproperInputError, name nevow.freeform.ImproperInputError: 0