process.py
4.52 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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
from services import serviceFactory
from database import DBconnection
from enums import Services, States, Datatypes, Table
import ipdb, os, json
class Process:
def __init__(self,db,estadoTelefono,estadoMail):
self.db = db
self.conn = DBconnection(db)
self.statePhone = estadoTelefono
self.stateMail = estadoMail
# Guarda la data
def datastore(self,id,path):
entities = {
Table.id : id,
Table.path : path,
Table.state : States.preprocess
}
return self.conn.insert("msg",entities)
# Guarda los parámetros
def paramstore(self,query):
row = self.lookup(query[Table.id])
# id no existe
if type(row) == str:
return row
# el servicio no existe
if not Services.validate(query[Table.serv]):
return "No existe el servicio '" + query[Table.serv] + "'"
types = json.loads(query[Table.type])
filelist = os.listdir(row[Table.path])
for file in types:
# el archivo no existe
if file not in filelist:
return "El archivo '" + file + "' no existe"
serv = serviceFactory(query[Table.serv])
# el tipo del mensaje no se puede enviar por el servicio
if not serv.validatetype(types[file]):
return "El servicio '" + query[Table.serv] + "' no puede enviar el tipo '" + types[file] + "' destinado al archivo '" + file + "'"
# el parametro no es valido
if not serv.validateinfo(query[Table.info]):
return "El servicio '" + query[Table.serv] + "' no cuenta con algún parámetro, sus parámetros son " + str(serv.Parameters)
entities = {
Table.dest : query[Table.dest],
Table.serv : query[Table.serv],
Table.type : query[Table.type],
Table.info : query[Table.info],
Table.state : States.queued
}
error = self.conn.update("msg",(Table.id,query[Table.id]),entities)
if error:
return error
return States.queued
# manda todos los mensajes no enviados
def send(self):
self._send(States.queued,"wpp1")
self._send(States.queued,"mail")
self._send("partially delivered","wpp1")
self._send("partially delivered","mail")
self.stateMail.MailRompedor = []
def _send(self,state,serv):
salio = 0
rows = self.conn.query("SELECT * FROM msg WHERE state = ? and serv = ? ",(state,serv))
print("cantidad pendiente ", serv, len(rows))
for query in DBconnection.parseToTable(rows):
# si no existe la carpeta borrar el mensaje
if not os.path.exists(query[Table.path]):
self.conn.query("DELETE FROM msg WHERE id = ?",(query[Table.id],))
continue
try:
serv = serviceFactory(query[Table.serv])
success = serv.send(query,self.statePhone,self.stateMail)#envia al servicio se salida
salio = salio + 1
except:
success = {'texto': False}
print("Rompio el proseso de envio procces 71")
#print("proces linea 72 success=", success)
d = json.loads(query[Table.type])
partial = False
for file in success:
if success[file] == True:
# borrar archivo de 'type'
del d[file]
# y el archivo mismo
os.remove(query[Table.path] + file)
# se borró algo
partial = True
# todo enviado
if len(d) == 0:
self.conn.query("UPDATE msg SET state = ?, type = ? WHERE id = ?",(States.delivered,json.dumps(d),query[Table.id]))
# parcialmente enviado
elif partial:
self.conn.query("UPDATE msg SET state = ?, type = ? WHERE id = ?",(States.partial,json.dumps(d),query[Table.id]))
if salio > 20:
print("corto para q no se aga larga proces 100")
return()
# devuelve el estado de un mensaje, lo archiva si está enviado
def lookup(self,id):
rows = self.conn.query("SELECT * FROM msg WHERE id = ?",(id,))
if rows == []:
return "El id " + str(id) + " no existe"
rows = DBconnection.parseToTable(rows)
row = rows[0]
if row[Table.state] == States.delivered:
self.conn.query("DELETE FROM msg WHERE id = ?",(id,))
entities = {
Table.path : row[Table.path],
Table.serv : row[Table.serv],
Table.dest : row[Table.dest],
Table.type : row[Table.type],
Table.state : row[Table.state],
}
self.conn.insert("history",entities)
return row
# devuelve todas las carpetas de mensajes
def paths(self):
rows = self.conn.query("SELECT path FROM msg")
paths = []
for row in rows:
paths.append(row[0])
return paths
def deletepath(self,path):
self.conn.query("DELETE FROM msg WHERE path = ?",(path,))