konval 0.3

Routines for data validation & conversion

  Add it to your Download Basket!

 Add it to your Watch List!


Rate it!

What's new in konval 0.3:

  • Renamed a few validators to more consistent scheme. Names should be fixed now.
Read full changelog
send us
an update
MIT/X Consortium License 
Paul-Michael Agapow
ROOT \ Text Editing&Processing \ Others

Validation and conversion of data.

The problem of sanitizing data (checking correctness and transforming to a useful form) is widespread throughout programming:

- How do I verify user input is correct?
- How do I munge data from a spreadsheet into dates and numbers?
- How do I convert raw database fields into a programmatic object?

Ian Bicking came up with a sensible idiom for this problem, embodied in his Formencode library [formencode]: validation and conversion are one and the same thing, and can be handled by passing raw data through a chain of validators. Each validator checks and/or transforms the data and passes it on to the next.

In this spirit, konval is a package that provides:

- a rich library of validation objects
- base classes for easily producing custom validators
- functions for easily using validators in a variety of ways


konval is in an exploratory state, having been produced to support another package and see if use can be got out of generalising conversion. As such. it is still an early release and the API may change. Comment is invited.


The simplest way to install konval is via easy_install [setuptools] or an equivalent program:

easy_install konval

Alternatively the tarball can be downloaded, unpacked and setup.py run:

tar zxvf konval.tgz
 cd konval
 python set.py install

konval is a module that has no prerequisites and should work with just about any version of Python.

Using konval

A full API is included in the source distribution.


Most commonly, konval will be used to check or clean values. Failures result in exceptions being thrown:

# convert user input to a actual integer
>>> from konval import *
>>> sanitize ('1.0', ToInt())
>>> sanitize ('one', ToInt())
Traceback (most recent call last)
ValueError: can't convert '1.0' to integer

A single validator or list can be passed to sanitize. Failure in any will result in any exception:

# check a list has no more than 3 members
>>> sanitize (['a', 'b', 'c'], [ToLength(),IsEqualOrLess(3)])
# check a password is long enough
>>> sanitize ('mypass', [ToLength(),IsEqualOrMore(8)])
Traceback (most recent call last)
ValueError: 6 is lower than 8

Any callable object that accepts and returns a single value can be used as a validator:

>>> from string import *
>>> sanitize (" my title ", [strip, capitalize])
'My title'

A rich library of prebuilt validators is supplied:

>>> sanitize ('abcde', IsNonblank())
>>> sanitize (5, IsInRange(1,6))
>>> sanitize ('foo', Synonyms({'foo': 'bar', 'baz': 'quux'}))

Custom validators can easily be subclassed from a supplied base class:

class IsFoo (BaseValidator):
 def validate_value (self, value):
 if value != 'foo':
 self.raise_validation_error (value)
 return True

Last updated on August 3rd, 2011

requirements limitations

#data validation #data conversion #data #validation #conversion #routines

Add your review!