Validators

This module provides some validators and validator factories, intended mainly for use in the validate parameter of Fields.

norman.validate.ifset(func)

Return a Field validator returning func(value) if value is not NotSet. If value is NotSet, then it is returned and func is never called. This is normally used as a wrapper around another validator to permit NotSet values to pass. For example:

>>> validator = ifset(istype(float))
>>> validator(4.3)
4.3
>>> validator(NotSet)
NotSet
>>> validator(None)
Traceback (most recent call last):
    ...
ValidationError: None
norman.validate.isfalse(func[, default])

Return a Field validator which passes if func returns False.

Parameters:
  • func – A callable which returns False if the value passes.
  • default – The value to return if func returns True. If this is omitted, a ValidationError is raised.
norman.validate.istrue(func[, default])

Return a Field validator which passes if func returns True.

Parameters:
  • func – A callable which returns True if the value passes.
  • default – The value to return if func returns False. If this is omitted, a ValidationError is raised.
norman.validate.istype(t[, t2[, t3[, ...]]])

Return a validator which raises a ValidationError on an invalid type.

Parameters:t – The expected type, or types.
norman.validate.map(mapping)

Return a validator which maps values to new values.

Parameters:mapping – A dict mapping old values to new values.

If a value is passed which has no mapping then it is accepted unchanged. For example:

>>> validator = map({1: 'one', 0: NotSet})
>>> validator(1)
'one'
>>> validator(0)
NotSet
>>> validator(2)
2
norman.validate.settype(t, default)

Return a Field validator which converts the value to type t.

Parameters:
  • t – The required type.
  • default – If the value cannot be converted, then use this value instead.

The following three functions return validators which convert a value to a datetime object using a format string. See strftime() and strptime() Behavior for more information of format strings.

norman.validate.todate([fmt])

Return a validator which converts a string to a datetime.date. If fmt is omitted, the ISO representation used by datetime.date.__str__ is used, otherwise it should be a format string for datetime.datetime.strptime.

If the value passed to the validator is a datetime.datetime, the date component is returned. If it is a datetime.date it is returned unchanged.

The return value is always a datetime.date object. If the value cannot be converted a ValidationError is raised.

norman.validate.todatetime([fmt])

Return a validator which converts a string to a datetime.datetime. If fmt is omitted, the ISO representation used by datetime.datetime.__str__ is used, otherwise it should be a format string for datetime.datetime.strptime.

If the value passed to the validator is a datetime.datetime it is returned unchanged. If it is a datetime.date or datetime.time, it is converted to a datetime.datetime, replacing missing the missing information with 1900-1-1 or 00:00:00.

The return value is always a datetime.datetime object. If the value cannot be converted a ValidationError is raised.

norman.validate.totime([fmt])

Return a validator which converts a string to a datetime.time. If fmt is omitted, the ISO representation used by datetime.time.__str__ is used, otherwise it should be a format string for datetime.datetime.strptime.

If the value passed to the validator is a datetime.datetime, the time component is returned. If it is a datetime.time it is returned unchanged.

The return value is always a datetime.time object. If the value cannot be converted a ValidationError is raised.