20/09/22 - 12h00

master
ChérifBALDE 2022-09-20 11:40:17 +02:00 committed by cherif
parent b57764c980
commit b70e6a74f2
4 changed files with 334 additions and 10 deletions

View File

@ -76,7 +76,7 @@ LOG_FILE_NAME = "./Log/log_file.log"
upload_folder = "./Data/"
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'webp'}
logging.basicConfig( level=DEBUG_LEVEL, filename=LOG_FILE_NAME)
AUTORIZED_SOURCE_IPV4=["127.0.0.1", "localhost", "88.170.110.220", "192.168.1.21", "192.168.1.48"]
@ -130,7 +130,7 @@ HELP_WORD_QUERY_LIMIT = 3
'''
Les formats d'image accepté
'''
IMG_FORMAT=['jpg', 'jpeg', 'png', 'jpe']
IMG_FORMAT=['jpg', 'jpeg', 'png', 'jpe', 'webp']

View File

@ -1854,7 +1854,7 @@ def get_partner_class_external_code(diction):
" filt_title = " + str(filt_title))
val_tmp = 1
for retVal in coll_name.find({"$and": [{'valide': '1'}, {'locked': '0'},
for retVal in coll_name.find_one({"$and": [{'valide': '1'}, {'locked': '0'},
{'partner_owner_recid': user_recid},
filt_external_code, filt_title, filt_internal_url]},
{'external_code':1, 'internal_url':1},

53
main.py
View File

@ -916,7 +916,7 @@ def add_class_mass():
return jsonify(status=status, message=retval)
'''
test d'enregistrement d'une image
Enregistrement d'une image de profil d'un utilisateur
'''
@app.route('/myclass/api/recordImage/', methods=['POST','GET'])
@crossdomain(origin='*')
@ -1475,7 +1475,7 @@ def removeLSaccount():
return jsonify(status=status, message=message)
"""
Correction
Correction data - api oneshot
"""
@app.route('/myclass/api/correction_collection/', methods=['GET','POST'])
@crossdomain(origin='*')
@ -1485,6 +1485,55 @@ def correction_collection():
status, message = mycommon.correction_collection()
return jsonify(status=status, message=message)
"""
Cette API recuperer l'image de profil d'une formation
"""
@app.route('/myclass/api/getRecodedClassImage/', methods=['POST','GET'])
@crossdomain(origin='*')
def getRecodedClassImage():
# On recupere le corps (payload) de la requete
payload = request.form.to_dict()
print(" ### payload = ",payload)
status, myimg= mycommon.getRecodedClassImage(payload)
return jsonify(status=status, message=myimg)
"""
Cette API de Recuperation d'une image de profils d'une formation pour le mode non connecté. c'est a dire depuis le front
"""
@app.route('/myclass/api/getRecodedClassImage_from_front/', methods=['POST','GET'])
@crossdomain(origin='*')
def getRecodedClassImage_from_front():
# On recupere le corps (payload) de la requete
payload = request.form.to_dict()
print(" ### payload = ",payload)
status, myimg= mycommon.getRecodedClassImage_from_front(payload)
return jsonify(status=status, message=myimg)
'''
Enregistrement d'une image de profil d'une formation
'''
@app.route('/myclass/api/recordClassImage/', methods=['POST','GET'])
@crossdomain(origin='*')
def recordClassImage():
# On recupere le corps (payload) de la requete
payload = request.form.to_dict()
print(" ### payload = ",payload)
print(request.files)
if request.method == 'POST':
# Create variable for uploaded file
f = request.files['File']
status, message = mycommon.recordClassImage(f, app.config['UPLOAD_FOLDER'], payload)
return jsonify(status=status, message=message)
if __name__ == '__main__':
print(" debut api")
context = SSL.Context(SSL.SSLv23_METHOD)

View File

@ -114,11 +114,11 @@ def Upload_Save_IMG_File(file=None, Folder=None):
Verification qu'il s'agit bien d'un fichier image ('jpg', 'jpeg', 'png', 'jpe', ...), dont le nom ne comporte pas de "."
'''
if(len(basename2) != 2 ):
myprint(str(inspect.stack()[0][3]) + " - : Le nom du fichier est incorret")
myprint(str(inspect.stack()[0][3]) + " - : Le nom du fichier "+str(file.filename)+" est incorret")
return False, None
if( str(basename2[1]).lower() not in MYSY_GV.IMG_FORMAT):
myprint(str(inspect.stack()[0][3]) + " - : Ce n'est pas un fichier image :"+str(MYSY_GV.IMG_FORMAT))
myprint(str(inspect.stack()[0][3]) + " - : le ficier "+str(file.filename)+ ". L'extention '"+str(basename2[1])+"' n'est pas un fichier image. Les extentions autorisées sont :"+str(MYSY_GV.IMG_FORMAT))
return False, None
@ -1222,7 +1222,7 @@ def clean_emoji(sentence=None):
'''
test d'enregistrement d'une image
Fonction d'enregistrement d'une image d'un profils
'''
def recordImage(file=None, Folder=None, diction=None):
try:
@ -1342,13 +1342,134 @@ def recordImage(file=None, Folder=None, diction=None):
exc_type, exc_obj, exc_tb = sys.exc_info()
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False
'''
Test de recuperation d'une image
Fonction d'enregistrement d'une image d'un profils d'une formation
'''
def recordClassImage(file=None, Folder=None, diction=None):
try:
# Dictionnaire des champs utilisables
field_list = ['token', 'type', 'class_external_code']
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():
myprint(
str(inspect.stack()[0][3]) + " Le champ '" + val + "' n'est pas accepté dans cette API")
return False, " Impossible de se connecter"
'''
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', 'type', 'class_external_code']
for val in field_list_obligatoire:
if str(val).lower() not in diction:
myprint(
str(inspect.stack()[0][3]) + " La valeur '" + val + "' n'est pas presente dans liste des champs")
return False, "Impossible de se connecter"
mydata = {}
mytoken = ""
# recuperation des paramettre
if ("token" in diction.keys()):
if diction['token']:
mytoken = diction['token']
mytype = ""
# recuperation des paramettre
if ("type" in diction.keys()):
if diction['type']:
mytype = diction['type']
myclassexternalcode = ""
if ("class_external_code" in diction.keys()):
if diction['class_external_code']:
myclassexternalcode = diction['class_external_code']
'''
Verification de la validité du token et recuperation du recid du user
'''
retval = check_user_validity("", str(mytoken))
if retval is False:
myprint(str(inspect.stack()[0][3]) + " - Le token n'est pas valide")
return False, "L'email ou le token ne sont pas valident"
if (mytype == "partner"):
user_recid = get_parnter_recid_from_token(str(mytoken))
if user_recid is False:
myprint(str(inspect.stack()[0][3]) + " - Impossible de recuperer le recid du partner")
return False, " Les informations d'identification sont incorrectes"
else:
myprint(str(inspect.stack()[0][3]) + " - l'API est incorrecte. le type n'est pas renseingé")
return False, " Les informations d'identification sont incorrectes"
myuserrecid = user_recid
status, saved_file = Upload_Save_IMG_File(file, Folder)
if (status == False):
return False, "Impossible d'inserer l'image de la formation "
# " Lecture du fichier "
print(" Lecture du fichier : " + saved_file + ". le token est :" + str(mytoken))
nb_line = 0
coll_name = MYSY_GV.dbname['image_ch']
with open(saved_file, "rb") as imageFile:
# strimg = base64.b64encode(imageFile.read())
strimg = base64.b64encode(imageFile.read())
new_diction = {}
new_diction['img'] = strimg
new_diction['type'] = 'profil_class'
new_diction['recid'] = myuserrecid
new_diction['class_external_code'] = myclassexternalcode
new_diction['valide'] = '1'
new_diction['date_update'] = str(datetime.now())
new_diction['locked'] = "0"
ret_val = coll_name.find_one_and_update({"recid": myuserrecid, "valide": "1", "locked": "0", "class_external_code":str(myclassexternalcode)},
{"$set": {"img": strimg, "date_update": str(datetime.now()),
"type": "profil_class", "recid": myuserrecid, "valide": "1",
"locked": "0",
"class_external_code":str(myclassexternalcode)}},
upsert=True,
return_document=ReturnDocument.AFTER
)
if ret_val and ret_val['_id']:
myprint(" L'image de la formation "+str(myclassexternalcode)+" a bien ete enregistrée. ")
return True, " L'image de la formation "+str(myclassexternalcode)+" a bien ete enregistrée. "
else:
myprint(" IMPOSSIBLE D'ENREGISTRER L'IMAGE de la formation "+str(myclassexternalcode))
return False, "IMPOSSIBLE D'ENREGISTRER L'IMAGE de la formation "+str(myclassexternalcode)
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False,"IMPOSSIBLE D'ENREGISTRER L'IMAGE de la formation "+str(myclassexternalcode)
'''
Recuperation d'une image de profils
'''
def getRecodedImage(diction=None):
try:
# Dictionnaire des champs utilisables
@ -1437,6 +1558,160 @@ def getRecodedImage(diction=None):
'''
Recuperation d'une image de profils d'une formation
'''
def getRecodedClassImage(diction=None):
try:
# Dictionnaire des champs utilisables
field_list = ['token', 'type', 'class_external_code']
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():
myprint(
str(inspect.stack()[0][3]) + " Le champ '" + val + "' n'est pas accepté dans cette API")
return False, " Impossible de se connecter"
'''
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','type','class_external_code']
for val in field_list_obligatoire:
if str(val).lower() not in diction:
myprint(
str(inspect.stack()[0][3]) + " La valeur '" + val + "' n'est pas presente dans liste des champs")
return False, "Impossible de se connecter"
mydata = {}
mytoken = ""
# recuperation des paramettre
if ("token" in diction.keys()):
if diction['token']:
mytoken = diction['token']
mytype = ""
if ("type" in diction.keys()):
if diction['type']:
mytype = diction['type']
myclassexternalcode = ""
if ("class_external_code" in diction.keys()):
if diction['class_external_code']:
myclassexternalcode = diction['class_external_code']
'''
Verification de la validité du token et recuperation du recid du user
'''
retval = check_user_validity("", str(mytoken))
if retval is False:
myprint(str(inspect.stack()[0][3]) + " - Le token n'est pas valide")
return False, "L'email ou le token ne sont pas valident"
if (mytype == "partner"):
user_recid = get_parnter_recid_from_token(str(mytoken))
if user_recid is False:
myprint(str(inspect.stack()[0][3]) + " - Impossible de recuperer le recid du user")
return False, " Les informations d'identification sont incorrectes"
else:
myprint(str(inspect.stack()[0][3]) + " - l'API est incorrecte. le type n'est pas renseingé")
return False, " Les informations d'identification sont incorrectes"
myuserrecid = user_recid
coll_name = MYSY_GV.dbname['image_ch']
RetObject = []
for retVal in coll_name.find({'recid':myuserrecid, "type":"profil_class", "class_external_code":str(myclassexternalcode)} ):
user2={}
user2['date_update'] = retVal['date_update']
decode = retVal['img'].decode()
user2['img'] = decode
data1 = json.loads(json.dumps(user2))
return True, data1
return False, ""
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, ""
'''
Recuperation d'une image de profils d'une formation pour le mode non connecté. c'est a dire depuis le front
'''
def getRecodedClassImage_from_front(diction=None):
try:
# Dictionnaire des champs utilisables
field_list = [ 'class_external_code']
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():
myprint(
str(inspect.stack()[0][3]) + " Le champ '" + val + "' n'est pas accepté dans cette API")
return False, " Impossible de se connecter"
'''
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 = ['class_external_code']
for val in field_list_obligatoire:
if str(val).lower() not in diction:
myprint(
str(inspect.stack()[0][3]) + " La valeur '" + val + "' n'est pas presente dans liste des champs")
return False, "Impossible de se connecter"
myclassexternalcode = ""
if ("class_external_code" in diction.keys()):
if diction['class_external_code']:
myclassexternalcode = diction['class_external_code']
coll_name = MYSY_GV.dbname['image_ch']
RetObject = []
for retVal in coll_name.find({"type":"profil_class", "class_external_code":str(myclassexternalcode)} ):
user2={}
user2['date_update'] = retVal['date_update']
decode = retVal['img'].decode()
user2['img'] = decode
data1 = json.loads(json.dumps(user2))
return True, data1
return False, ""
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, ""
'''