Ticket #1273 (closed defect: duplicate)
SingleSelectField in a form should use validator from schema
Reported by: | Chris Arndt | Owned by: | alberto |
---|---|---|---|
Priority: | normal | Milestone: | 1.5 |
Component: | ToscaWidgets | Version: | 1.0.1 |
Severity: | normal | Keywords: | widget, form, singleselect, validation |
Cc: |
Description
As explained in this thread:
http://groups.google.com/group/turbogears/browse_thread/thread/b07fc35736ccffef/74859c1655db4a5d
and demonstrated in this code:
http://paste.turbogears.org/paste/935
when using a SingleSelectField in a form widget with a validation schema, the validator for the SingleSelectField in the validation schema is not taken into account and the form declaration fails with
ValueError: No validator specified and couldn't guess one. I cannot work properly without it
when the options argument to the SingleSelectField constructor is empty and the validator can not be guessed.
Adding a validator to the SingleSelectField constructor works around the problem but goes against the DRY principle. Arguably the whole validator guessing behaviour of SingleSelectFields causes more problems than it solves. See the references to previous posts about this bug later in the same thread:
http://groups.google.com/group/turbogears/msg/a60f5908f6877291
IMO, it should be recognised that there is a validator for the SingleSelectField in the schema. If there is none, an exception should be thrown when the form is instantiated.
Change History
comment:1 Changed 12 years ago by Chris Arndt
- Keywords singleselect, added; singelselect, removed
- Version changed from 1.0 to 1.0.1
comment:2 Changed 12 years ago by shday
Guessing the validator here is kind of unpythonic IMO. A new user won't know why validation is happening when no validator is explicitly declared.
comment:3 Changed 12 years ago by alberto
- Owner changed from anonymous to alberto
- Component changed from Widgets to toscaWidgets
- Milestone changed from 1.0.2 to 1.1
Removing the guessing behaviour in 1.0 will break some apps which depend on it so its not doable. Picking up the validator from the Schema is not possible given the current design because the SingleSelectField? is instantiated before the Schema is (so it will barf that ValueError? anyway) and making the form assign it one when the schema is built is not possible either because compound widgets should not modify their children because they might be shared among other compound widgets.
However, this is solvable in ToscaWidgets? because child widgets can be cloned by their parent to initialize them with different parameters.
I'll move this ticket to ToscaWidgets? to remind me (or someone) to implement it sometime.
Alberto