def Preparer(value): """ A preparer is called after deserialization of a value but before that value is validated. Any modifications to ``value`` required should be made by returning the modified value rather than modifying in-place. If no modification is required, then ``value`` should be returned as-is. """ def Validator(node, value): """ A validator is called after preparation of the deserialized value. If ``value`` is not valid, raise a :class:`colander.Invalid` instance as an exception after. ``node`` is a :class:`colander.SchemaNode` instance, for use when raising a :class:`colander.Invalid` exception. """ class Type(object): def serialize(self, node, appstruct): """ Serialize the :term:`appstruct` represented by ``appstruct`` to a :term:`cstruct`. The serialization should be composed of one or more objects which can be deserialized by the :meth:`colander.interfaces.Type.deserialize` method of this type. ``node`` is a :class:`colander.SchemaNode` instance. ``appstruct`` is an :term:`appstruct`. If ``appstruct`` is the special value :attr:`colander.null`, the type should serialize a null value. If the object cannot be serialized for any reason, a :exc:`colander.Invalid` exception should be raised. """ def deserialize(self, node, cstruct): """ Deserialze the :term:`cstruct` represented by ``cstruct`` to an :term:`appstruct`. The deserialization should be composed of one or more objects which can be serialized by the :meth:`colander.interfaces.Type.serialize` method of this type. ``node`` is a :class:`colander.SchemaNode` instance. ``cstruct`` is a :term:`cstruct`. If the object cannot be deserialized for any reason, a :exc:`colander.Invalid` exception should be raised. """