From: Hsueh-ching Y. <hc...@qu...> - 2001-11-30 17:25:40
|
Hi, all I just started using webware, and have a question on HTML form submission. I have a <SELECT MULTIPLE name="myselect"> <option>AAA</option> <option>BBB</option> <option>CCC</option> <option>DDD</option> </SELECT> If user selects one item, AAA, then submit, in HTTPRequest object req.fields()["myselect"] is 'AAA' (a string). If user selects two item, AAA and BBB, then submit, in HTTPRequest object req.fields()["myselect"] is ['AAA', 'BBB'] (a list). Isn't easier if it is always in a list? Then we don't need to test the type of the objects? |
From: Geoffrey T. <gta...@na...> - 2001-11-30 22:16:13
|
At 12:22 PM 11/30/01 -0500, Hsueh-ching Yen wrote: >Hi, all > >I just started using webware, and have a question on HTML form submission. >I have a ><SELECT MULTIPLE name= myselect > ><option>AAA</option> ><option>BBB</option> ><option>CCC</option> ><option>DDD</option> ></SELECT> >If user selects one item, AAA, then submit, in HTTPRequest object >req.fields()["myselect"] is AAA (a string). >If user selects two item, AAA and BBB, then submit, in HTTPRequest object >req.fields()["myselect"] is ['AAA', 'BBB'] (a list). > >Isn t easier if it is always in a list? Then we don t need to test the >type of the objects? I think it's impossible to tell the difference. The way form fields are encoded, a single item selected in a multiple select list is the same as an item selected in a single select list. What I did is to write a method in my SitePage.py: def listField(self, name): values = self.request().field(name, []) if not isinstance(values, types.ListType): values = [values] return values Then instead of using reg.fields()["myselect"], I use self.listField("myselect"). It'll always come back as a list. -- - Geoff Talvola gtalvola@NameConnector.com |
From: <ir...@ms...> - 2001-11-30 23:12:01
|
On Fri, Nov 30, 2001 at 05:17:20PM -0500, Geoffrey Talvola wrote: > At 12:22 PM 11/30/01 -0500, Hsueh-ching Yen wrote: > >Hi, all > > > >I just started using webware, and have a question on HTML form submission. > >I have a > ><SELECT MULTIPLE name= myselect > > ><option>AAA</option> > ><option>BBB</option> > ><option>CCC</option> > ><option>DDD</option> > ></SELECT> > >If user selects one item, AAA, then submit, in HTTPRequest object > >req.fields()["myselect"] is AAA (a string). > >If user selects two item, AAA and BBB, then submit, in HTTPRequest object > >req.fields()["myselect"] is ['AAA', 'BBB'] (a list). > > > >Isn t easier if it is always in a list? Then we don t need to test the > >type of the objects? > > I think it's impossible to tell the difference. The way form fields are > encoded, a single item selected in a multiple select list is the same as an > item selected in a single select list. > > What I did is to write a method in my SitePage.py: > > def listField(self, name): > values = self.request().field(name, []) > if not isinstance(values, types.ListType): > values = [values] > return values > > Then instead of using reg.fields()["myselect"], I use > self.listField("myselect"). It'll always come back as a list. The problem is in Python's cgi module that Webware uses. It returns a string if there's one value, or a list if there's more than one. In my applications I use a .fieldMulti method like Geoff's, and a .fieldSingle method that arbitrarily picks the first value if there are more than one. That way, the application doesn't have to do an if-test for every single variable, nor run the risk of crashing if the user submits multiple values to a single-value-only field. -- -Mike (Iron) Orr, ir...@ms... (if mail problems: ms...@oz...) http://iron.cx/ English * Esperanto * Russkiy * Deutsch * Espan~ol |
From: Ian B. <ia...@co...> - 2001-11-30 23:18:09
|
On Fri, 2001-11-30 at 17:19, Mike Orr wrote: > The problem is in Python's cgi module that Webware uses. It returns a > string if there's one value, or a list if there's more than one. Well, it's not really the cgi modules *fault*. It's just the way things work. One value looks like ?f=a, two look like ?f=a&f=b ... you just can't tell the difference. Unless, I suppose, you did the PHP thing with []... but that's outside the scope of the cgi module. Ian |
From: <ir...@ms...> - 2001-11-30 23:58:04
|
On Fri, Nov 30, 2001 at 05:21:13PM -0600, Ian Bicking wrote: > On Fri, 2001-11-30 at 17:19, Mike Orr wrote: > > The problem is in Python's cgi module that Webware uses. It returns a > > string if there's one value, or a list if there's more than one. > > Well, it's not really the cgi modules *fault*. It's just the way things > work. One value looks like ?f=a, two look like ?f=a&f=b ... you just > can't tell the difference. Unless, I suppose, you did the PHP thing > with []... but that's outside the scope of the cgi module. It's the module's fault for providing one method rather than two, and for returning an inconsistent type. Causing thousands of Python progammers to: A) have to check the type of every single field returned, even those which should always be single. B) not check, resulting in scripts that crash if a value unexpectedly becomes multiple. C) constantly reinvent the wheel, writing a function that always returns a list. This causes bloat in the CGI scripts, or if it's put in a library, makes the script non-portable unless the library is distributed with it. -- -Mike (Iron) Orr, ir...@ms... (if mail problems: ms...@oz...) http://iron.cx/ English * Esperanto * Russkiy * Deutsch * Espan~ol |
From: Geoffrey T. <gta...@me...> - 2001-12-01 00:24:20
|
On Friday November 30, 2001 07:05 pm, Mike Orr wrote: > On Fri, Nov 30, 2001 at 05:21:13PM -0600, Ian Bicking wrote: > > On Fri, 2001-11-30 at 17:19, Mike Orr wrote: > > > The problem is in Python's cgi module that Webware uses. It returns a > > > string if there's one value, or a list if there's more than one. > > > > Well, it's not really the cgi modules *fault*. It's just the way things > > work. One value looks like ?f=a, two look like ?f=a&f=b ... you just > > can't tell the difference. Unless, I suppose, you did the PHP thing > > with []... but that's outside the scope of the cgi module. > > It's the module's fault for providing one method rather than two, and > for returning an inconsistent type. Causing thousands of Python > progammers to: > > A) have to check the type of every single field returned, even those > which should always be single. > > B) not check, resulting in scripts that crash if a value unexpectedly > becomes multiple. > > C) constantly reinvent the wheel, writing a function that always returns > a list. This causes bloat in the CGI scripts, or if it's put in a > library, makes the script non-portable unless the library is distributed > with it. I agree completely, the cgi module's handling of lists leaves a lot to be desired. How should Webware improve on it? Anyone want to propose some enhancements to the Request object for Webware 0.7 to make this nicer? - Geoff |
From: <ir...@ms...> - 2001-12-01 02:14:10
|
On Fri, Nov 30, 2001 at 07:26:45PM -0500, Geoffrey Talvola wrote: > > > > The problem is in Python's cgi module that Webware uses. It returns a > > > > string if there's one value, or a list if there's more than one. > > > > I agree completely, the cgi module's handling of lists leaves a lot to be > desired. How should Webware improve on it? Anyone want to propose some > enhancements to the Request object for Webware 0.7 to make this nicer? Added a wishlist item to the wiki. http://webware.colorstudy.net/twiki/bin/view/Webware/WishList -- -Mike (Iron) Orr, ir...@ms... (if mail problems: ms...@oz...) http://iron.cx/ English * Esperanto * Russkiy * Deutsch * Espan~ol |