Commit c252d8fb by Luciano Barletta

added partial delivered state

1 parent 69d9e8d5
# Multimensajería
#### version 0.5
Este repositorio es un servicio web de Flask en Python3 cuyo propósito es mandar mensajes de todo tipo de formatos a todo tipo de plataformas que tengan una API para ese propósito.
Implementa una base de datos de mensajes a enviar, usa la MAC address del host que pide mandar mensajes para diferenciar las consultas y permitir la posibilidad de que el mensaje venga encriptado.
......@@ -53,7 +55,7 @@ En caso de que no exista el servicio o este no admita el tipo, o que el id no ex
### myserver.com/cons
Por este link se consulta el estado de los mensajes que se quieren enviar, mandando el id bajo 'id' (POST). Se devuelve 'preprocess', 'queued' o 'delivered'. Si fue enviado el mensaje se archiva y no puede ser consultado nuevamente. 'preprocess' significa que el mensaje no recibió parámetros. 'queued' que no todo fue enviado. 'delivered' que fueron enviados todos los archivos.
Por este link se consulta el estado de los mensajes que se quieren enviar, mandando el id bajo 'id' (POST). Se devuelve 'preprocess', 'queued' o 'delivered'. Si fue enviado el mensaje se archiva y no puede ser consultado nuevamente. 'preprocess' significa que el mensaje no recibió parámetros. 'queued' que nada fue enviado. 'partially delivered' que no todo fue enviado (no fue probado). 'delivered' que fueron enviados todos los archivos.
### A saber
......
......@@ -61,19 +61,37 @@ class Process:
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]))
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]))
# 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 = {
......@@ -84,6 +102,7 @@ class Process:
Table.state : row[Table.state],
}
self.conn.insert("history",entities)
return row
# devuelve todas las carpetas de mensajes
......
......@@ -42,7 +42,7 @@ class Wpp1(ServiceBase):
def send(self,data):
types = json.loads(data[Table.type])
succ = True
succ = {}
for file in types:
filepath = data[Table.path] + file
if types[file] == Datatypes.text:
......@@ -52,11 +52,11 @@ class Wpp1(ServiceBase):
if type(text) == bytes:
text = text.decode("utf-8")
result = requests.get(url = Wpp1.URL + Wpp1.URLmode[types[file]],params = {'token':Wpp1.token,'uid':Wpp1.uid,'to':data[Table.dest],'text':text})
succ = succ and result.json()['success']
succ[file] = result.json()['success']
else:
path = requests.post(url = Wpp1.server, files = { 'data' : (file,open(filepath,'rb')) })
result = requests.get(url = Wpp1.URL + Wpp1.URLmode[types[file]],params = {'token':Wpp1.token,'uid':Wpp1.uid,'to':data[Table.dest],'url':Wpp1.server + path.text})
succ = succ and result.json()['success']
succ[file] = result.json()['success']
return succ
def validatetype(self,type):
......@@ -90,12 +90,14 @@ class Mail(ServiceBase):
msg['From'] = self._Mail__username
msg['To'] = data[Table.dest]
msg['Subject'] = info['subject']
succ = {}
for file in types:
filepath = data[Table.path] + file
MIME = self.MIMEmode(file, filepath, types[file])
msg.attach(MIME)
succ[file] = True
self.s.send_message(msg)
return True
return succ
def MIMEmode(self,name,path,datatype):
mode = None
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!