diff --git a/class_mgt.py b/class_mgt.py index 3801b4b..1ea7a24 100644 --- a/class_mgt.py +++ b/class_mgt.py @@ -1495,3 +1495,95 @@ def add_class_mass(file=None, Folder=None, diction=None): exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) return False, "Impossible d'inserer les formation en masse " + + +''' +Cette fonction retourne les formation par metier +- la thématique est defini par un nouveau champ appelé "metier" +''' +def get_class_by_metier(diction): + try: + + ''' + # Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés + # Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API + # Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste + # field_list. + ''' + field_list = ['metier', 'token' 'user_ip', 'user_country_code', + 'user_country_name', 'user_city', 'user_postal', 'user_latitude', 'user_longitude', 'user_state'] + + incom_keys = diction.keys() + for val in incom_keys: + if val not in field_list: + mycommon.myprint(str(inspect.stack()[0][ + 3]) + " - Creation partner account : Le champ '" + val + "' n'existe pas, Creation formation annulée") + return False, " Impossible de recuperer la formation" + + ''' + Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente, + On controle que les champs obligatoires sont presents dans la liste + ''' + field_list_obligatoire = ['token', 'metier'] + + for val in field_list_obligatoire: + if val not in diction: + mycommon.myprint( + str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ") + return False, " Impossible de recuperer la formation" + + # recuperation des paramettre + mydata = {} + my_metier = "" + my_token = "" + + if ("internal_url" in diction.keys()): + if diction['metier']: + my_metier = diction['internal_url'] + + if ("token" in diction.keys()): + if diction['token']: + my_token = diction['token'] + + coll_name = MYSY_GV.dbname['myclass'] + + RetObject = [] + + + for retVal in coll_name.find({'valide': '1', 'locked': '0', 'metier': str(my_metier)}, + {"_id": 0, "indexed": 0, "indexed_desc": 0, "indexed_obj": 0, "indexed_title": 0, + "valide": 0, "locked": 0, "partner_owner_recid": 0, } + ): + + print(" retval " + str(retVal)) + + if ("description" in retVal.keys()): + tmp_str = retVal['description'] + if (len(retVal['description']) > MYSY_GV.MAX_CARACT_DETAIL): + retVal['description'] = tmp_str[:MYSY_GV.MAX_CARACT_DETAIL] + " ..." + + if ("objectif" in retVal.keys()): + tmp_str = retVal['objectif'] + if (len(retVal['objectif']) > MYSY_GV.MAX_CARACT_DETAIL): + retVal['objectif'] = tmp_str[:MYSY_GV.MAX_CARACT_DETAIL] + " ..." + + if ("programme" in retVal.keys()): + tmp_str = retVal['programme'] + if (len(retVal['programme']) > MYSY_GV.MAX_CARACT_DETAIL): + retVal['programme'] = tmp_str[:MYSY_GV.MAX_CARACT_DETAIL] + " ..." + + if ("pedagogie" in retVal.keys()): + tmp_str = retVal['pedagogie'] + if (len(retVal['pedagogie']) > MYSY_GV.MAX_CARACT_DETAIL): + retVal['pedagogie'] = tmp_str[:MYSY_GV.MAX_CARACT_DETAIL] + " ..." + + # mycommon.myprint(str(retVal)) + user = retVal + RetObject.append(JSONEncoder().encode(user)) + + return True, RetObject + + except Exception as e: + exc_type, exc_obj, exc_tb = sys.exc_info() + mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) + return False, "Impossible de recuperer les formations par metier" \ No newline at end of file diff --git a/data_indexees.csv b/data_indexees.csv index 711e255..3bb0a8a 100644 --- a/data_indexees.csv +++ b/data_indexees.csv @@ -1,94 +1,10 @@ ,index,mots,occurence,moyenne,id_formation,source_field -0,0,savoir,1,0.03," +0,0,startup,1,0.33," lever-des-fonds-pour-ma-startup --3",default -1,1,acteur,1,0.03," +-2",title +1,1,fond,1,0.33," lever-des-fonds-pour-ma-startup --3",default -2,2,reussir,1,0.03," +-2",title +2,2,lever,1,0.33," lever-des-fonds-pour-ma-startup --3",default -3,3,interlocuteur,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -4,4,fond,3,0.09," -lever-des-fonds-pour-ma-startup --3",default -5,5,cour,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -6,6,entrepreneurial,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -7,7,preparer,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -8,8,levee,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -9,9,post,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -10,10,code,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -11,11,indispensable,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -12,12,facile,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -13,13,comment,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -14,14,familiariser,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -15,15,certain,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -16,16,attendent,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -17,17,phase,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -18,18,projet,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -19,19,startup,2,0.06," -lever-des-fonds-pour-ma-startup --3",default -20,20,vocabulaire,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -21,21,convaincre,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -22,22,lorsque,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -23,23,toujour,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -24,24,souvent,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -25,25,investissement,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -26,26,lever,2,0.06," -lever-des-fonds-pour-ma-startup --3",default -27,27,maitriser,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -28,28,aider,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -29,29,but,1,0.03," -lever-des-fonds-pour-ma-startup --3",default -30,30,technique,1,0.03," -lever-des-fonds-pour-ma-startup --3",default +-2",title diff --git a/ela_output_test_file_pandas_2.txt b/ela_output_test_file_pandas_2.txt index d902078..2b33815 100644 --- a/ela_output_test_file_pandas_2.txt +++ b/ela_output_test_file_pandas_2.txt @@ -1,34 +1,6 @@ - mots ... source_field -0 savoir ... default -1 acteur ... default -2 reussir ... default -3 interlocuteur ... default -4 fond ... default -5 cour ... default -6 entrepreneurial ... default -7 preparer ... default -8 levee ... default -9 post ... default -10 code ... default -11 indispensable ... default -12 facile ... default -13 comment ... default -14 familiariser ... default -15 certain ... default -16 attendent ... default -17 phase ... default -18 projet ... default -19 startup ... default -20 vocabulaire ... default -21 convaincre ... default -22 lorsque ... default -23 toujour ... default -24 souvent ... default -25 investissement ... default -26 lever ... default -27 maitriser ... default -28 aider ... default -29 but ... default -30 technique ... default + mots occurence ... id_formation source_field +0 startup 1 ... \nlever-des-fonds-pour-ma-startup\n-2 title +1 fond 1 ... \nlever-des-fonds-pour-ma-startup\n-2 title +2 lever 1 ... \nlever-des-fonds-pour-ma-startup\n-2 title -[31 rows x 5 columns] \ No newline at end of file +[3 rows x 5 columns] \ No newline at end of file diff --git a/email_mgt.py b/email_mgt.py index d02c2f0..301df78 100644 --- a/email_mgt.py +++ b/email_mgt.py @@ -40,9 +40,8 @@ def send_user_account_mail(message, account_mail): msg['To'] = str(account_mail) - - html = ''' - + html = ''' + @@ -50,16 +49,14 @@ def send_user_account_mail(message, account_mail):

Mysy Training Logo

-
+
-
+
Bonjour -
- - Votre adresse e-mail a bien été enregistrée sur le site MySy-Training.
- Pour valider votre compte, veuillez cliquer sur le lien ci-dessous : -
-
+
+ Vous avez fait une demande de création de profil sur mysy-training.com.
+Pour activer votre compte, veuillez cliquer sur le lien ci-dessous : +

- -
- - + + +
+ NB : +
    +
  • Si vous n'arrivez pas jusqu'au bout de la procédure d'inscription, il faudra recommencer l'inscription depuis le début (le lien d’activation n'est valable que pour la procédure en cours).
  • +
  • Si vous n'avez pas demandé l'ouverture d'un compte MYSY Training veuillez ignorer cet e-mail.
  • +
  • Si vous avez des questions ou des commentaires, contactez-nous sur les plateformes suivantes : + + Facebook +   + + + LinkedIn +   + + + Twitter +   + + +
  • +
+

Cordialement
MySy Training Technology
@@ -79,12 +96,16 @@ def send_user_account_mail(message, account_mail):

- + +
+ +Ce mail a été envoyé à : {destinataire}" +Ce mail vous est adressé par MYSY Training dont le siège social est situé au 1 Cr du Havre, 75008 Paris. +Conformément à la Loi Informatique et Liberté Loi n° 78-17 du 6 janvier 1978 modifiée et au Règlement Général sur la Protection des Données Règlement (UE) 2016/679 du Parlement européen et du Conseil du 27 avril 2016 dit RGPD, vous disposez d'un droit d'accès, de rectification, d'effacement, de limitation et d'opposition au traitement de vos données. Vous pouvez exercer vos droits par courrier postal envoyé à : MYSY Training 1 Cr du Havre, 75008 Paris ou par mail : contact@mysy-training.com. +
- - - '''.format(code=tomorrow_day, objId=message) + '''.format(code=tomorrow_day, objId=message, destinataire=account_mail) html_mime = MIMEText(html, 'html') @@ -135,8 +156,7 @@ def send_user_thks_mail(message, account_mail): msg['To'] = str(account_mail) html = ''' - - + @@ -147,15 +167,32 @@ def send_user_thks_mail(message, account_mail):

Mysy Training Logo

-
+
-
+
Bonjour -
+
Vous venez d'activer votre compte sur le moteur de recherche MySy-Training.
- Merci à vous. + le processus de création de compte sur mysy-training.com s'est déroulé avec succès.
+

+ Pour accéder aux services proposés par MYSY Training, vous pouvez vous connecter en utilisant votre adresse mail et votre mot de passe.
+En cas de perte de votre mot de passe, veuillez utiliser la fonction « MOT DE PASSE OUBLIE ? » sur la page de connexion et les informations requises seront envoyées à l'adresse électronique que vous avez indiquée lors de l'inscription.
+

+ +

+MySy Training Technology est un moteur de recherche exclusivement dédié à la formation.
+Il met le profil de l’utilisateur au cœur du système pour trouver la formation la plus adaptée à sa situation.
+Des algorithmes spécifiquement conçus pour le monde de la formation nous permettent d’adresser un large éventail de profils.
+Quel que soit votre situation, que vous soyez malvoyant, mal entendant, tout simplement à la recherche de la formation qui prend en compte vos besoins, le moteur de recherche MySy-T est là pour vous.
+

+Cordialement. +
+ MySy Training Technology
+Contact : +337 69 20 39 45
+Email : contact@mysy-training.com
+


@@ -164,15 +201,15 @@ def send_user_thks_mail(message, account_mail): Suivez l'actualité des formations depuis nos medias :
- + Facebook   - + LinkedIn   - + Twitter   @@ -186,67 +223,16 @@ def send_user_thks_mail(message, account_mail):
-
-
-
-
-
MySy Training Technology
- À propos de nous - Notre vision - Nous contacter -
+
-
-
Contact Us
- Paris - Geneve - Bruxelles -
+Ce mail a été envoyé à : {destinataire}" +Ce mail vous est adressé par MYSY Training dont le siège social est situé au 1 Cr du Havre, 75008 Paris. +Conformément à la Loi Informatique et Liberté Loi n° 78-17 du 6 janvier 1978 modifiée et au Règlement Général sur la Protection des Données Règlement (UE) 2016/679 du Parlement européen et du Conseil du 27 avril 2016 dit RGPD, vous disposez d'un droit d'accès, de rectification, d'effacement, de limitation et d'opposition au traitement de vos données. Vous pouvez exercer vos droits par courrier postal envoyé à : MYSY Training 1 Cr du Havre, 75008 Paris ou par mail : contact@mysy-training.com. +
+ - -
-
-
-
-
- © 2022 Mysy Training Technology. Tous droits réservés. MySy Training Technology est une marque déposée. - Mentions légales. -
-
- - - - '''.format(code=tomorrow_day, objId=message) + + '''.format(code=tomorrow_day, objId=message, destinataire=account_mail) html_mime = MIMEText(html, 'html') diff --git a/main.py b/main.py index d9ddde9..9b5e50c 100644 --- a/main.py +++ b/main.py @@ -1161,6 +1161,18 @@ def clean_internal_url(): +''' +Cette API retourne les formations par metier +''' +@app.route('/myclass/api/get_class_by_metier/', methods=['GET','POST']) +@crossdomain(origin='*') +def get_class_by_metier(): + # On recupere le corps (payload) de la requete + payload = request.form.to_dict() + print(" ### payload = ", payload) + status, result = cm.get_class_by_metier(payload) + return jsonify(status=status, message=result) + if __name__ == '__main__': print(" debut api") context = SSL.Context(SSL.SSLv23_METHOD) diff --git a/wrapper.py b/wrapper.py index a9841cc..5e34d18 100644 --- a/wrapper.py +++ b/wrapper.py @@ -342,6 +342,7 @@ def get_training_in_user_zone(diction): + ''' Cette fonction recherche les formations correspondant à un text IMPORTANT : Dans la recherche par tips, on fait du && et non du ou. @@ -448,7 +449,6 @@ def recherche_text_simple(diction): print(" CLEANED search_text = "+str(cleaned_search_text)) - regexp = r"[\w\.-]+:\"[\w\s]*\"" tips = re.findall(regexp, str(cleaned_search_text), re.MULTILINE) nb_tips = len(tips) @@ -495,8 +495,6 @@ def recherche_text_simple(diction): coll_name = MYSY_GV.dbname['myclass'] - - ''' A present mise à jour de la table "user_recherche" avec les resultats trouvés ''' @@ -523,9 +521,11 @@ def recherche_text_simple(diction): la valeur nb_result permettra de savoir si la requete a donnée un resultat. si ce n'est pas le cas, il faudra à la fin enregistrer la requete avec un result a vide''' nb_result = 0 + for x in coll_name.find({"external_code": {"$in": final_message2}}, {"_id": 0, "indexed": 0, "indexed_desc": 0, "indexed_obj": 0, - "indexed_title": 0, "valide": 0, "locked": 0, "partner_owner_recid": 0, }): + "indexed_title": 0, "valide": 0, "locked": 0, "partner_owner_recid": 0, }).\ + sort([("price", pymongo.ASCENDING), ("date_update", pymongo.DESCENDING), ]): nb_result = nb_result +1 my_recid = {} @@ -596,40 +596,39 @@ def recherche_text_simple(diction): nb_result = 0 insertObject = [] - for val in tab_training: - for x in coll_name.find( {"external_code": str(val) }, - {"_id": 0, "indexed": 0, "indexed_desc": 0, - "indexed_obj": 0, "indexed_title": 0, "valide": 0, - "locked": 0, "partner_owner_recid": 0, }): + for x in coll_name.find({"external_code":{"$in":tab_training}}, + {"_id": 0, "indexed": 0, "indexed_desc": 0, + "indexed_obj": 0, "indexed_title": 0, "valide": 0, + "locked": 0, "partner_owner_recid": 0, }).sort([("price", pymongo.ASCENDING), ("date_update", pymongo.DESCENDING), ]): - nb_result = nb_result + 1 - my_recid = {} - my_recid['user_rec_id'] = str(user_recid) - mydict_combined = {**diction, **x, **my_recid} - mydict_combined['date_update'] = str(datetime.now()) - mydict_combined['type_view'] = "summary" + nb_result = nb_result + 1 + my_recid = {} + my_recid['user_rec_id'] = str(user_recid) + mydict_combined = {**diction, **x, **my_recid} + mydict_combined['date_update'] = str(datetime.now()) + mydict_combined['type_view'] = "summary" - if ("_id" in mydict_combined.keys()): - mydict_combined['class_id'] = mydict_combined.pop('_id') + if ("_id" in mydict_combined.keys()): + mydict_combined['class_id'] = mydict_combined.pop('_id') - ''' - Statistique : Insertion du recherche - resultat ''' - ret_val_tmp = coll_search_result.insert_one(mydict_combined) - if (ret_val_tmp is False): - mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de mettre à jour la table des resultat" - " d'une recherche de formation. Voir _id = ") - return False, "La recheche est impossible " + ''' + Statistique : Insertion du recherche - resultat ''' + ret_val_tmp = coll_search_result.insert_one(mydict_combined) + if (ret_val_tmp is False): + mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de mettre à jour la table des resultat" + " d'une recherche de formation. Voir _id = ") + return False, "La recheche est impossible " - user = x + user = x - val = mycommon.clean_emoji(str(x['description'])) + val = mycommon.clean_emoji(str(x['description'])) - if (len(x['description']) > MYSY_GV.MAX_CARACT): - x['description'] = val[:MYSY_GV.MAX_CARACT] + " ..." - else: - x['description'] = val[:MYSY_GV.MAX_CARACT] - insertObject.append(JSONEncoder().encode(user)) + if (len(x['description']) > MYSY_GV.MAX_CARACT): + x['description'] = val[:MYSY_GV.MAX_CARACT] + " ..." + else: + x['description'] = val[:MYSY_GV.MAX_CARACT] + insertObject.append(JSONEncoder().encode(user)) ''' /!\ Important : Recuperation des elements de la recherche etendue