From 581ffd0a3760fdab37cf1b85ce215661efa37489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ch=C3=A9rifBALDE?= Date: Thu, 19 May 2022 15:06:21 +0200 Subject: [PATCH] 19/05/22 - 15h30 --- GlobalVariable.py | 2 +- email_mgt.py | 74 ++++++++++++++++++++-- main.py | 25 ++++++++ prj_common.py | 158 +++++++++++++++++++++++++++++++++++++++++++++- wrapper.py | 13 +++- 5 files changed, 263 insertions(+), 9 deletions(-) diff --git a/GlobalVariable.py b/GlobalVariable.py index 5e16804..664ca90 100644 --- a/GlobalVariable.py +++ b/GlobalVariable.py @@ -44,7 +44,7 @@ token_fr_pontuation = [] La taille maximal d'un champs à retourner. Au dela de 300 caractère, le système rame ''' -MAX_CARACT = 300 +MAX_CARACT = 250 MAX_CARACT_DEDUIT = 50 TOKEN_SIZE = 25 MAX_CARACT_DETAIL = 500 diff --git a/email_mgt.py b/email_mgt.py index 84b3760..ac4eee2 100644 --- a/email_mgt.py +++ b/email_mgt.py @@ -8,6 +8,7 @@ import datetime import inspect import sys, os import prj_common as mycommon +import GlobalVariable as MYSY_GV locale.setlocale(category=locale.LC_ALL, locale='fr_FR.utf8') @@ -202,7 +203,7 @@ def send_user_init_pwd_mail(token, account_mail): msg = MIMEMultipart("alternative") - msg['Subject'] = '[MySy Training] : Reinitialisez votre mot de passe' + msg['Subject'] = '[MySy Training Technology] : Reinitialisez votre mot de passe' msg['From'] = 'billardman01@hotmail.com' msg['To'] = str(account_mail) @@ -284,8 +285,6 @@ def send_user_init_pwd_mail(token, account_mail): ''' Envoie de l'email de suppression du compte utilisateur ''' - - def send_user_delete_account(token, account_mail): try: tomorrow = datetime.date.today() + datetime.timedelta(days=1) @@ -293,7 +292,7 @@ def send_user_delete_account(token, account_mail): msg = MIMEMultipart("alternative") - msg['Subject'] = '[MySy Training] : Suppression de votre' + msg['Subject'] = '[MySy Training Technology] : Suppression de votre' msg['From'] = 'billardman01@hotmail.com' msg['To'] = str(account_mail) @@ -372,3 +371,70 @@ Le échéant, vous pouvez finaliser la suppression de votre compte en cliquant s exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno)) return False, " Impossible d'envoyer l'email de notification " + + +''' +Cette fonction envoir n'import quel email avec les varibable : +- recever_email +- objet_mail +- message_mail +''' +def SendGenericEmail(mail_recever=None, mail_object=None, mail_message=None): + try: + tomorrow = datetime.date.today() + datetime.timedelta(days=1) + tomorrow_day = tomorrow.strftime("%A") + + print("debut envoi mail de test ") + # on rentre les renseignements pris sur le site du fournisseur + + msg = MIMEMultipart("alternative") + + msg['Subject'] = '[MySy Training Technology] : '+str(mail_object) + msg['From'] = MYSY_GV.INTERNAL_MAIL_SENDER + msg['To'] = str(mail_recever) + + html = ''' + + + +
+

+ Mysy Training Logo

+
+
+
+
+ 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]+" ..."