19/05/22 - 15h30
parent
176c5fed94
commit
581ffd0a37
|
@ -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
|
||||
|
|
74
email_mgt.py
74
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 = '''
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
<div style="background-color:#eee;padding:0px;text-align:center;width:100%">
|
||||
<h2 style="font-family:Georgia, 'Times New Roman', Times, serif;color#454349;">
|
||||
<img src="http://88.170.110.220/img/MYSY-LOGO-BLUE.png" alt="Mysy Training Logo" width="110px" height="70px"/> </h2>
|
||||
</div>
|
||||
<div style="padding:20px 0px;text-align:center;font-family:Georgia, 'Times New Roman', Times, serif;color#454349;font-size:2rem;">
|
||||
<div style="width:100%">
|
||||
<div style="text-align:center;">
|
||||
Bonjour
|
||||
<div style="padding:20px 0px;text-align:center;font-family:Georgia, 'Times New Roman', Times, serif;color#454349;font-size:1.2rem;">
|
||||
|
||||
Message de <font color="green">MySy-Training Technology </font>.<br/>
|
||||
{mymessage}
|
||||
</div>
|
||||
</body>
|
||||
</html> '''.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
|
25
main.py
25
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")
|
||||
|
||||
|
|
158
prj_common.py
158
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, []
|
||||
|
|
13
wrapper.py
13
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]+" ..."
|
||||
|
|
Loading…
Reference in New Issue