from flask_wtf import FlaskForm
from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, \
    MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField
from wtforms.fields.html5 import DateField
from wtforms.validators import DataRequired


# Structure of the Login form
class LoginForm(Form):
    email = StringField('Email', [
        validators.DataRequired(message='Es necesario introducir un email')])
    password = PasswordField('Contraseña', [
        validators.DataRequired(message='Es necesario introducir una contraseña')])
    remember_me = BooleanField('Recuerdame')
    submit = SubmitField('Iniciar Sesión')

# Structure of the Register form
class RegisterForm(Form):
    name = StringField('Nombre', [
        validators.DataRequired(message='Es necesario introducir un nombre'),
        validators.Length(min=4, max=50, message='El tamaño máximo del nombre son 50 carácteres')])
    lastname = StringField('Apellidos', [
        validators.DataRequired(message='Es necesario introducir apellidos'),
        validators.Length(min=4, max=50, message='El tamaño máximo del nombre son 50 carácteres')])

    # username = StringField('Username', [
    #    validators.Length(min=4, max=25, message='El nombre de usuario debe tener entre 4 y 25 carácteres')])
    email = StringField('Email', [
        validators.DataRequired(message='Es necesario introducir un email'),
        validators.Length(min=1, max=50, message='El email no puede contener más de 50 carácteres')])
    password = PasswordField('Contraseña', [
        validators.DataRequired(message='Es necesario una contraseña'),
        validators.Length(min=8, message='La contraseña debe tener al menos 8 caracteres')
    ])
    confirm = PasswordField('Confirmar Contraseña', [
        validators.EqualTo('password', message='Las contraseñas no coinciden')
    ])

# Structure of the Login form
class RestorePasswordForm(Form):
    email = StringField('Email', [
        validators.DataRequired(message='Es necesario introducir un email')])
    submit = SubmitField("Correo de Recuperación")

class EditProfile(FlaskForm):
    name = StringField('Nombre', [
        validators.DataRequired(message='Es necesario introducir un nombre'),
        validators.Length(min=4, max=50, message='El tamaño máximo del nombre son 50 carácteres')])
    lastname = StringField('Apellidos', [
        validators.DataRequired(message='Es necesario introducir apellidos'),
        validators.Length(min=4, max=50, message='El tamaño máximo del nombre son 50 carácteres')])
    gender = RadioField('Género', choices = [('hombre','Hombre'),('mujer','Mujer')])
    submit = SubmitField('Guardar cambios')

class EditLocation(FlaskForm):
    lat = HiddenField('Latitud', [
        validators.DataRequired(message='No se ha podido obtener la nueva localización')
    ])
    lng = HiddenField('Longitud', [
        validators.DataRequired(message='No se ha podido obtener la nueva localización')
    ])
    submit = SubmitField('Establecer ubicación')

class EditPassword(FlaskForm):
    old = PasswordField('Contraseña Anterior', [
        validators.DataRequired(message='Es necesario introducir una contraseña')
    ])
    password = PasswordField('Eliga una contraseña', [
        validators.DataRequired(message='Es necesario introducir una contraseña'),
        validators.Length(min=8, message='La contraseña debe tener al menos 8 caracteres')
    ])
    confirm = PasswordField('Confirme la contraseña', [
        validators.EqualTo('password', message='Las contraseñas no coinciden')
    ])
    submit = SubmitField('Cambiar contraseña')

class EditEmail(FlaskForm):
    email = StringField('Correo electrónico', [
        validators.DataRequired(message='Es necesario introducir una dirección de correo'),
        validators.Length(min=1, max=50, message='El correo no puede contener más de 50 carácteres')])
    confirm = StringField('Confirmar correo electrónico', [
        validators.EqualTo('email', message='Los correos no coinciden')
    ])
    submit = SubmitField('Cambiar correo')

class EditPicture(FlaskForm):
    picture = FileField('Imagen de perfil')
    submit = SubmitField('Establecer imagen')
    delete = SubmitField('Eliminar imagen')

class DeleteAccount(FlaskForm):
    delete = SubmitField("Eliminar cuenta")

# Structure of the Subir Anuncio form
class SubirAnuncioForm(FlaskForm):
    # pictures = HiddenField("Imágenes")
    # mimes = HiddenField("Formatos de imagen")
    name = StringField('Nombre del producto', [
        validators.DataRequired(message='Es necesario introducir un nombre de producto'),
        validators.Length(min=1, max=50, message='El tamaño máximo del nombre del producto son 50 carácteres')])
    price = DecimalField('Precio (€)', [
        validators.DataRequired(message='Es necesario introducir un precio'),
        validators.NumberRange(min=0, max=1000000, message='El precio intoducido no es válido (de 0 € a 999.999,99 €)')])
    category = SelectField('Categoría', 
        choices = [ 
            ('Automoción', 'Automoción'),
            ('Informática', 'Informática'),
            ('Moda', 'Moda'),
            ('Deporte y ocio', 'Deporte y ocio'),
            ('Videojuegos', 'Videojuegos'),
            ('Libros y música', 'Libros y música'),
            ('Hogar y jardín', 'Hogar y jardín'),
            ('Foto y audio', 'Foto y audio')
        ], validators = [ 
            validators.DataRequired(message='Es necesario seleccionar una categoría') ])
    description = TextAreaField('Descripción', [
        validators.DataRequired(message='Es necesario escribir una descripción')])
    lat = HiddenField('Latitud')
    lng = HiddenField('Longitud')
    enddate = DateField('End', format = '%Y-%m-%d', description = 'Time that the event will occur',
        validators= [validators.Optional()] )
    submit = SubmitField('Publicar')


class ProductSearch(Form):
    categories = ['Automoción', 'Informática', 'Moda', 'Deporte y ocio', 'Videojuegos', 'Libros y música', 'Hogar y jardín', 'Foto y audio']
    category = SelectField('Categoría', 
        choices = [ 
            ('Automoción', 'Automoción'),
            ('Informática', 'Informática'),
            ('Moda', 'Moda'),
            ('Deporte y ocio', 'Deporte y ocio'),
            ('Videojuegos', 'Videojuegos'),
            ('Libros y música', 'Libros y música'),
            ('Hogar y jardín', 'Hogar y jardín'),
            ('Foto y audio', 'Foto y audio')
        ])
    estados = [('en venta', 'En Venta'), ('vendido', 'Vendido')]
    resultadosporpag = ['15', '30', '45', '60', '75', '90']
    ordenacionlist = [('published ASC', 'Fecha (Más viejos primero)'), ('published DESC', 'Fecha (Más nuevos primero)'), ('distance DESC', 'Distancia Descendente'), ('distance ASC', 'Distancia Ascendente'), ('price ASC', 'Precio Ascendente'), ('price DESC', 'Precio Descendente'), ('views DESC', 'Popularidad descendente')]
    status = SelectField('Estado',
            choices = [
                ('en venta','En Venta'),
                ('vendido','Vendido')
            ])
    keywords = StringField('Palabras Clave')
    minprice = StringField('Precio Mínimo')
    maxprice = StringField('Precio Máximo')
    minpublished = DateField('Start', format = '%Y-%m-%d', description = 'Time that the event will occur')
    maxpublished = DateField('Start', format = '%Y-%m-%d', description = 'Time that the event will occur')
    resultados = SelectField('Resultados Por Página',
            choices = [
                ('15', '15'),
                ('30', '30'),
                ('45', '45'),
                ('60', '60'),
                ('75', '75'),
                ('90', '90')
            ])
    ordenacion = SelectField('Ordenación de Resultados',
            choices = [
                ('published ASC', 'Fecha (Más viejos primero)'),
                ('published DESC', 'Fecha (Más nuevos primero)'),
                ('distance DESC', 'Distancia Descendente'),
                ('distance ASC', 'Distancia Ascendente'),
                ('price ASC', 'Precio Ascendente'),
                ('price DESC', 'Precio Descendente'),
                ('views DESC', 'Popularidad descendente')
            ])
    distancia = StringField('Distancia')
    submit = SubmitField('Buscar')

class Review(FlaskForm):
    stars = IntegerField('Puntuación', [
        validators.DataRequired(message='Es necesario introducir una puntuación entre 1 y 5'),
        validators.NumberRange(min=1, max=5, message='La puntuación debe ser de 1 a 5 estrellas')])
    comment = TextAreaField('Comentario', [
        validators.DataRequired(message='Es necesario escribir un comentario')])
    submit = SubmitField('Publicar Valoración')


class bidPlacementForm(FlaskForm):
    amount = StringField('Cantidad')
    submit = SubmitField('Realizar Puja')

class reportForm(Form):
    category = SelectField('Categoría', 
        choices = [ 
            ('Sospecha de fraude', 'Sospecha de fraude'),
            ('No acudió a la cita', 'No acudió a la cita'),
            ('Mal comportamiento', 'Mal comportamiento'),
            ('Artículo defectuoso', 'Artículo defectuoso'), 
            ('Otros', 'Otros')])
    description = TextAreaField('Descripción del informe', [
        validators.DataRequired(message='Es necesario escribir una descripción')])
    submit = SubmitField('Publicar Informe')

[(14, 'wtforms.BooleanField', 'BooleanField', (['"""Recuerdame"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (15, 'wtforms.SubmitField', 'SubmitField', (['"""Iniciar Sesión"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (43, 'wtforms.SubmitField', 'SubmitField', (['"""Correo de Recuperación"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (52, 'wtforms.RadioField', 'RadioField', (['"""Género"""'], {'choices': "[('hombre', 'Hombre'), ('mujer', 'Mujer')]"}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (53, 'wtforms.SubmitField', 'SubmitField', (['"""Guardar cambios"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (62, 'wtforms.SubmitField', 'SubmitField', (['"""Establecer ubicación"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (75, 'wtforms.SubmitField', 'SubmitField', (['"""Cambiar contraseña"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (84, 'wtforms.SubmitField', 'SubmitField', (['"""Cambiar correo"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (87, 'wtforms.FileField', 'FileField', (['"""Imagen de perfil"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (88, 'wtforms.SubmitField', 'SubmitField', (['"""Establecer imagen"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (89, 'wtforms.SubmitField', 'SubmitField', (['"""Eliminar imagen"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (92, 'wtforms.SubmitField', 'SubmitField', (['"""Eliminar cuenta"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (118, 'wtforms.HiddenField', 'HiddenField', (['"""Latitud"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (119, 'wtforms.HiddenField', 'HiddenField', (['"""Longitud"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (122, 'wtforms.SubmitField', 'SubmitField', (['"""Publicar"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (127, 'wtforms.SelectField', 'SelectField', (['"""Categoría"""'], {'choices': "[('Automoción', 'Automoción'), ('Informática', 'Informática'), ('Moda',\n    'Moda'), ('Deporte y ocio', 'Deporte y ocio'), ('Videojuegos',\n    'Videojuegos'), ('Libros y música', 'Libros y música'), (\n    'Hogar y jardín', 'Hogar y jardín'), ('Foto y audio', 'Foto y audio')]"}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (141, 'wtforms.SelectField', 'SelectField', (['"""Estado"""'], {'choices': "[('en venta', 'En Venta'), ('vendido', 'Vendido')]"}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (146, 'wtforms.StringField', 'StringField', (['"""Palabras Clave"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (147, 'wtforms.StringField', 'StringField', (['"""Precio Mínimo"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (148, 'wtforms.StringField', 'StringField', (['"""Precio Máximo"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (149, 'wtforms.fields.html5.DateField', 'DateField', (['"""Start"""'], {'format': '"""%Y-%m-%d"""', 'description': '"""Time that the event will occur"""'}), False, 'from wtforms.fields.html5 import DateField\n'), (150, 'wtforms.fields.html5.DateField', 'DateField', (['"""Start"""'], {'format': '"""%Y-%m-%d"""', 'description': '"""Time that the event will occur"""'}), False, 'from wtforms.fields.html5 import DateField\n'), (151, 'wtforms.SelectField', 'SelectField', (['"""Resultados Por Página"""'], {'choices': "[('15', '15'), ('30', '30'), ('45', '45'), ('60', '60'), ('75', '75'), (\n    '90', '90')]"}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (160, 'wtforms.SelectField', 'SelectField', (['"""Ordenación de Resultados"""'], {'choices': "[('published ASC', 'Fecha (Más viejos primero)'), ('published DESC',\n    'Fecha (Más nuevos primero)'), ('distance DESC',\n    'Distancia Descendente'), ('distance ASC', 'Distancia Ascendente'), (\n    'price ASC', 'Precio Ascendente'), ('price DESC', 'Precio Descendente'),\n    ('views DESC', 'Popularidad descendente')]"}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (170, 'wtforms.StringField', 'StringField', (['"""Distancia"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (171, 'wtforms.SubmitField', 'SubmitField', (['"""Buscar"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (179, 'wtforms.SubmitField', 'SubmitField', (['"""Publicar Valoración"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (183, 'wtforms.StringField', 'StringField', (['"""Cantidad"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (184, 'wtforms.SubmitField', 'SubmitField', (['"""Realizar Puja"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (187, 'wtforms.SelectField', 'SelectField', (['"""Categoría"""'], {'choices': "[('Sospecha de fraude', 'Sospecha de fraude'), ('No acudió a la cita',\n    'No acudió a la cita'), ('Mal comportamiento', 'Mal comportamiento'), (\n    'Artículo defectuoso', 'Artículo defectuoso'), ('Otros', 'Otros')]"}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (196, 'wtforms.SubmitField', 'SubmitField', (['"""Publicar Informe"""'], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (11, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir un email"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (13, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir una contraseña"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (20, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir un nombre"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (21, 'wtforms.validators.Length', 'validators.Length', ([], {'min': '(4)', 'max': '(50)', 'message': '"""El tamaño máximo del nombre son 50 carácteres"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (23, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir apellidos"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (24, 'wtforms.validators.Length', 'validators.Length', ([], {'min': '(4)', 'max': '(50)', 'message': '"""El tamaño máximo del nombre son 50 carácteres"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (29, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir un email"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (30, 'wtforms.validators.Length', 'validators.Length', ([], {'min': '(1)', 'max': '(50)', 'message': '"""El email no puede contener más de 50 carácteres"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (32, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario una contraseña"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (33, 'wtforms.validators.Length', 'validators.Length', ([], {'min': '(8)', 'message': '"""La contraseña debe tener al menos 8 caracteres"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (36, 'wtforms.validators.EqualTo', 'validators.EqualTo', (['"""password"""'], {'message': '"""Las contraseñas no coinciden"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (42, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir un email"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (47, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir un nombre"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (48, 'wtforms.validators.Length', 'validators.Length', ([], {'min': '(4)', 'max': '(50)', 'message': '"""El tamaño máximo del nombre son 50 carácteres"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (50, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir apellidos"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (51, 'wtforms.validators.Length', 'validators.Length', ([], {'min': '(4)', 'max': '(50)', 'message': '"""El tamaño máximo del nombre son 50 carácteres"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (57, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""No se ha podido obtener la nueva localización"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (60, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""No se ha podido obtener la nueva localización"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (66, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir una contraseña"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (69, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir una contraseña"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (70, 'wtforms.validators.Length', 'validators.Length', ([], {'min': '(8)', 'message': '"""La contraseña debe tener al menos 8 caracteres"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (73, 'wtforms.validators.EqualTo', 'validators.EqualTo', (['"""password"""'], {'message': '"""Las contraseñas no coinciden"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (79, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir una dirección de correo"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (80, 'wtforms.validators.Length', 'validators.Length', ([], {'min': '(1)', 'max': '(50)', 'message': '"""El correo no puede contener más de 50 carácteres"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (82, 'wtforms.validators.EqualTo', 'validators.EqualTo', (['"""email"""'], {'message': '"""Los correos no coinciden"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (99, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir un nombre de producto"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (100, 'wtforms.validators.Length', 'validators.Length', ([], {'min': '(1)', 'max': '(50)', 'message': '"""El tamaño máximo del nombre del producto son 50 carácteres"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (102, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir un precio"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (103, 'wtforms.validators.NumberRange', 'validators.NumberRange', ([], {'min': '(0)', 'max': '(1000000)', 'message': '"""El precio intoducido no es válido (de 0 € a 999.999,99 €)"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (117, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario escribir una descripción"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (175, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario introducir una puntuación entre 1 y 5"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (176, 'wtforms.validators.NumberRange', 'validators.NumberRange', ([], {'min': '(1)', 'max': '(5)', 'message': '"""La puntuación debe ser de 1 a 5 estrellas"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (178, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario escribir un comentario"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (195, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario escribir una descripción"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (115, 'wtforms.validators.DataRequired', 'validators.DataRequired', ([], {'message': '"""Es necesario seleccionar una categoría"""'}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n'), (121, 'wtforms.validators.Optional', 'validators.Optional', ([], {}), False, 'from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField, IntegerField, validators, FileField, MultipleFileField, SelectField, RadioField, HiddenField, DecimalField, TextAreaField\n')]