From f2d281d74030bcd9744b0cd8f56c678e8f901480 Mon Sep 17 00:00:00 2001 From: Commandre Benjamin <benjamin.commandre@irstea.fr> Date: Fri, 13 Nov 2020 16:03:47 +0100 Subject: [PATCH] Update --- app/Telechargement.py | 78 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 app/Telechargement.py diff --git a/app/Telechargement.py b/app/Telechargement.py new file mode 100644 index 0000000..977bfe7 --- /dev/null +++ b/app/Telechargement.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import time +import requests + + +class Telechargement: + + def __init__(self, serveur, ident, mdp, proxy): + + # Dictionnaire contenant les informations du proxy s'il existe + self.proxyDict = { + "http": "{0}".format(proxy), + "https": "{0}".format(proxy), + "ftp": "{0}".format(proxy) + } + + self.url_auth = "{0}/services/authenticate/".format(serveur) + + # Dictionnaire contenant les informations d'authentification + self.payload = { + 'ident': "{0}".format(ident), + 'pass': "{0}".format(mdp) + } + + self.head = None + + self.session = requests.session() + + try: + # self.jeton_acces = self.get_jeton_acces() + self.get_jeton_acces() + # if self.jeton_acces is None: + if self.head is None: + raise Exception("Erreur lors de l'authentification.") + except Exception as e: + print(e) + else: + self.temps_limite_jeton = time.time() + + def get_jeton_acces(self): + + try: + # Jeton d'acces + # reponse = requests.post(self.url_auth, data=self.payload, proxies=self.proxyDict) + reponse = self.session.post(self.url_auth, data=self.payload, proxies=self.proxyDict) + + reponse.raise_for_status() + except Exception as e: + raise e + else: + if "text" in reponse.headers["Content-Type"]: + # return reponse.text + jeton = reponse.text + elif "json" in reponse.headers["Content-Type"]: + # return reponse.json()["access_token"] + jeton = reponse.json()["access_token"] + else: + raise BaseException('Format non traité.') + + self.head = {"Authorization": "Bearer {0}".format(jeton)} + + class Decorators: + @staticmethod + def refresh_jeton(decorated): + def wrapper(telechargement, *args, **kwargs): + if time.time() > telechargement.temps_limite_jeton: + telechargement.get_jeton_acces() + return decorated(telechargement, *args, **kwargs) + + return wrapper + + @Decorators.refresh_jeton + def get_archive(self, url): + # Requête pour récupérer l'archive + # return requests.get(url, headers=self.head) + return self.session.get(url, headers=self.head) -- GitLab