code-interpreter icon indicating copy to clipboard operation
code-interpreter copied to clipboard

Sandbox.upload_file assumes io.FileIO

Open bengladwell opened this issue 1 year ago • 3 comments

The Sandbox.upload_file method has the following signature:

def upload_file(self, file: IO, timeout: Optional[float] = TIMEOUT) -> str:

However, it's not true that file must simply be type IO. Because .name is called on that object:

        filename = path.basename(file.name)

it seems that the method actually expects the object to be of type FileIO, a subtype of IO and the type that you get when you use the builtin open function.

This is unwieldy when dealing with a file that is not stored on disk. In that case, I have access to the file's bytes and I have its filename. But I can't create a FileIO object to pass to upload_file without writing disk (creating a FileIO automatically writes to disk). In the meantime I am creating a subclass of BytesIO that has a name property. So, the duck type satisfies the requirements of upload_file. But I think it should be straightforward to upload a file that is not on disk.

bengladwell avatar Aug 23 '24 17:08 bengladwell