1
0
forked from orson/bachemap
bachemap/forms.py

59 lines
2.6 KiB
Python

from flask_login import UserMixin
from flask_pymongo import PyMongo, ObjectId
from flask_wtf import FlaskForm
from datetime import datetime
from wtforms import StringField, FileField, SubmitField, DateTimeField, SelectField, PasswordField
from wtforms.validators import DataRequired, Length
#Init Mongo
from db import mongo
#User object creation
class User(UserMixin):
def __init__(self,user_data):
self.id = str(user_data['_id'])
self.username = user_data["username"]
self.referral_code = user_data["referral_code"]
self.invited_by = user_data.get('invited_by')
self.is_admin = user_data.get('is_admin', False)
seelf.pwd = user_data.get('pwd')
#Getter method
@staticmethod
def get(user_id):
user_data = mongo.db.users.find_one({"_id": ObjectId(user_id)})
if user_data:
return User(user_data)
else:
return None
#Pin creation form
class PinForm(FlaskForm):
description = StringField('¿Qué estamos viendo?', validators=[DataRequired()])
photo = FileField('Evidencia fotogénica', validators=[DataRequired()])
timedate = DateTimeField(default=datetime.now())
typeofpin = SelectField('Tipo de cosa', choices=['bache', 'coladera', 'obra sin terminar', 'escombro', 'robo-asalto', 'biciestacionamiento', 'mala iluminación', 'bici blanca', 'zapato blanco'])
submit = SubmitField('Agregar')
class LoginForm(FlaskForm):
username = StringField('Usuario', validators=[DataRequired()])
pwd = PasswordField('Tu clave', validators= [DataRequired()])
submit = SubmitField('Entrar')
#decorator to simplify mongo unique validation calls
def Unique(model, field, message=None):
def _unique(form, field_data):
if mongo.db[model.__name__.lower()].find_one({field.name: field_data.data}):
raise ValidationError(message or f"{field.name} must be unique.")
return _unique
class RegistrationForm(FlaskForm):
username = StringField('Nombre de usuarix', validators=[DataRequired(), Unique('users', StringField('username', message="Este usuario ya existe"))])
pwd = PasswordField('Clave', validators=[DataRequired(), Length(min=10), Unique('users', StringField('pwd', message="Esta clave no es muy buena, escoge otra"))])
referral = StringField('ID de quien te invito', [DataRequired()])
submit = SubmitField('Registrar')
#restrict allowed file types~
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']