20/09/22 - 12h00
parent
b57764c980
commit
b70e6a74f2
|
@ -76,7 +76,7 @@ LOG_FILE_NAME = "./Log/log_file.log"
|
||||||
|
|
||||||
|
|
||||||
upload_folder = "./Data/"
|
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)
|
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"]
|
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é
|
Les formats d'image accepté
|
||||||
'''
|
'''
|
||||||
IMG_FORMAT=['jpg', 'jpeg', 'png', 'jpe']
|
IMG_FORMAT=['jpg', 'jpeg', 'png', 'jpe', 'webp']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1854,7 +1854,7 @@ def get_partner_class_external_code(diction):
|
||||||
" filt_title = " + str(filt_title))
|
" filt_title = " + str(filt_title))
|
||||||
|
|
||||||
val_tmp = 1
|
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},
|
{'partner_owner_recid': user_recid},
|
||||||
filt_external_code, filt_title, filt_internal_url]},
|
filt_external_code, filt_title, filt_internal_url]},
|
||||||
{'external_code':1, 'internal_url':1},
|
{'external_code':1, 'internal_url':1},
|
||||||
|
|
53
main.py
53
main.py
|
@ -916,7 +916,7 @@ def add_class_mass():
|
||||||
return jsonify(status=status, message=retval)
|
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'])
|
@app.route('/myclass/api/recordImage/', methods=['POST','GET'])
|
||||||
@crossdomain(origin='*')
|
@crossdomain(origin='*')
|
||||||
|
@ -1475,7 +1475,7 @@ def removeLSaccount():
|
||||||
return jsonify(status=status, message=message)
|
return jsonify(status=status, message=message)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Correction
|
Correction data - api oneshot
|
||||||
"""
|
"""
|
||||||
@app.route('/myclass/api/correction_collection/', methods=['GET','POST'])
|
@app.route('/myclass/api/correction_collection/', methods=['GET','POST'])
|
||||||
@crossdomain(origin='*')
|
@crossdomain(origin='*')
|
||||||
|
@ -1485,6 +1485,55 @@ def correction_collection():
|
||||||
status, message = mycommon.correction_collection()
|
status, message = mycommon.correction_collection()
|
||||||
return jsonify(status=status, message=message)
|
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__':
|
if __name__ == '__main__':
|
||||||
print(" debut api")
|
print(" debut api")
|
||||||
context = SSL.Context(SSL.SSLv23_METHOD)
|
context = SSL.Context(SSL.SSLv23_METHOD)
|
||||||
|
|
285
prj_common.py
285
prj_common.py
|
@ -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 "."
|
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 ):
|
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
|
return False, None
|
||||||
|
|
||||||
if( str(basename2[1]).lower() not in MYSY_GV.IMG_FORMAT):
|
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
|
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):
|
def recordImage(file=None, Folder=None, diction=None):
|
||||||
try:
|
try:
|
||||||
|
@ -1342,13 +1342,134 @@ def recordImage(file=None, Folder=None, diction=None):
|
||||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
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))
|
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
|
||||||
return False
|
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):
|
def getRecodedImage(diction=None):
|
||||||
try:
|
try:
|
||||||
# Dictionnaire des champs utilisables
|
# 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, ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
Loading…
Reference in New Issue