2024-10-06 23:49:26 +00:00
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 ) :
2024-10-07 00:12:31 +00:00
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 ' )
2024-10-06 23:49:26 +00:00
#restrict allowed file types~
def allowed_file ( filename ) :
return ' . ' in filename and filename . rsplit ( ' . ' , 1 ) [ 1 ] . lower ( ) in app . config [ ' ALLOWED_EXTENSIONS ' ]