From aa1420b5935c5da20db9bf5304f651c3b6f85014 Mon Sep 17 00:00:00 2001 From: jiuker Date: Mon, 7 Jul 2025 16:49:21 +0800 Subject: [PATCH] fix: download file will throw error when dir is empty fix: download file will throw error when dir is empty --- src/multistorageclient/providers/ais.py | 3 ++- src/multistorageclient/providers/azure.py | 3 ++- src/multistorageclient/providers/gcs.py | 3 ++- src/multistorageclient/providers/oci.py | 3 ++- src/multistorageclient/providers/posix_file.py | 3 ++- src/multistorageclient/providers/s3.py | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/multistorageclient/providers/ais.py b/src/multistorageclient/providers/ais.py index d660239..ac3c84d 100644 --- a/src/multistorageclient/providers/ais.py +++ b/src/multistorageclient/providers/ais.py @@ -357,7 +357,8 @@ def _download_file(self, remote_path: str, f: Union[str, IO], metadata: Optional metadata = self._get_object_metadata(remote_path) if isinstance(f, str): - os.makedirs(os.path.dirname(f), exist_ok=True) + if os.path.dirname(f): + os.makedirs(os.path.dirname(f), exist_ok=True) with open(f, "wb") as fp: fp.write(self._get_object(remote_path)) else: diff --git a/src/multistorageclient/providers/azure.py b/src/multistorageclient/providers/azure.py index b0cdc1b..8d36439 100644 --- a/src/multistorageclient/providers/azure.py +++ b/src/multistorageclient/providers/azure.py @@ -481,7 +481,8 @@ def _download_file(self, remote_path: str, f: Union[str, IO], metadata: Optional self._refresh_blob_service_client_if_needed() if isinstance(f, str): - os.makedirs(os.path.dirname(f), exist_ok=True) + if os.path.dirname(f): + os.makedirs(os.path.dirname(f), exist_ok=True) def _invoke_api() -> int: blob_client = self._blob_service_client.get_blob_client(container=container_name, blob=blob_name) diff --git a/src/multistorageclient/providers/gcs.py b/src/multistorageclient/providers/gcs.py index 4ed3632..e407840 100644 --- a/src/multistorageclient/providers/gcs.py +++ b/src/multistorageclient/providers/gcs.py @@ -580,7 +580,8 @@ def _download_file(self, remote_path: str, f: Union[str, IO], metadata: Optional bucket, key = split_path(remote_path) if isinstance(f, str): - os.makedirs(os.path.dirname(f), exist_ok=True) + if os.path.dirname(f): + os.makedirs(os.path.dirname(f), exist_ok=True) # Download small files if metadata.content_length <= self._multipart_threshold: with tempfile.NamedTemporaryFile(mode="wb", delete=False, dir=os.path.dirname(f), prefix=".") as fp: diff --git a/src/multistorageclient/providers/oci.py b/src/multistorageclient/providers/oci.py index 2e9c99f..f381575 100644 --- a/src/multistorageclient/providers/oci.py +++ b/src/multistorageclient/providers/oci.py @@ -527,7 +527,8 @@ def _download_file(self, remote_path: str, f: Union[str, IO], metadata: Optional bucket, key = split_path(remote_path) if isinstance(f, str): - os.makedirs(os.path.dirname(f), exist_ok=True) + if os.path.dirname(f): + os.makedirs(os.path.dirname(f), exist_ok=True) def _invoke_api() -> int: response = self._oci_client.get_object( diff --git a/src/multistorageclient/providers/posix_file.py b/src/multistorageclient/providers/posix_file.py index 064eb9b..14d618a 100644 --- a/src/multistorageclient/providers/posix_file.py +++ b/src/multistorageclient/providers/posix_file.py @@ -345,7 +345,8 @@ def _download_file(self, remote_path: str, f: Union[str, IO], metadata: Optional if isinstance(f, str): def _invoke_api() -> int: - os.makedirs(os.path.dirname(f), exist_ok=True) + if os.path.dirname(f): + os.makedirs(os.path.dirname(f), exist_ok=True) atomic_write(source=remote_path, destination=f) return filesize diff --git a/src/multistorageclient/providers/s3.py b/src/multistorageclient/providers/s3.py index 4a9c65d..9f1ae7f 100644 --- a/src/multistorageclient/providers/s3.py +++ b/src/multistorageclient/providers/s3.py @@ -748,7 +748,8 @@ def _download_file(self, remote_path: str, f: Union[str, IO], metadata: Optional if isinstance(f, str): bucket, key = split_path(remote_path) - os.makedirs(os.path.dirname(f), exist_ok=True) + if os.path.dirname(f): + os.makedirs(os.path.dirname(f), exist_ok=True) # Download small files if metadata.content_length <= self._transfer_config.multipart_threshold: