def post(self): #Obtener valores ingresados por elusuario username = self.request.get("username") password = self.request.get("password") verify = self.request.get("verify") email = self.request.get("email") #Validar valores ingresados por el usuario vuser = valid_user(username) vpass = valid_pass(password) vverify = valid_verify(password, verify) vemail = valid_email(email) userError = "" passError = "" verifyError = "" emailError = "" #hacer query en la db para ver si el ususrio existe vexiste = False user = query("SELECT * FROM UserInfo WHERE username = :1", username) if user.count(1) > 0: vuser = False vexiste = True if vuser and vpass and vverify and vemail: #hashear el password hashed = bcrypt.hashpw(password, bcrypt.gensalt()) #Poner info en la db y obtener la key (user id) a = UserInfo(username=username, password=hashed, email=email) a.put() user_id = str(a.key().id()) #setear la cookie usando el user_id new_cookie_val = make_secure_val(str(user_id)) self.response.headers.add_header( 'Set-Cookie', 'userId=%s, Path=/' % new_cookie_val) redirectTo = '/home' self.redirect(redirectTo) else: if not vuser: if vexiste: userError = "Ya existe ese usuario" else: userError = "Nombre de usuario invalido" if not vpass: passError = "Password invalido" if not vverify: verifyError = "Password no coincide" if not vemail: emailError = "Email incorrecto" self.write_form(userError, passError, verifyError, emailError, username, email)
def get(self): users = query("SELECT * FROM UserInfo") self.response.headers['Content-Type'] = 'text/plain' for user in users: if (type(user.email) == str): self.response.out.write(user.username + "\t" + user.password + "\t" + user.email + "\n") else: self.response.out.write(user.username + "\t" + user.password + "\n")
def getabr(self, numero): """ Retorna la abreviacion del piloto acorde a su numero. """ pilotos = query("SELECT * FROM Pilotos WHERE numero = :1", numero) piloto = pilotos.get() if pilotos.count() > 0: return piloto.abreviacion else: return ""
def validate(self, username, password): #hacer query en la db para ver si el ususrio existe users = query("SELECT * FROM UserInfo WHERE username = :1", username) for user in users: #Verificar el password if bcrypt.hashpw(password, user.password) == user.password: return str(user.key().id()) return None
def pagina(self, horario_carrera, horario_clasificacion, user, trampa): limiteclasificacion, limitecarrera, now = self.timemanage( horario_carrera, horario_clasificacion) """ Renderizado de la pagina principal. """ #Obtener la lista de pilotos de la BD pilotos = query("SELECT * FROM Pilotos ORDER BY orden ASC") #Convertir las horas a strings horacarrera = horario_carrera.strftime("%A, %d %B %Y; %I:%M %p") horaclasificacion = horario_clasificacion.strftime( "%A, %d %B %Y; %I:%M %p") #Obtener los puntos del usuario actual allusers = [ self.getuserpoints(user.username, user.username, horario_carrera, horario_clasificacion) ] #Obtener la lista de todos los usuarios de la BD usuarios = query("SELECT * FROM UserInfo WHERE username != :1", user.username) for usuario in usuarios: #Obtener los puntos de cada usuario allusers.append( self.getuserpoints(usuario.username, user.username, horario_carrera, horario_clasificacion)) #Obtener los resultados (reales) del la BD resultados = query("SELECT * FROM Resultados WHERE actual = True") resultado = resultados.get() #Renderizar la pagina self.render('main.html', usuario=user.username, horario_carrera=horacarrera, horario_clasificacion=horaclasificacion, pilotos=pilotos, carrera=resultado.granpremio, limitetiempo=config.limitetiempo, limiteclasificacion=limiteclasificacion, limitecarrera=limitecarrera, now=now, trampa=trampa, allusers=allusers)
def getuserpoints(self, username, activeusername, horario_carrera, horario_clasificacion): """Obtiene los puntos de cada usuario y los pone en una lista""" limiteclasificacion, limitecarrera, now = self.timemanage( horario_carrera, horario_clasificacion) resultados = query("SELECT * FROM Resultados ORDER BY fechagp DESC") ptostotales = 0 grandespremios = [] ptospolemans = [] ptosprimeros = [] ptossegundos = [] ptosterceros = [] ptosdecimos = [] ptosdelosgps = [] realpolemans = [] realprimeros = [] realsegundos = [] realterceros = [] realdecimos = [] prepolemans = [] preprimeros = [] presegundos = [] preterceros = [] predecimos = [] for resultado in resultados: #Obtener del la BD las predicciones para el usuario correspondiente predicciones = query( "SELECT * FROM Predicciones WHERE usuario = :1 AND granpremio = :2", username, resultado.granpremio) #Calular los puntos segun las predicciones obtenidas ptospoleman, ptosprimero, ptossegundo, ptostercero, ptosdecimo = self.procesar_puntos( resultado, predicciones) #Crear listas para luego presentar los resultados en una tabla grandespremios.append(resultado.granpremio) ptospolemans.append(ptospoleman) ptosprimeros.append(ptosprimero) ptossegundos.append(ptossegundo) ptosterceros.append(ptostercero) ptosdecimos.append(ptosdecimo) ptosdelosgps.append(ptospoleman + ptosprimero + ptossegundo + ptostercero + ptosdecimo) ptostotales += ptospoleman + ptosprimero + ptossegundo + ptostercero + ptosdecimo realpolemans.append(self.getabr(resultado.poleman)) realprimeros.append(self.getabr(resultado.primero)) realsegundos.append(self.getabr(resultado.segundo)) realterceros.append(self.getabr(resultado.tercero)) realdecimos.append(self.getabr(resultado.decimo)) if username != activeusername and resultado.actual == True: if predicciones.count() > 0: prediccion = predicciones.get() if limiteclasificacion < now: # El usuario acutal no es el que hizo esta prediccion, pero la hora de ingreso ya ha pasado, por tanto se muestra la prediccion prepolemans.append(self.getabr(prediccion.poleman)) else: # El usuario acutal no es el que hizo esta prediccion y la hora de ingreso no ha pasado, por tanto NO se muestra la prediccion prepolemans.append("") if limitecarrera < now: # El usuario acutal no es el que hizo esta prediccion, pero la hora de ingreso ya ha pasado, por tanto se muestra la prediccion preprimeros.append(self.getabr(prediccion.primero)) presegundos.append(self.getabr(prediccion.segundo)) preterceros.append(self.getabr(prediccion.tercero)) predecimos.append(self.getabr(prediccion.decimo)) else: # El usuario acutal no es el que hizo esta prediccion y la hora de ingreso no ha pasado, por tanto NO se muestra la prediccion preprimeros.append("") presegundos.append("") preterceros.append("") predecimos.append("") else: prepolemans.append("") preprimeros.append("") presegundos.append("") preterceros.append("") predecimos.append("") #El usuario actual es el que hizo la prediccion, por lo tanto siempre se muestra else: if predicciones.count() > 0: prediccion = predicciones.get() prepolemans.append(self.getabr(prediccion.poleman)) preprimeros.append(self.getabr(prediccion.primero)) presegundos.append(self.getabr(prediccion.segundo)) preterceros.append(self.getabr(prediccion.tercero)) predecimos.append(self.getabr(prediccion.decimo)) else: prepolemans.append("") preprimeros.append("") presegundos.append("") preterceros.append("") predecimos.append("") return UserPoints(ptostotales, grandespremios, ptospolemans, ptosprimeros, ptossegundos, ptosterceros, ptosdelosgps, realpolemans, realprimeros, realsegundos, realterceros, prepolemans, preprimeros, presegundos, preterceros, len(grandespremios), username, ptosdecimos, realdecimos, predecimos)
def horarioclasificacion(self): """ Retorna la hora en la qualy. """ resultados = query("SELECT * FROM Resultados WHERE actual = True") resultado = resultados.get() return resultado.fechaqualy - datetime.timedelta(hours=5)
def post(self): #Obtener usuario usando cookies user_id_cookie = self.request.cookies.get('userId') user_id_val = check_secure_val(user_id_cookie) user = UserInfo.get_by_id(int(user_id_val)) #Obtner horario de la carrera y de la qualy horario_carrera = self.horariocarrera() horario_clasificacion = self.horarioclasificacion() #Obtener tiempos para determinar si se pueden ingresar predicciones limiteclasificacion, limitecarrera, now = self.timemanage( horario_carrera, horario_clasificacion) #Obtener info ingresada por el usuario en el formulario poleman = self.request.get("poleman") primero = self.request.get("primero") segundo = self.request.get("segundo") tercero = self.request.get("tercero") decimo = self.request.get("decimo") #Obtener el nombre del GP acutal resultados = query("SELECT * FROM Resultados WHERE actual = True") resultado = resultados.get() carrera = resultado.granpremio trampa = "" #Obtener la prediccion actual hecha por el usuario (si es que ya la hizo) predicciones = query( "SELECT * FROM Predicciones WHERE usuario = :1 AND granpremio = :2", user.username, carrera) numpredicciones = predicciones.count() #El usuario ingreso el poleman if poleman != "": if now < limiteclasificacion: #El usuario ya hizo una prediccion, por tanto se la reemplaza if numpredicciones > 0: a = predicciones.get() a.poleman = int(poleman) a.put() #El usuario no ha hecho una prediccion, por tanto se crea una nueva else: a = Predicciones(usuario=user.username, granpremio=carrera, fechagp=horario_carrera, poleman=int(poleman)) a.put() #Ya no se pueden ingresar predicciones else: trampa = "No sea tramposo! Ya no se puede ingresar el poleman!" #El usuario ingreso el primero if primero != "": if now < limitecarrera: #El usuario ya hizo una prediccion, por tanto se la reemplaza if numpredicciones > 0: a = predicciones.get() a.primero = int(primero) a.put() #El usuario no ha hecho una prediccion, por tanto se crea una nueva else: a = Predicciones(usuario=user.username, granpremio=carrera, fechagp=horario_carrera, primero=int(primero)) a.put() else: trampa = "No sea tramposo! Ya no se puede ingresar predicciones!" #El usuario ingreso el segundo if segundo != "": if now < limitecarrera: #El usuario ya hizo una prediccion, por tanto se la reemplaza if numpredicciones > 0: a = predicciones.get() a.segundo = int(segundo) a.put() #El usuario no ha hecho una prediccion, por tanto se crea una nueva else: a = Predicciones(usuario=user.username, granpremio=carrera, fechagp=horario_carrera, segundo=int(segundo)) a.put() else: trampa = "No sea tramposo! Ya no se puede ingresar predicciones!" #El usuario ingreso el tercero if tercero != "": if now < limitecarrera: #El usuario ya hizo una prediccion, por tanto se la reemplaza if numpredicciones > 0: a = predicciones.get() a.tercero = int(tercero) a.put() #El usuario no ha hecho una prediccion, por tanto se crea una nueva else: a = Predicciones(usuario=user.username, granpremio=carrera, fechagp=horario_carrera, tercero=int(tercero)) a.put() else: trampa = "No sea tramposo! Ya no se puede ingresar predicciones!" #El usuario ingreso el decimo if decimo != "": if now < limitecarrera: #El usuario ya hizo una prediccion, por tanto se la reemplaza if numpredicciones > 0: a = predicciones.get() a.decimo = int(decimo) a.put() #El usuario no ha hecho una prediccion, por tanto se crea una nueva else: a = Predicciones(usuario=user.username, granpremio=carrera, fechagp=horario_carrera, decimo=int(decimo)) a.put() else: trampa = "No sea tramposo! Ya no se puede ingresar predicciones!" redirectTo = '/home' self.redirect(redirectTo)
def horariocarrera(self): """ Retorna la hora de la carrera (hora de Ecuador). """ resultados = query("SELECT * FROM Resultados WHERE actual = True") resultado = resultados.get() return resultado.fechagp - datetime.timedelta(hours=5)