From 0491ea0435619901c27d7db1528536370b9bd2d4 Mon Sep 17 00:00:00 2001 From: Ian Mathews Date: Mon, 20 May 2024 21:32:54 -0700 Subject: [PATCH] fix(uploads): make sure files are always opened in binary format --- src/redivis/_version.py | 2 +- src/redivis/classes/Notebook.py | 1 - src/redivis/classes/Upload.py | 8 ++++++++ src/redivis/common/retryable_upload.py | 8 -------- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/redivis/_version.py b/src/redivis/_version.py index 6a57210..103751b 100644 --- a/src/redivis/_version.py +++ b/src/redivis/_version.py @@ -1 +1 @@ -__version__ = "0.14.8" +__version__ = "0.14.9" diff --git a/src/redivis/classes/Notebook.py b/src/redivis/classes/Notebook.py index 0d8aaf0..b0ef7c8 100644 --- a/src/redivis/classes/Notebook.py +++ b/src/redivis/classes/Notebook.py @@ -75,5 +75,4 @@ def create_output_table(self, data=None, *, name=None, append=False, geography_v payload={"name": name, "append": append, "geographyVariables": geography_variables, "tempUploadId": temp_upload["id"]}, ) - return Table(name=res["name"], properties=res) diff --git a/src/redivis/classes/Upload.py b/src/redivis/classes/Upload.py index 5bb0c81..b6400f4 100644 --- a/src/redivis/classes/Upload.py +++ b/src/redivis/classes/Upload.py @@ -59,7 +59,13 @@ def create( (hasattr(data, "read") and os.stat(data.name).st_size > 1e7) or (hasattr(data, "__len__") and len(data) > 1e7) ): + did_reopen_file = False pbar_bytes = None + # If file isn't in binary mode, we need to reopen, otherwise uploading of non-text files will fail + if hasattr(data, 'mode') and 'b' not in data.mode: + data = open(data.name, 'rb') + did_reopen_file = True + size = os.stat(data.name).st_size if hasattr(data, "read") else len(data) if progress: pbar_bytes = tqdm(total=size, unit='B', leave=False, unit_scale=True) @@ -77,6 +83,8 @@ def create( perform_standard_upload(data=data, temp_upload_url=temp_upload["url"], progressbar=pbar_bytes) + if did_reopen_file: + data.close() if progress: pbar_bytes.close() diff --git a/src/redivis/common/retryable_upload.py b/src/redivis/common/retryable_upload.py index 94791d9..510b965 100644 --- a/src/redivis/common/retryable_upload.py +++ b/src/redivis/common/retryable_upload.py @@ -10,15 +10,10 @@ def perform_resumable_upload(data, temp_upload_url=None, progressbar=None): retry_count = 0 start_byte = 0 - did_reopen_file = False is_file = True if hasattr(data, "read") else False file_size = os.stat(data.name).st_size if is_file else len(data) chunk_size = file_size - if is_file and hasattr(data, 'mode') and 'b' not in data.mode: - data = open(data.name, 'rb') - did_reopen_file = True - resumable_url = initiate_resumable_upload(file_size, temp_upload_url) while start_byte < file_size or start_byte == 0: # handle empty upload for start_byte == 0 @@ -60,9 +55,6 @@ def perform_resumable_upload(data, temp_upload_url=None, progressbar=None): file_size=file_size, resumable_url=resumable_url ) - if did_reopen_file: - data.close() - def initiate_resumable_upload(size, temp_upload_url, retry_count=0): did_request_complete = False