From 63212a6dacb325ce75be6391a082d58942438706 Mon Sep 17 00:00:00 2001 From: Raoul Linnenbank <58594297+rflinnenbank@users.noreply.github.com> Date: Mon, 1 Jul 2024 12:55:11 +0200 Subject: [PATCH] [2024-07-01 12:48] Fix for issue with AROME repository Created from original fix provided by Rick de Rooij. Also fixed the folder not always being properly cleaned up under Linux systems due to issues with trailing slashes. --- pyproject.toml | 2 +- .../sources/knmi/client/arome_repository.py | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 824d1a9..5090385 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "weather_provider_api" -version = "2.53.0" +version = "2.54.0" description = "Weather Provider Libraries and API" authors = ["Verbindingsteam", "Raoul Linnenbank <58594297+rflinnenbank@users.noreply.github.com>"] license = "MPL-2.0" diff --git a/weather_provider_api/routers/weather/sources/knmi/client/arome_repository.py b/weather_provider_api/routers/weather/sources/knmi/client/arome_repository.py index 2067d90..2d85e9c 100644 --- a/weather_provider_api/routers/weather/sources/knmi/client/arome_repository.py +++ b/weather_provider_api/routers/weather/sources/knmi/client/arome_repository.py @@ -4,6 +4,7 @@ # SPDX-FileCopyrightText: 2019-2022 Alliander N.V. # SPDX-License-Identifier: MPL-2.0 import glob +import os import re import sys import tarfile @@ -178,7 +179,8 @@ def _process_downloaded_file(self, download_folder: Path, filename: str, predict def _clear_temp_folder(download_folder: Path): """A function that cleans up the temporary download folder to prevent issues with partially written files.""" logger.debug(f"Emptying the download folder: {download_folder}") - for existing_file in glob.glob(f"{download_folder}*.*"): + file_filter = f"{download_folder}/*.*" if str(download_folder)[-1] != "/" else f"{download_folder}*.*" + for existing_file in glob.glob(file_filter): try: # Try to delete: Path(existing_file).unlink() @@ -191,9 +193,13 @@ def _unpack_downloaded_file(download_folder: Path, file_name: str): """The function that unpacks downloaded files to prediction files.""" logger.info(f"Unpacking file: {file_name}") try: - tar_file = tarfile.open(download_folder.joinpath(file_name)) - tar_file.extractall(path=download_folder) - tar_file.close() + tar = tarfile.open(download_folder.joinpath(file_name)) + for member in tar.getmembers(): + if member.isreg(): # Only process files + member.name = os.path.basename( + member.name) # Remove the path to setting it to only the filename. + tar.extract(member, download_folder) # Extract the file to the download folder + tar.close() except Exception as e: logger.error(f"The tarfile [{file_name}] could not be unpacked!") raise e