From 44f6ec79c7dc6dba33bd561df5ce433a6da38d5a Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 5 Apr 2023 15:50:37 -0700 Subject: [PATCH] download fileobj bugfixes --- internetarchive/__version__.py | 2 +- internetarchive/files.py | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/internetarchive/__version__.py b/internetarchive/__version__.py index f6310076..030584db 100644 --- a/internetarchive/__version__.py +++ b/internetarchive/__version__.py @@ -1 +1 @@ -__version__ = '3.4.0' +__version__ = '3.5.0.dev1' diff --git a/internetarchive/files.py b/internetarchive/files.py index c8029469..0a1efbeb 100644 --- a/internetarchive/files.py +++ b/internetarchive/files.py @@ -269,21 +269,28 @@ def download(self, file_path=None, verbose=None, ignore_existing=None, else: progress_bar = nullcontext() + close_fileobj = False if not chunk_size: chunk_size = 1048576 if stdout: fileobj = os.fdopen(sys.stdout.fileno(), "wb", closefd=False) if not fileobj: fileobj = open(file_path.encode('utf-8'), 'wb') - - with fileobj, progress_bar as bar: + close_fileobj = True + + if stdout or close_fileobj is True: + with fileobj, progress_bar as bar: + for chunk in response.iter_content(chunk_size=chunk_size): + if chunk: + size = fileobj.write(chunk) + if bar is not None: + bar.update(size) + if ors: + fileobj.write(os.environ.get("ORS", "\n").encode("utf-8")) + else: for chunk in response.iter_content(chunk_size=chunk_size): if chunk: size = fileobj.write(chunk) - if bar is not None: - bar.update(size) - if ors: - fileobj.write(os.environ.get("ORS", "\n").encode("utf-8")) except (RetryError, HTTPError, ConnectTimeout, OSError, ReadTimeout) as exc: msg = f'error downloading file {file_path}, exception raised: {exc}' log.error(msg)