From 31eb617255c77c1304838e3a83ec13eafebec5bb Mon Sep 17 00:00:00 2001 From: jameszyao Date: Sat, 27 Apr 2024 17:47:50 +0800 Subject: [PATCH] fix: use base name when uploading files --- taskingai/_version.py | 2 +- taskingai/file/file.py | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/taskingai/_version.py b/taskingai/_version.py index c25dc03..b73ba3b 100644 --- a/taskingai/_version.py +++ b/taskingai/_version.py @@ -1,2 +1,2 @@ __title__ = "taskingai" -__version__ = "0.2.2" +__version__ = "0.2.3" diff --git a/taskingai/file/file.py b/taskingai/file/file.py index 0158c7a..08fdb7f 100644 --- a/taskingai/file/file.py +++ b/taskingai/file/file.py @@ -1,5 +1,5 @@ from typing import Union, Dict, BinaryIO -from io import BufferedReader +import os from taskingai.client.models import FileIdData, UploadFilePurpose, UploadFileResponse from taskingai.client.utils import get_api_client @@ -16,14 +16,25 @@ def __prepare_files(file: BinaryIO, purpose: Union[UploadFilePurpose, str]) -> D :param purpose: The purpose of the upload, either as a string or UploadFilePurpose enum. :return: A dictionary formatted for the API call. """ - if not isinstance(file, BufferedReader): - raise ValueError("Unsupported file type: Expected a BufferedReader") + if not hasattr(file, "read"): + raise ValueError("Unsupported file type: Expected a file-like object with a read method") - file_bytes = file.read() - file_name = file.name + try: + file_bytes = file.read() + except Exception as e: + raise ValueError(f"Error reading file: {e}") + + file_name = os.path.basename(file.name) if isinstance(purpose, str): - purpose = UploadFilePurpose(purpose) + try: + purpose = UploadFilePurpose(purpose) + except ValueError: + raise ValueError(f"Invalid purpose value: {purpose}") + + if not isinstance(purpose, UploadFilePurpose): + raise ValueError("Purpose must be an instance of UploadFilePurpose or a valid string") + return { "file": (file_name, file_bytes, "application/octet-stream"), "purpose": (None, str(purpose.value)),