Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fichier ZIP incomplet #129

Open
Mind-the-Cap opened this issue Aug 23, 2024 · 2 comments
Open

Fichier ZIP incomplet #129

Mind-the-Cap opened this issue Aug 23, 2024 · 2 comments

Comments

@Mind-the-Cap
Copy link
Contributor

Quand un fichier ZIP n'a pas été totalement téléchargé lors d'une itération précédente (par exemple à cause d'une mauvaise connexion), il apparaît quand même dans le dossier (mais n'est pas un ZIP complet et n'est pas ouvrable par le gestionnaire de dossiers). Cela peut causer une erreur BadZipFile à l'exécution suivante qui n'est pas triviale à comprendre (cf. ci-dessous).

Plusieurs possibilités :

  • expliquer pourquoi dans la doc ainsi que la solution (qui est tout simplement de supprimer manuellement le fichier ZIP incomplet)
  • changer le fonctionnement : télécharger dans un dossier temporaire puis modifier l'emplacement du fichier ZIP complet ? ajouter un timeout pour avoir une erreur plus claire ?
024-08-23 13:39:15.774 INFO     Reusing already downloaded file at : C:\Users\dubrocac\.mobility\data\insee\census_localized_individuals\RP2019_INDCVIZD_csv.zip.
Traceback (most recent call last):

  File ~\AppData\Local\miniforge3\envs\mob2\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File c:\users\dubrocac\documents\github\mobility\examples\trip_localizer_detailed_steps\trip_localizer_detailed_steps.py:54
    trips_df = trips.get()

  File ~\Documents\GitHub\mobility\mobility\asset.py:84 in get
    asset = self.create_and_get_asset(*args, **kwargs)

  File ~\Documents\GitHub\mobility\mobility\trips.py:68 in create_and_get_asset
    population = self.inputs["population"].get()

  File ~\Documents\GitHub\mobility\mobility\asset.py:84 in get
    asset = self.create_and_get_asset(*args, **kwargs)

  File ~\Documents\GitHub\mobility\mobility\population.py:41 in create_and_get_asset
    census_data = self.get_census_data(transport_zones)

  File ~\Documents\GitHub\mobility\mobility\population.py:94 in get_census_data
    census_data = [CensusLocalizedIndividuals(tz_region).get() for tz_region in transport_zones_regions]

  File ~\Documents\GitHub\mobility\mobility\population.py:94 in <listcomp>
    census_data = [CensusLocalizedIndividuals(tz_region).get() for tz_region in transport_zones_regions]

  File ~\Documents\GitHub\mobility\mobility\asset.py:84 in get
    asset = self.create_and_get_asset(*args, **kwargs)

  File ~\Documents\GitHub\mobility\mobility\parsers\census_localized_individuals.py:60 in create_and_get_asset
    with zipfile.ZipFile(output_path, "r") as zip_ref:

  File ~\AppData\Local\miniforge3\envs\mob2\Lib\zipfile.py:1312 in __init__
    self._RealGetContents()

  File ~\AppData\Local\miniforge3\envs\mob2\Lib\zipfile.py:1379 in _RealGetContents
    raise BadZipFile("File is not a zip file")

BadZipFile: File is not a zip file
@FlxPo
Copy link
Contributor

FlxPo commented Aug 26, 2024

Bien vu ! Je pense qu'il faut repérer si le téléchargement est complet et soulever une exception si ce n'est pas le cas. C'est fait dans ce commit : a9f63b1.

J'en ai profité pour augmenter la taille des chunks de téléchargement, qui devraient maintenant être un peu plus rapides.

@FlxPo
Copy link
Contributor

FlxPo commented Aug 26, 2024

Après quelques tests il s'avère que l'utilisation de la propriété content-length n'est pas toujours utilisable pour déterminer la taille attendue du fichier final : tous les serveurs ne la donnent pas, et la taille peut être donnée avant ou après dézippage.

Donc j'ai remplacé l'erreur par quelque chose de plus soft : on écrit les données dans un fichier avec un suffixe .part, que l'on ne renomme avec le bon nom qu'une fois tout le fichier téléchargé. De cette manière si le code plante en cours de téléchargement, le fichier cible n'existe pas et le code relance le téléchargement (de zéro pour le moment).

Commit : a94f1b9

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants