# Source code for wtforms.fields.simple

    import warnings

    from .. import widgets
    from .core import Field, StringField, BooleanField

    __all__ = (
        'BooleanField', 'TextAreaField', 'PasswordField', 'FileField', 'MultipleFileField',
        'HiddenField', 'SubmitField', 'TextField'
    )

    class TextField(StringField):
        """
        Legacy alias for StringField

        .. deprecated:: 2.0
        """
        def __init__(self, *args, **kw):
            super(TextField, self).__init__(*args, **kw)
            warnings.warn(
                'The TextField alias for StringField has been deprecated and will be removed in WTForms 3.0',
                DeprecationWarning, stacklevel=2
            )

    class TextAreaField(StringField):
        """
        This field represents an HTML ``<textarea>`` and can be used to take
        multi-line input.
        """
        widget = widgets.TextArea()

    class PasswordField(StringField):
        """
        A StringField, except renders an ``<input type="password">``.

        Also, whatever value is accepted by this field is not rendered back
        to the browser like normal fields.
        """
        widget = widgets.PasswordInput()

    class FileField(Field):
        """Renders a file upload field.

        By default, the value will be the filename sent in the form data.
        WTForms **does not** deal with frameworks' file handling capabilities.
        A WTForms extension for a framework may replace the filename value
        with an object representing the uploaded data.
        """

        widget = widgets.FileInput()

        def _value(self):
            # browser ignores value of file input for security
            return False

    class MultipleFileField(FileField):
        """A :class:`FileField` that allows choosing multiple files."""

        widget = widgets.FileInput(multiple=True)

        def process_formdata(self, valuelist):
            self.data = valuelist

    class HiddenField(StringField):
        """
        HiddenField is a convenience for a StringField with a HiddenInput widget.

        It will render as an ``<input type="hidden">`` but otherwise coerce to a string.
        """
        widget = widgets.HiddenInput()

    class SubmitField(BooleanField):
        """
        Represents an ``<input type="submit">``.  This allows checking if a given
        submit button has been pressed.
        """
        widget = widgets.SubmitInput()