Commit c252d8fb by Luciano Barletta

added partial delivered state

1 parent 69d9e8d5
# Multimensajería # 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. 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. 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 ...@@ -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 ### 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 ### A saber
......
...@@ -61,19 +61,37 @@ class Process: ...@@ -61,19 +61,37 @@ class Process:
if not os.path.exists(query[Table.path]): if not os.path.exists(query[Table.path]):
self.conn.query("DELETE FROM msg WHERE id = ?",(query[Table.id],)) self.conn.query("DELETE FROM msg WHERE id = ?",(query[Table.id],))
continue continue
serv = serviceFactory(query[Table.serv]) serv = serviceFactory(query[Table.serv])
success = serv.send(query) success = serv.send(query)
if success: d = json.loads(query[Table.type])
# gurdar como enviado partial = False
self.conn.query("UPDATE msg SET state = ? WHERE id = ?",(States.delivered,query[Table.id]))
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 # devuelve el estado de un mensaje, lo archiva si está enviado
def lookup(self,id): def lookup(self,id):
rows = self.conn.query("SELECT * FROM msg WHERE id = ?",(id,)) rows = self.conn.query("SELECT * FROM msg WHERE id = ?",(id,))
if rows == []: if rows == []:
return "El id " + str(id) + " no existe" return "El id " + str(id) + " no existe"
rows = DBconnection.parseToTable(rows) rows = DBconnection.parseToTable(rows)
row = rows[0] row = rows[0]
if row[Table.state] == States.delivered: if row[Table.state] == States.delivered:
self.conn.query("DELETE FROM msg WHERE id = ?",(id,)) self.conn.query("DELETE FROM msg WHERE id = ?",(id,))
entities = { entities = {
...@@ -84,6 +102,7 @@ class Process: ...@@ -84,6 +102,7 @@ class Process:
Table.state : row[Table.state], Table.state : row[Table.state],
} }
self.conn.insert("history",entities) self.conn.insert("history",entities)
return row return row
# devuelve todas las carpetas de mensajes # devuelve todas las carpetas de mensajes
......
...@@ -42,7 +42,7 @@ class Wpp1(ServiceBase): ...@@ -42,7 +42,7 @@ class Wpp1(ServiceBase):
def send(self,data): def send(self,data):
types = json.loads(data[Table.type]) types = json.loads(data[Table.type])
succ = True succ = {}
for file in types: for file in types:
filepath = data[Table.path] + file filepath = data[Table.path] + file
if types[file] == Datatypes.text: if types[file] == Datatypes.text:
...@@ -52,11 +52,11 @@ class Wpp1(ServiceBase): ...@@ -52,11 +52,11 @@ class Wpp1(ServiceBase):
if type(text) == bytes: if type(text) == bytes:
text = text.decode("utf-8") 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}) 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: else:
path = requests.post(url = Wpp1.server, files = { 'data' : (file,open(filepath,'rb')) }) 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}) 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 return succ
def validatetype(self,type): def validatetype(self,type):
...@@ -90,12 +90,14 @@ class Mail(ServiceBase): ...@@ -90,12 +90,14 @@ class Mail(ServiceBase):
msg['From'] = self._Mail__username msg['From'] = self._Mail__username
msg['To'] = data[Table.dest] msg['To'] = data[Table.dest]
msg['Subject'] = info['subject'] msg['Subject'] = info['subject']
succ = {}
for file in types: for file in types:
filepath = data[Table.path] + file filepath = data[Table.path] + file
MIME = self.MIMEmode(file, filepath, types[file]) MIME = self.MIMEmode(file, filepath, types[file])
msg.attach(MIME) msg.attach(MIME)
succ[file] = True
self.s.send_message(msg) self.s.send_message(msg)
return True return succ
def MIMEmode(self,name,path,datatype): def MIMEmode(self,name,path,datatype):
mode = None 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!