def string(value,
           allow_empty = False,
           coerce_value = False,
           minimum_length = None,
           maximum_length = None,
           whitespace_padding = False,
           **kwargs):
    """Validate that ``value`` is a valid string.

    :param value: The value to validate.
    :type value: :class:`str <python:str>` / :obj:`None <python:None>`

    :param allow_empty: If ``True``, returns :obj:`None <python:None>` if ``value``
      is empty. If ``False``, raises a
      :class:`EmptyValueError <validator_collection.errors.EmptyValueError>` if
      ``value`` is empty. Defaults to ``False``.
    :type allow_empty: :class:`bool <python:bool>`

    :param coerce_value: If ``True``, will attempt to coerce ``value`` to a string if
      it is not already. If ``False``, will raise a :class:`ValueError` if ``value``
      is not a string. Defaults to ``False``.
    :type coerce_value: :class:`bool <python:bool>`

    :param minimum_length: If supplied, indicates the minimum number of characters
      needed to be valid.
    :type minimum_length: :class:`int <python:int>`

    :param maximum_length: If supplied, indicates the minimum number of characters
      needed to be valid.
    :type maximum_length: :class:`int <python:int>`

    :param whitespace_padding: If ``True`` and the value is below the
      ``minimum_length``, pad the value with spaces. Defaults to ``False``.
    :type whitespace_padding: :class:`bool <python:bool>`

    :returns: ``value`` / :obj:`None <python:None>`
    :rtype: :class:`str <python:str>` / :obj:`None <python:None>`

    :raises EmptyValueError: if ``value`` is empty and ``allow_empty`` is ``False``
    :raises CannotCoerceError: if ``value`` is not a valid string and ``coerce_value``
      is ``False``
    :raises MinimumLengthError: if ``minimum_length`` is supplied and the length of
      ``value`` is less than ``minimum_length`` and ``whitespace_padding`` is
      ``False``
    :raises MaximumLengthError: if ``maximum_length`` is supplied and the length of
      ``value`` is more than the ``maximum_length``
    """
    if not value and not allow_empty:
        raise errors.EmptyValueError('value (%s) was empty' % value)
    elif not value:
        return None

    minimum_length = integer(minimum_length, allow_empty = True)
    maximum_length = integer(maximum_length, allow_empty = True)

    if coerce_value:
        value = str(value)
    elif not isinstance(value, basestring):
        raise errors.CannotCoerceError('value (%s) was not coerced to a string' % value)

    if value and maximum_length and len(value) > maximum_length:
        raise errors.MaximumLengthError(
            'value (%s) exceeds maximum length %s' % (value, maximum_length)
        )

    if value and minimum_length and len(value) < minimum_length:
        if whitespace_padding:
            value = value.ljust(minimum_length, ' ')
        else:
            raise errors.MinimumLengthError(
                'value (%s) is below the minimum length %s' % (value, minimum_length)
            )

    return value
Validate that ``value`` is a valid string.

    :param value: The value to validate.
    :type value: :class:`str <python:str>` / :obj:`None <python:None>`

    :param allow_empty: If ``True``, returns :obj:`None <python:None>` if ``value``
      is empty. If ``False``, raises a
      :class:`EmptyValueError <validator_collection.errors.EmptyValueError>` if
      ``value`` is empty. Defaults to ``False``.
    :type allow_empty: :class:`bool <python:bool>`

    :param coerce_value: If ``True``, will attempt to coerce ``value`` to a string if
      it is not already. If ``False``, will raise a :class:`ValueError` if ``value``
      is not a string. Defaults to ``False``.
    :type coerce_value: :class:`bool <python:bool>`

    :param minimum_length: If supplied, indicates the minimum number of characters
      needed to be valid.
    :type minimum_length: :class:`int <python:int>`

    :param maximum_length: If supplied, indicates the minimum number of characters
      needed to be valid.
    :type maximum_length: :class:`int <python:int>`

    :param whitespace_padding: If ``True`` and the value is below the
      ``minimum_length``, pad the value with spaces. Defaults to ``False``.
    :type whitespace_padding: :class:`bool <python:bool>`

    :returns: ``value`` / :obj:`None <python:None>`
    :rtype: :class:`str <python:str>` / :obj:`None <python:None>`

    :raises EmptyValueError: if ``value`` is empty and ``allow_empty`` is ``False``
    :raises CannotCoerceError: if ``value`` is not a valid string and ``coerce_value``
      is ``False``
    :raises MinimumLengthError: if ``minimum_length`` is supplied and the length of
      ``value`` is less than ``minimum_length`` and ``whitespace_padding`` is
      ``False``
    :raises MaximumLengthError: if ``maximum_length`` is supplied and the length of
      ``value`` is more than the ``maximum_length``