Wpp1State.py
3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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)},}
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"""
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()