process.py
3.21 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
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):
self.db = db
self.conn = DBconnection(db)
# 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):
rows = self.conn.query("SELECT * FROM msg WHERE state = ?",(States.queued,))
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
serv = serviceFactory(query[Table.serv])
success = serv.send(query)
if success:
# gurdar como enviado
self.conn.query("UPDATE msg SET state = ? WHERE id = ?",(States.delivered,query[Table.id]))
# 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