Uploaded image for project: 'Libcloud'
  1. Libcloud
  2. LIBCLOUD-725

Binary data storage in LocalStorageDriver fails on Py3

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • None
    • Storage
    • 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.

      Attachments

        Activity

          People

            Unassigned Unassigned
            torf torf
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment