Search code examples
pythonpylonsformencode

FormEncode validate: words divided by a comma


How to validate words divided by a comma by FormEncode ?

Something like this:

"foo1, foo2, foo3" -> ["foo1", "foo2", "foo3"]

Solution

  • You'll probably need a custom validator. Here's a quick example:

    import formencode
    
    class CommaSepList(formencode.validators.FancyValidator):
    
        def _to_python(self, value, state):
            return value.split(",")
    
        def validate_python(self, value, state):
            for elem in value:
                if elem == "": 
                    raise formencode.Invalid("an element of the list is empty", value, state) 
    
    >>> CommaSepList.to_python("1,2,3")
    ['1', '2', '3']
    >>> CommaSepList.to_python("1,,")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib64/python2.5/site-packages/FormEncode-1.2.3dev-py2.5.egg/formencode/api.py", line 416, in to_python
        vp(value, state)
      File "myValidator.py", line 17, in validate_python
        raise formencode.Invalid("an element of the list is empty", value, state)
    

    Of course, you'll want to add validation specific to your use case.