Hi,

I think you want FlexPassword(not_empty=True).  FancyValidator handles the
empty case internally before your method is called.  There might be another
method that overrides this but if you need a custom message for not empty
then you can just override the 'empty' key in messages with your own
message.

I looked at the code to justify what I said earlier:

Empty case is handled --
http://bitbucket.org/ianb/formencode/src/tip/formencode/api.py#cl-406

Your _to_python is used --
http://bitbucket.org/ianb/formencode/src/tip/formencode/api.py#cl-417

-Ian

On Mon, Aug 16, 2010 at 9:56 AM, Ryan <[email protected]> wrote:

> My controller is calling _to_python on a schema object:
>
>    @validate(schema=UserCreateValidation(), form='new',
> post_only=True)
>    def create(self):
>        # controller code here...
>
> Inside the schema is where I call the validator:
>
>    class UserCreateValidation(formencode.Schema):
>        password = formencode.All(FlexPassword())
>        # more schema code here...
>
> I can't call `FlexPassword#_to_python` because `value` and `state`
> aren't known by the schema.
>
> The `UserCreateValidation` schema includes other validations, so I
> know the controller is calling it even when the password field is
> blank. What's happening though, is the schema seems to ignore
> `password = formencode.All(FlexPassword())` when the password is
> blank.
>
> Do I need to add an additional argument to `formencode#All` to make
> sure it runs `FlexPassword` even when the value is blank?
>
>
> On Aug 13, 5:49 pm, Eric Rasmussen <[email protected]> wrote:
> > Hi Ryan,
> >
> > In your example below, _to_python always works for me if I call it
> directly
> > (as a method of the class). Is there any chance that your controller
> isn't
> > calling it when the value is an empty string? It might help to see how
> your
> > controller is referencing it.
> >
> > Best,
> > Eric
> >
> >
> >
> > On Fri, Aug 13, 2010 at 7:46 AM, Ryan <[email protected]> wrote:
> > > I have a custom validator called `FlexPassword`
> >
> > > class FlexPassword(formencode.FancyValidator):
> > >    def _to_python(self, value, state):
> > >        raise formencode.Invalid('validator ran', value, state)
> >
> > > Here's my schema:
> >
> > > password =
> > > formencode.All(formencode.validators.PlainText(not_empty=True),
> > > FlexPassword())
> >
> > > As expected, when no characters are entered, the PlainText error is
> > > raised. Also as expected, when a single character is entered, the
> > > FlexPassword error is raised.
> >
> > > But that's not the schema I want to use. This is:
> >
> > > password = formencode.All(FlexPassword())
> >
> > > Contrary to expectation, when no characters are entered, the
> > > FlexPassword error is not raised. Huh? As expected, when a single
> > > character is entered, the FlexPassword error is raised.
> >
> > > The way I've got it wired up, the form should always fail validation,
> > > but with a blank password, it passes. Any insights for me? Thanks.
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "pylons-discuss" group.
> > > To post to this group, send email to [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected]<pylons-discuss%[email protected]>
> <pylons-discuss%2bunsubscr...@go oglegroups.com>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/pylons-discuss?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "pylons-discuss" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<pylons-discuss%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/pylons-discuss?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en.

Reply via email to