def registrarUsuario(cod, foto=None, imgs=None, db=db):
    filas = db("confirmacion").obtenerFilasValores(cod)
    print filas
    for elem in db("confirmacion").obtenerFilasId(cod):
        db("confirmacion").delFila(elem)
    token = zu.randomString()
    while token in db.obtenerColumna("valor", "tokens"):
        token = zu.randomString()

    if cod == filas[4]:
        db("usuarios").insertar(filas[0], filas[1], filas[2], filas[3], foto,
                                imgs, token)
        db("tokens").insertar(filas[2], token, str(zu.DateTime()),
                              str(zu.DateTime(w=4)))
        i = len(db.obtenerColumna("token", "usuarios")) - 1
        db("tokens").relacionar(i,
                                "usuario",
                                tabla="usuarios",
                                campo="correo",
                                id=i)
        db("usuarios").relacionar(i,
                                  "token",
                                  tabla="tokens",
                                  campo="valor",
                                  id=i)
        db.grabar(root_db)
    else:
        print filas, " - ", cod
        print "el codigo de confirmacion no coincide"
		def closeSession(self,token):
			if self.request():
				filas=self.db("usuarios").obtenerFilasValores(token)
				if filas[6]==token:
					self.db("usuarios").modificarCampo(self.db("usuarios").obtenerFilasId(token)[0],"login",False)
					newToken=zu.randomString()
					while newToken in self.db.obtenerColumna("valor","tokens"):
						newToken=zu.randomString()
					self.db("tokens").modificarCampo(self.db("tokens").obtenerFilasId(token)[0],"valor",newToken)
					return self.grabar()
					
				else:
					return False
def closeSession(token, db=db):
    filas = db("usuarios").obtenerFilasValores(token)

    if filas[6] == token:
        db("usuarios").modificarCampo(
            db("usuarios").obtenerFilasId(token)[0], "login", False)

        newToken = zu.randomString()

        while newToken in db.obtenerColumna("valor", "tokens"):
            newToken = zu.randomString()
        db("tokens").modificarCampo(
            db("tokens").obtenerFilasId(token)[0], "valor", newToken)
        db.grabar(root_db)
        return True
    else:
        return False
		def registrarUsuario2(self,nick,email,password,avatar,hours=4):
			
			if self.request():
				muere=str(zu.DateTime(H=hours))
				x = datetime.datetime.now()
				valido=None
				usuarios=self.obtenerFilas("Usuarios")
				i=len(usuarios)
				while valido==None:
					token=zu.randomString()
					for fila in usuarios:
						for campos in fila[1][0]:
							keys=campos.keys()
							if "Email" in keys:
								if email==campos["value"]:
									valido=False
							elif "Token" in keys:
								if token==campos["value"]:
									valido=False
					if valido==None:
						valido=True
					else:
						valido=None

				self.db("Usuarios").insertar(nick,
						[[
						 {"Usuario":"text","name":"usuario","value":nick},
						 {"Email":"text","name":"email","value":email},
						 {"Password":"******","name":"password","value":password},
						 {"Avatar":"select","name":"avatar","value":avatar,"opcion":1},
						 {"Token":"hidden","name":"token","value":token},
						 {"Muere":"hidden","name":"muere","value":muere},
						 {"Login":"******","name":"login","value":True},
						]],
						{"Usuario":i},
					   zu.DateTime(),
					   []
					   )
				self.grabar()
				
				return True
		def reportarError(self,errores):
			"""
			error=[[[exc_type,exc_obj,exc_tb],[direccion]],]
			"""
			if self.request():
				msj=""
				tabla=self.obtenerFilas("Log")

				import traceback
				import os
				
				lineascod=[]

				for error in errores:
					
					
					lineas=[]
					
					cuenta=0
					for linea in traceback.format_exception(error[0][0],error[0][1],error[0][2]):
						if "line" in linea:
							lineas.append(int(linea.split(",")[1].replace(" line ","")))

							cuenta=linea.count("<string>")
					msj+="".join(traceback.format_exception(error[0][0],error[0][1],error[0][2]))
					i=0

 					print lineas

					for v in range(cuenta+1):
						

						i=msj.find("<string>",i+1)
						if i+len("<string>")< len(msj):

							msj=msj[:i]+error[1][v]+msj[i+len("<string>"):]
						else:

							msj=msj[:i]+error[1][v]

						
						f=open(os.path.abspath(error[1][v]),"r")
						rlineas=f.readlines()
						
						
						lineascod.append(rlineas[lineas[v]-1])


						f.close()


				

				
				token=zu.randomString()
				anteriores=[]

				for elem in tabla:
					anteriores.append(elem[0])

				while token in anteriores:
					token=zu.randomString()
				i=0
				cuenta=msj.count("\n")-1

				
				for salto in range(cuenta-1):
					i=msj.find("\n",i+1)
					i=msj.find("\n",i+1)

					try:
						msj=msj[:i]+"\n\n"+lineascod[salto]+msj[i:]
						i=msj.find("\n",i+1)
						i=msj.find("\n",i+1)
					except:
						if salto<len(lineascod)-1:
							msj=msj[:i]+"\n\n"+lineascod[salto]
				print tabla[-1][1]	
				if tabla!=[] and tabla[-1][1]!=msj:
					
					self.db("Log").insertar(str(token),
						msj,
						{"Error":len(tabla)},
						zu.DateTime(),
						False
						)

					return [self.grabar(),token]
				elif tabla==[]:

					
					self.db("Log").insertar(str(token),
						msj,
						{"Error":len(tabla)},
						zu.DateTime(),
						False
						)

					return [self.grabar(),token]
				else:

					return [self.grabar(),tabla[-1][0]]
		def login2(self,email,password):
			if self.request():
				
				muere=str(zu.DateTime(H=1))
				
				valido=None
				usuarios=self.obtenerFilas("Usuarios")
				c=0
				
				

				i=0
				l=[]

				for k,fila in enumerate(usuarios):
					
					i=k
					
					for campos in fila[1][0]:
						keys=campos.keys()
						if "Email" in keys:
							
							if email==campos["value"]:
								valido=False
								l.append(fila[1][0])

								break
					if valido==False:
						break
				valido=None
				
				


				
				if l!=[] and l[0][1]["value"]==email and l[0][2]["value"]==password:
					
					nick=l[0][0]["value"]
					avatar=l[0][3]["value"]
					while valido!=True:
						pasa=True

						token=zu.randomString()
						for fila in usuarios:
							if token==fila[1][0][4]["value"]:
								pasa=False
						if pasa==True:
							valido=True
					

					self.db("Usuarios").modificarCampo(i,"Contenido",
							[[
							 {"Usuario":"text","name":"usuario","value":nick},
							 {"Email":"text","name":"email","value":email},
							 {"Password":"******","name":"password","value":password},
							 {"Avatar":"select","name":"avatar","value":avatar,"opcion":1},
							 {"Token":"hidden","name":"token","value":token},
							 {"Muere":"hidden","name":"muere","value":muere},
							 {"Login":"******","name":"login","value":True},
							]]
							)
			
					self.grabar()
					
					return token
				else:
					return False