Wpp1State.py 3.92 KB
import requests, json, config, datetime, smtplib

class StatePhoneWs():
    """Esta clase consulta el estado de los telefonos y los cachea
    la consulta tiene 30 segundos de valides, para mejorar la perfrmance"""
    
    def __init__(self):
        self.Consultas = {}#{telefono:{"hora": datetime.datetime.now, "estado": self.chequear_stado_WB(telefono)},}

    def chequear_stado_WB(self, telefono):
        if not len(telefono) == 13:
            return({'error': 'Mal cargado el numero de telefono'}) 
        consulta = """{}{}?token={}""".format(config.WS_Status,
        telefono, config.WS_token)
        r = requests.get(consulta)
        j = r.json()
        return(j)

    def ChequearTelefono(self, telefono):
        """Chequea estado es el server remoto si esta conectado se almasena la
        respuesta en cache durante 60 segundos para mejorar performance y si no esta
        disponible no se almasena y la proxima respuesta debera hacerse contra el server
        remoto para asegurarme de q se solucione el problema"""
        test = self.revisarCache(telefono)
        if not test == False:
            return(test)
        W = self.chequear_stado_WB(telefono)
        if "error" in W.keys():#si hay algun error no actualiso el estado en cache
            return(W)
        hora = datetime.datetime.now() + datetime.timedelta(seconds=60)
        self.Consultas[telefono] = {"hora": hora,
        "estado": W}
        print("Chequeando telefono saliente", W)
        return(W)

    def revisarCache(self, telefono):
        if not telefono in self.Consultas.keys():
            return(False)
        cel = self.Consultas[telefono]
        if datetime.datetime.now() < cel["hora"]:
            return(cel["estado"])
        return(False)

class StateMail():
    """Esta clase consulta el estado de los mail server y los cachea
    la consulta tiene 60 segundos de valides, para mejorar la perfrmance"""
    
    def __init__(self):
        self.Consultas = {}#{MailUSer-pass-host-str(port):{"hora": datetime.datetime.now, "estado": self.chequear_stado_WB(telefono)},}
        self.MailRompedor = []

    def chequear_stado_Server(self, User, Pass, Port, Host):
        try:
            self.SMTPcliente(User, Pass, Port, Host)
            consulta = True
        except:
            consulta = False
        return(consulta)

    def ChequearMailServer(self, User, Pass, Port, Host):
        """Chequea estado es el server remoto si esta conectado se almasena la
        respuesta en cache durante 60 segundos para mejorar performance y si no esta
        disponible no se almasena y la proxima respuesta debera hacerse contra el server
        remoto para asegurarme de q se solucione el problema"""
        if Host == "MAILMASIVO":
            return(True)
        test = self.revisarCache(User, Pass, Port, Host)
        if not test == "Vencido":
            return(test)
        W = self.chequear_stado_Server(User, Pass, Port, Host)
        #if False == W:#si hay algun error no actualiso el estado en cache
        #    return(W)
        hora = datetime.datetime.now() + datetime.timedelta(seconds=120)
        self.Consultas[self._GenerarKey(User, Pass, Port, Host)] = {"hora": hora,
        "estado": W}
        print("chequeando servidor de salida", W)
        return(W)

    def revisarCache(self, User, Pass, Port, Host):
        if not self._GenerarKey(User, Pass, Port, Host) in self.Consultas.keys():
            return("Vencido")
        cache = self.Consultas[self._GenerarKey(User, Pass, Port, Host)]
        if datetime.datetime.now() < cache["hora"]:
            return(cache["estado"])
        return("Vencido")

    def _GenerarKey(self, User, Pass,  Port, Host):
        base = """{}-{}-{}-{}"""
        completo = base.format(User, Pass,  str(Port), Host)
        return(completo)

    def SMTPcliente(self, User, Pass, Port, Host):
        dg = smtplib.SMTP(host=Host, port=Port, timeout=10)
        dg.starttls()
        dg.login(User,Pass)
        dg.quit()