diff --git a/GlobalVariable.py b/GlobalVariable.py index f43476f..507ed29 100644 --- a/GlobalVariable.py +++ b/GlobalVariable.py @@ -64,8 +64,8 @@ token_fr_pontuation = [] La taille maximal d'un champs à retourner. Au dela de 300 caractère, le système rame ''' -MAX_CARACT = 200 -MAX_CARACT_DEDUIT = 50 +MAX_CARACT = 100 +MAX_CARACT_DEDUIT = 150 TOKEN_SIZE = 25 MAX_CARACT_DETAIL = 500 diff --git a/articles_avis.py b/articles_avis.py index 82ac82a..265175e 100644 --- a/articles_avis.py +++ b/articles_avis.py @@ -22,7 +22,7 @@ import GlobalVariable as MYSY_GV import user_message_mgt as umm import Ela_Spacy as ES import GlobalVariable as MYSY_GV - +import re class JSONEncoder(json.JSONEncoder): def default(self, o): @@ -63,7 +63,7 @@ def get_all_articles_avis(diction): for x in coll_name.find({'valide': '1', 'locked': '0'}, { "indexed": 0, "indexed_desc": 0, "indexed_obj": 0, "indexed_title": 0, "valide": 0, "locked": 0, }).sort( - [("title_formation",pymongo.ASCENDING), ("date_avis",pymongo.ASCENDING)]): + [ ("date_avis",pymongo.DESCENDING), ("title_formation",pymongo.ASCENDING),]): # mycommon.myprint("AVANT ==> "+str(x['description'])) val = x['qualite'] if (len(x['qualite']) > MYSY_GV.MAX_CARACT): @@ -73,11 +73,18 @@ def get_all_articles_avis(diction): x['qualite'] = val[:MYSY_GV.MAX_CARACT] val = x['avis'] - if (len(x['avis']) > MYSY_GV.MAX_CARACT): - x['avis'] = val[:MYSY_GV.MAX_CARACT] + " ..." + CLEANR = re.compile('<.*?>') + + clean_avis = re.sub(CLEANR, '', str(val)) + clean_avis = str(clean_avis).replace(" ", " "); + + #print(" ### CLEANRCLEANR = "+str(clean_avis)) + + if (len(clean_avis) > MYSY_GV.MAX_CARACT): + x['avis'] = clean_avis[:MYSY_GV.MAX_CARACT] + " ..." else: - x['avis'] = val[:MYSY_GV.MAX_CARACT] + x['avis'] = str(clean_avis) # mycommon.myprint("APRES ==> " + str(x['description'])) @@ -546,11 +553,15 @@ def recherche_articles_avis(diction): x['qualite'] = val[:MYSY_GV.MAX_CARACT] val = x['avis'] - if (len(x['avis']) > MYSY_GV.MAX_CARACT): - x['avis'] = val[:MYSY_GV.MAX_CARACT] + " ..." + CLEANR = re.compile('<.*?>') + clean_avis = re.sub(CLEANR, '', str(val)) + + #print(" ### CLEANRCLEANR = "+str(CLEANR)) + if (len(clean_avis) > MYSY_GV.MAX_CARACT): + x['avis'] = clean_avis[:MYSY_GV.MAX_CARACT] + " ..." else: - x['avis'] = val[:MYSY_GV.MAX_CARACT] + x['avis'] = str(clean_avis) print(user) insertObject.append(JSONEncoder().encode(user)) diff --git a/class_mgt.py b/class_mgt.py index 08da890..0350c99 100644 --- a/class_mgt.py +++ b/class_mgt.py @@ -419,10 +419,14 @@ def add_class(diction): if ret_val and ret_val['_id']: #Indexation Title de la nouvelle formation ajoutée training_to_index_title = {} - training_to_index_title['internal_url'] =mydata['internal_url'] + training_to_index_title['internal_url'] = mydata['internal_url'] training_to_index_title['reindex_all'] = '0' eibdd.ela_index_given_classes_title(training_to_index_title) + # Indexation Title des mots clées + eibdd.ela_index_given_classes_keywords(training_to_index_title) + + return True, "La formation a bien été ajoutée" else: mycommon.myprint(" Impossible d'ajouter la formation "+str(str(mydata['external_code']))) diff --git a/ela_index_bdd_classes.py b/ela_index_bdd_classes.py index 4c18d13..50457f1 100644 --- a/ela_index_bdd_classes.py +++ b/ela_index_bdd_classes.py @@ -269,12 +269,111 @@ def ela_index_all_classes_keywords(): mycommon.myprint(str(nb_class_indexed) + " ont été indexes") return True, str(nb_class_indexed) + " ont été indexes " - return True 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 d'indexer la BDD des formations ==> KO" + +""" +Cette fonction va indexer les mots clés d'une formation donnée ou toutes les formation d'un partenaire. +Pour ce faire elle prend en argument : +- internal_url +- partenaire_recid + +/!\ Important : La fonction peut reindexer les formation si l'argument +reindexe = 1 + +""" + + +def ela_index_given_classes_keywords(diction) : + # Making a Connection with MongoClient + try: + # Dictionnaire des champs utilisables + field_list = ['internal_url', 'partner_owner_recid', 'reindex_all'] + incom_keys = diction.keys() + + ''' + # 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. + ''' + for val in incom_keys: + if str(val).lower() not in str(field_list).lower(): + mycommon.myprint(str(inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas, MAJ annulée") + return False, " Impossible de se connecter, merci de contacter le support technique" + + + + check = False + internal_url = "" + if ("internal_url" in diction.keys()): + if diction['internal_url']: + check = True + internal_url = diction['internal_url'] + + partner_owner_recid = "" + if ("partner_owner_recid" in diction.keys()): + if diction['partner_owner_recid']: + check = True + partner_owner_recid = diction['partner_owner_recid'] + + reindex_all = "" + if ("reindex_all" in diction.keys()): + if diction['reindex_all']: + check = True + reindex_all = diction['reindex_all'] + + if( check is False ): + mycommon.myprint(str(inspect.stack()[0][3]) + " - Aucune formation à indexer") + return True, " Aucune formation à indexer" + + + collection = MYSY_GV.dbname["myclass"] + + + nb_class_indexed = 0 + myquery = {'valide':'1'} + if( internal_url and len(str(internal_url)) > 0 ): + myquery['internal_url'] = internal_url + + if (partner_owner_recid and len(str(partner_owner_recid)) > 0): + myquery['partner_owner_recid'] = partner_owner_recid + + if (reindex_all and len(str(reindex_all)) > 0): + if(reindex_all != "1" ): + myquery['indexed_keyword'] = "0" + + print(" QUERY INDEX keyword ="+str(myquery)) + + for doc in collection.find(myquery): + if ("title" in doc.keys()): + chaine = doc["title"] + mycommon.myprint(" external_code = " + str(doc["external_code"]) + " ==> " + str(chaine)) + retval = ela_index_class(str(doc["external_code"]), "keyword") + print(" apres : ela_index_given_classes_keywords retval = " + str(retval)) + + if (retval is False): + mycommon.myprint( + str(inspect.stack()[0][3]) + "IMPOSSIBLE d'indexer la formation = " + str(doc["external_code"])) + else: + nb_class_indexed = nb_class_indexed + 1 + + # retval = ls.ela_index_record_field(chaine, str(doc["external_code"])) + + mycommon.myprint(str(nb_class_indexed) + " ont été indexes ==> keyword") + return True, str(nb_class_indexed) + " ont été indexes ==> keyword" + + 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 d'indexer la BDD des formations ==> KO" + + + + ''' La fonction "ela_index_all_classes_title" va aller chercher chaque cours dans la BDD et créer les mots clées des title qui sont ensuite enregister dans la table "elaindex" @@ -384,24 +483,8 @@ def ela_index_given_classes_title(diction) : collection = MYSY_GV.dbname["myclass"] - ''' - ATTENTION ATTENTION - /!\ : avant l'indexation, on vide la table des indexes. - cette logique est tres gourmande. - ce quil faudrait faire : - - si une formation est indexée, mettre un fag pour dire : indexé => OK - - si on met à jour une formation ==> Mettre le flag à KO - - si on ajoute une formation, mettre le flag à KO - ex : indexation du champ 'title' ou du champ 'objectif', je vais introduitre la notion de 'source_fied' - pour l'indexation title, 'source_fied' = 'title' - pour l'indexation objectif, 'source_fied' = 'objectif' - - apres pour l'indexation, il ne faudra indexer que les formation dont le flag est KO. - aussi, avant d'indexer une formation, supprimer tous les index de la dite formation pour remplacer tous les anciens et eviter un doublon - ''' - nb_class_indexed = 0 myquery = {'valide':'1'} if( internal_url and len(str(internal_url)) > 0 ): @@ -431,8 +514,8 @@ def ela_index_given_classes_title(diction) : # retval = ls.ela_index_record_field(chaine, str(doc["external_code"])) - mycommon.myprint(str(nb_class_indexed) + " ont été indexes") - return True, str(nb_class_indexed) + " ont été indexes " + mycommon.myprint(str(nb_class_indexed) + " ont été indexes => title") + return True, str(nb_class_indexed) + " ont été indexes => title " except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() diff --git a/main.py b/main.py index 24d7359..671363e 100644 --- a/main.py +++ b/main.py @@ -1603,7 +1603,7 @@ def recordClassImage(): """ -Cette API va indexer une formation donnée ou toutes les formation d'un partenaire. +Indexation du titre : Cette API va indexer une formation donnée ou toutes les formation d'un partenaire. Pour ce faire elle prend en argument : - internal_url - partenaire_recid @@ -1618,6 +1618,22 @@ def ela_index_given_classes_title(): return jsonify(status=status, message=retval) +""" +Indexation des mots clés : Cette API va indexer une formation donnée ou toutes les formation d'un partenaire. +Pour ce faire elle prend en argument : +- internal_url +- partenaire_recid +""" +@app.route('/myclass/api/ela_index_given_classes_keywords/', methods=['POST','GET']) +@crossdomain(origin='*') +def ela_index_given_classes_keywords(): + # On recupere le corps (payload) de la requete + payload = request.form.to_dict() + print(" ### payload = ",payload) + status, retval = ela_index_class.ela_index_given_classes_keywords(payload) + return jsonify(status=status, message=retval) + + """ Stripe Payement : Creation d'un abonnement """