Geoplateforme / sdk-entrepot

SDK Python pour utiliser l'API Entrepôt de la Géoplateforme.
GNU General Public License v3.0
1 stars 0 forks source link

Ajout de timeout sur les requêtes API #121

Closed LudivineSchlegel closed 4 months ago

LudivineSchlegel commented 4 months ago

Il est intéressant de pouvoir mettre de timeout sur les requêtes pour éviter les requête qui tournent dans le vide.

Structure configuration

Ajout de timeout pour toutes les requête API, récupération de la valeur du time out depuis la configuration section routing avec pour clef <nom_route>_timeout et pour valeur le nombre en secondes du timeout ou rien qui correspond à aucun timeout. Il y aura une valeur globale dans la section store_api pour le timeout par défaut des requêtes (clef timeout)

Cas particulier des requêtes avec upload de fichiers, il est possible de moduler la valeur du timeout selon la taille du fichier (sont concerné toute requête faite avec fonction ApiRequester().route_upload_file()). La valeur sera une dictionnaire json sur une seule ligne avec pour clef la taille en octet et pour valeur te temps en seconde du time out ou 'null' pour ne pas avoir de timeout. Il sera toujours possible de mettre une unique valeur pour le timeout ou pas de valeur pour supprimé le timeout. Si la taille du fichier est inférieur à la plus petite valeur du tableau le timeout par défaut est utilisé, sinon c'est la plus grande valeur inférieur à la taille du fichier qui est utilisée. par exemple pour un dictionnaire {'1000': 4, '2000': 8, '3000': null} les fichiers de taille inférieur à 1000 octets la valeur par défaut est utilisée, de 1000 à 2000 octets timeout de 4s de 2000 à 3000 octets timeout de 8s au dessus de 3000 octets il n'y a plus de timeout.

Exemple de la configuration

[store_api]
# timeout par défaut 60s
timeout=60

[routing]
# route user_get pas de timeout
user_get=${store_api:root_url}/users/me
user_get_timeout=
# route me_get timeout de 10s
me_get=${store_api:root_url}/users/me
me_get_timeout=10
# upload_push_data timeout selon la taille du fichier :
# - 0 à 1000 octets valeur par défaut 
# - de 1000 à 2000 octets timeout de 4s
# - plus de 2000 octets timeout de 8s
upload_push_data=${upload_get}/data
upload_push_data_timeout={"1000": 4, "2000":8}
# upload_push_md5 timeout fixe à 60s
upload_push_md5=${upload_get}/md5
upload_push_md5_timeout=60

Modification à mener