+ Bonjour
+
+
+ Message de MySy-Training Technology .
+ {mymessage}
+
+
+ '''.format(mymessage=mail_message)
+
+ html_mime = MIMEText(html, 'html')
+
+ # msg.attach(texte_mime)
+ msg.attach(html_mime)
+
+ print("html_mime =" + str(html))
+
+ toaddr = str(mail_recever)
+ cc = ['cbalde@mysy-training.com']
+ toaddrs = [toaddr] + cc
+
+ # msg.attach(MIMEText(open(filename).read()))
+
+ with smtplib.SMTP(smtp_address, port) as server:
+ server.starttls() # Secure the connection
+
+ server.login(user, password)
+ server.sendmail(sender, toaddrs, msg.as_string())
+ mycommon.myprint("mail successfully sent to " + str(toaddrs))
+
+ return True
+ except Exception as e:
+ exc_type, exc_obj, exc_tb = sys.exc_info()
+ print(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
+ return False
\ No newline at end of file
diff --git a/main.py b/main.py
index 9878899..751ef97 100644
--- a/main.py
+++ b/main.py
@@ -1010,6 +1010,31 @@ def mysy_recherche_levenshtein_orig():
status, result = TP.mysy_recherche_levenshtein_orig()
return jsonify(status=status, message=result)
+'''
+Cette API est le cron qui traite les emails stockes dans la collection
+'user_message'
+'''
+@app.route('/myclass/api/CronUSerMessage_Mail/', methods=['GET','POST'])
+@crossdomain(origin='*')
+def CronUSerMessage_Mail():
+ # On recupere le corps (payload) de la requete
+ payload = request.form.to_dict()
+ print(" ### payload = ", payload)
+ status, date_treatment, result = mycommon.CronUSerMessage_Mail()
+ return jsonify(status=status, date_treatment = str(date_treatment), message=result)
+
+'''
+Juste une API pour tester de ptite choses
+'''
+@app.route('/myclass/api/testch/', methods=['GET','POST'])
+@crossdomain(origin='*')
+def testch():
+ # On recupere le corps (payload) de la requete
+ payload = request.form.to_dict()
+ print(" ### payload = ", payload)
+ status, result = mycommon.Reordertab()
+ return jsonify(status=status, message=result)
+
if __name__ == '__main__':
print(" debut api")
diff --git a/prj_common.py b/prj_common.py
index 84e6d76..d146130 100644
--- a/prj_common.py
+++ b/prj_common.py
@@ -4,6 +4,8 @@ import textdistance
from datetime import datetime
import logging
import secrets
+
+from bson import ObjectId
from pymongo import MongoClient
import inspect
from werkzeug.utils import secure_filename
@@ -19,7 +21,8 @@ import GlobalVariable as MYSY_GV
from serpapi import GoogleSearch
import prj_common as mycommon
import re
-
+import email_mgt as email_mgt
+import random
def myprint(message = ""):
logging.info(str(datetime.now()) + " : "+str(message) )
@@ -638,3 +641,156 @@ def CreateMyCode():
exc_type, exc_obj, exc_tb = sys.exc_info()
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, '-1'
+
+
+
+'''
+Cette fonction va aller cherche tous les messages à envoyer
+dans la collection 'user_message' et declencher le traitement
+adequat
+'''
+def CronUSerMessage_Mail():
+ try:
+ nb_message = 0
+ coll_message = MYSY_GV.dbname['user_message']
+ my_today = datetime.today()
+
+
+ for val in coll_message.find({'sent':'0', 'valide':'1', 'type':'email'}):
+ ismail_traited = '1'
+ error_message = ""
+ nb_message = nb_message + 1
+ print(" traitement du message : "+str(val))
+
+
+ mail_recever = ""
+ if ("recever_mail" in val.keys()):
+ if val['recever_mail']:
+ mail_recever = str(val['recever_mail']).strip()
+
+ mail_object = ""
+ if ("object" in val.keys()):
+ if val['object']:
+ mail_object = str(val['object']).strip()
+
+ message = ""
+ if ("message" in val.keys()):
+ if val['message']:
+ message = str(val['message']).strip()
+
+ # pattern des email
+ patter_mail = re.compile(r"^[\w\.]+@([\w-]+\.)+[\w]{2,4}$")
+
+ if (re.match(patter_mail, str(mail_recever))):
+ if( len(mail_object) == 0 or len(message) == 0 ):
+ myprint(" WARNING : Impossible d'enboyer le mail au destinataire. l'objet ou le message sont vides : mail_object = "
+ + str(mail_object)+ " ou message = "+str(message))
+ ismail_traited = 'error'
+ error_message = "l'objet ou le message sont vides"
+
+ else:
+ if( email_mgt.SendGenericEmail(mail_recever, mail_object, message) is False ):
+ ismail_traited = 'error'
+ error_message = " Erreur SMPT "
+
+ # envoyer le mail
+ else:
+ myprint(" WARNING : Impossible d'envoyer le mail au destinataire. format incorrecte: "+str(mail_recever))
+ ismail_traited = 'error'
+ error_message = "format du mail receveur est incorrecte "
+
+
+ '''
+ Mise à jour du statut du message
+ '''
+ ret_val = coll_message.find_one_and_update({'_id': ObjectId(val['_id']),},
+ {"$set": {'sent':str(ismail_traited),
+ 'error_message':str(error_message)}},
+ return_document=ReturnDocument.AFTER
+ )
+
+ if (ret_val and ret_val['_id']):
+ nb_doc = str(ret_val['_id'])
+ myprint(" le message = " + str(nb_doc)+" a bien été mise à jour")
+
+ else:
+ myprint(
+ str(inspect.stack()[0][3]) + " WARNING : Impossible de mettre à jour le user_message = " + str(
+ nb_doc))
+
+
+ return True, str(my_today), str(nb_message) + " traite (s) : OK"
+ except Exception as e:
+ exc_type, exc_obj, exc_tb = sys.exc_info()
+ print(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
+ return False,str(datetime.today()), " Impossible de traiter les demandes d'envoi d'email "
+
+
+
+'''
+Cette fonction prend un tableau
+et retourn le meme tableau mais dans un order aléatoire
+/!\ cette fonction est trop lente, je ne peux l'utiliser
+'''
+
+def RendomizeTab(table):
+ try:
+
+ if( table.count() <= 0 ):
+ print(" impossible de rendomize")
+ return False, []
+
+ taille = table.count()-1
+ new_tab = []
+ new_tab_cpt = 0
+ i = 0
+
+ while( new_tab_cpt <= taille ):
+ cpt = random.randint(0, taille)
+ #print("cpt = " + str(cpt) + " - len(table) = " + str(table.count()))
+ #print(" ANALYSE DE " + str(table[cpt]['_id']))
+
+ if( table[cpt] not in new_tab ):
+ #print(" AJOUT DE "+str(table[cpt]['_id']))
+ new_tab.append(table[cpt])
+ new_tab_cpt = new_tab_cpt +1
+
+ return True, new_tab
+ except Exception as e:
+ exc_type, exc_obj, exc_tb = sys.exc_info()
+ print(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
+ return False, []
+
+
+
+def Reordertab():
+ try:
+
+ coll_name = MYSY_GV.dbname['myclass']
+ table = coll_name.find({'trainer':'PYRAMYD'},
+ {"external_code": 1, "title": 1, "_id": 1, "url": 1, })
+
+ print(str(table.count()))
+ taille = table.count()-1
+ new_tab = []
+ new_tab_cpt = 0
+ i = 0
+
+ while( new_tab_cpt <= taille ):
+ cpt = random.randint(0, taille)
+ #print("cpt = " + str(cpt) + " - len(table) = " + str(table.count()))
+ #print(" ANALYSE DE " + str(table[cpt]['_id']))
+
+ if( table[cpt] not in new_tab ):
+ #print(" AJOUT DE "+str(table[cpt]['_id']))
+ new_tab.append(table[cpt])
+ new_tab_cpt = new_tab_cpt +1
+
+
+
+
+ return True, new_tab
+ except Exception as e:
+ exc_type, exc_obj, exc_tb = sys.exc_info()
+ print(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
+ return False, []
diff --git a/wrapper.py b/wrapper.py
index b9299cc..96b52b5 100644
--- a/wrapper.py
+++ b/wrapper.py
@@ -116,7 +116,7 @@ def update_class_by_attribut(objId, attribut, value):
return False
-
+import random
def get_all_class(diction):
try:
@@ -179,9 +179,16 @@ def get_all_class(diction):
val_tmp = 1
insertObject = []
+
+
+
for x in coll_name.find({'valide':'1', 'locked':'0'}, {"_id": 0, "indexed": 0, "indexed_desc": 0, "indexed_obj": 0, "indexed_title": 0,
- "valide": 0, "locked": 0, "partner_owner_recid": 0, }):
- #mycommon.myprint("AVANT ==> "+str(x['description']))
+ "valide": 0, "locked": 0, "partner_owner_recid": 0, }).sort(
+ [ ("_id", pymongo.DESCENDING),]):
+
+
+
+ #print("AVANT ==> "+str(x['description']))
val = x['description']
if( len(x['description']) > MYSY_GV.MAX_CARACT ):
x['description'] = val[:MYSY_GV.MAX_CARACT]+" ..."