Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
LibCloud 0.17.0, Python 3.4
Description
LocalStorageDriver.upload_object_via_stream does not allow the upload of bytes in Python 3, despite the fact that download_object_as_stream returns a stream of bytes:
>>> container.upload_object_via_stream(io.BytesIO(b'foobar'), 'key') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/torf/projects/coba/venv/lib/python3.4/site-packages/libcloud/storage/base.py", line 157, in upload_object_via_stream iterator, self, object_name, extra=extra, **kwargs) File "/home/torf/projects/coba/venv/lib/python3.4/site-packages/libcloud/storage/drivers/local.py", line 497, in upload_object_via_stream obj_file.close() File "/home/torf/projects/coba/venv/lib/python3.4/site-packages/libcloud/storage/drivers/local.py", line 69, in __exit__ raise value File "/home/torf/projects/coba/venv/lib/python3.4/site-packages/libcloud/storage/drivers/local.py", line 495, in upload_object_via_stream obj_file.write(data) TypeError: must be str, not bytes
The problem is that LocalStorageDriver opens the target file for writing in text mode ('w') instead of binary mode ('wb').
As discussed on the users mailing list I am working on a pull request for this issue.