InseeFrLab / cartiflette

Projet visant à simplifier la récupération des shapefiles officiels
https://inseefrlab.github.io/cartiflette-website/
MIT License
49 stars 7 forks source link

Optimisation des téléchargements (md5) #55

Closed tgrandje closed 9 months ago

tgrandje commented 1 year ago

Ajouter un contrôle du md5 avant de lancer un téléchargement

tgrandje commented 1 year ago
r = requests.Session()
url = "https://wxs.ign.fr/x02uy2aiwjo9bm8ce5plwqmr/telechargement/prepackage/ADMINEXPRESS_SHP_TERRITOIRES_PACK_2023-02-16$ADMIN-EXPRESS_3-1__SHP_LAMB93_FXX_2023-02-16/file/ADMIN-EXPRESS_3-1__SHP_LAMB93_FXX_2023-02-16.7z"
r = s.get(url, stream=True)
print(r.headers['content-md5'])
linogaliana commented 1 year ago

ça semble prometteur:

import os
import requests
from cartiflette.download import create_url_adminexpress, get_vectorfile_ign

url = create_url_adminexpress(
        provider="IGN", year=2022, source="EXPRESS-COG-TERRITOIRE", field="reunion"
    )

r = requests.Session()
r = r.get(url, stream=True)
md5 = r.headers['content-md5']

get_vectorfile_ign(
    provider="IGN", year=2022, source="EXPRESS-COG-TERRITOIRE", field="reunion"
)

filename = [path for path in os.listdir("/tmp") if path.endswith(".7z")]

hashlib.md5(open(f"/tmp/{filename[0]}",'rb').read()).hexdigest() == r.headers['content-md5'] #True
linogaliana commented 1 year ago

Le check du md5 est du coup pas trop complexe à mettre en oeuvre

linogaliana commented 1 year ago

On pourrait envisager la stratégie suivante:

tgrandje commented 1 year ago

@linogaliana Oui, j'ai commencé à regarder comment intégrer ça. Par contre, il me semble (de mémoire) qu'en l'état actuel, ton téléchargement se fait en local (tempfile) dans une fonction qui n'a pas accès au chemin du s3 -> il faut sans doute réécrire les fonctions avec ça à l'esprit pour éviter un téléchargement si on peut checker le md5 directement (et aussi de manière harmonisée avec un éventuel accès via l'API géoportail et/ou le FTP, qui n'ont pas accès au md5 de la même manière). Je te tiens au courant.

tgrandje commented 1 year ago

@linogaliana Je viens de contrôler ce que j'avais commencé à analyser :

linogaliana commented 9 months ago

@tgrandje , il me semble qu'on est bon maintenant sur cette issue, on peut la fermer ?

linogaliana commented 9 months ago

@tgrandje je ferme, tu ré-ouvres si tu as un état d'âme