Source code for kim.pipelines.string

# kim/pipelines/string.py
# Copyright (C) 2014-2015 the Kim authors and contributors
# <see AUTHORS file>
#
# This module is part of Kim and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

import six

from .base import pipe, is_valid_choice
from .marshaling import MarshalPipeline
from .serialization import SerializePipeline


@pipe()
[docs]def bounds_check(session): """Pipe used to determine if a value is within the min and max bounds on the field :param session: Kim pipeline session instance """ max_ = session.field.opts.max min_ = session.field.opts.min if max_ is not None and len(session.data) > max_: raise session.field.invalid(error_type='out_of_bounds') if min_ is not None and len(session.data) < min_: raise session.field.invalid(error_type='out_of_bounds') return session.data
@pipe()
[docs]def is_valid_string(session): """Pipe used to determine if a value can be coerced to a string :param session: Kim pipeline session instance """ try: session.data = six.text_type(session.data) return session.data except ValueError: raise session.field.invalid(error_type='type_error')
@pipe() def blank_check(session): """Pipe used to determine if a value is blank. If blank=False and value is the empty string, raise error :param session: Kim pipeline session instance """ if session.data == '' and session.field.opts.blank is False: raise session.field.invalid(error_type='type_error') return session.data @pipe(run_if_none=False)
[docs]def to_unicode(session): """Convert incoming value to unicode string :param session: Kim pipeline session instance """ return six.text_type(session.data)
[docs]class StringMarshalPipeline(MarshalPipeline): """StringMarshalPipeline .. seealso:: :func:`kim.pipelines.base.is_valid_choice` :func:`kim.pipelines.string.is_valid_string` :class:`kim.pipelines.marshaling.MarshalPipeline` """ validation_pipes = \ [is_valid_string, blank_check, is_valid_choice, bounds_check] \ + MarshalPipeline.validation_pipes output_pipes = [to_unicode] + MarshalPipeline.output_pipes
[docs]class StringSerializePipeline(SerializePipeline): """StringSerializePipeline .. seealso:: :class:`kim.pipelines.serialization.SerializePipeline` """ pass