[ https://issues.apache.org/jira/browse/LIBCLOUD-1043?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16849684#comment-16849684 ]
ASF subversion and git services commented on LIBCLOUD-1043: ----------------------------------------------------------- Commit f086aa68dfa543bc6b0cc348cb6a0bc1f43d6621 in libcloud's branch refs/heads/trunk from Tomaz Muraus [ https://gitbox.apache.org/repos/asf?p=libcloud.git;h=f086aa6 ] Merge pull request #1287 from CatalystCode/1043_fix_azure_upload_object_via_stream_with_iterator [LIBCLOUD-1043] Fix Azure upload_object_via_stream used with iter > Azure Storage driver crashes when passed a non file-like iterator > ----------------------------------------------------------------- > > Key: LIBCLOUD-1043 > URL: https://issues.apache.org/jira/browse/LIBCLOUD-1043 > Project: Libcloud > Issue Type: Bug > Reporter: Clemens Wolff > Priority: Major > Time Spent: 1h 40m > Remaining Estimate: 0h > > The azure_blobs implementation of {{upload_object_via_stream(iterator, ...)}} > currently assumes that the passed-in iterator always is a file-like object > that implements {{seek(...)}} > ([source|https://github.com/apache/libcloud/blob/a1f9897ce107eb1b01674262ca1b9ff1f91d46f0/libcloud/storage/drivers/azure_blobs.py#L828-L830]). > This means that function crashes when used with arbitrary iterators as > returned by {{iter(...)}}. > Notably, the libcloud integration for django-storages exercises this > functionality > ([source|https://github.com/jschneier/django-storages/blob/b441b74a17a46eb87ee4b10f60774b9a080c0fe1/storages/backends/apache_libcloud.py#L158]) > which makes django-storages + libcloud + Azure Blobs currently unusable. See > detailed stacktrace below: > {code:python} > Traceback (most recent call last): > File ".../app/manage.py", line 15, in <module> > execute_from_command_line(sys.argv) > File "...\lib\site-packages\django\core\management\__init__.py", line 381, > in execute_from_command_line > utility.execute() > File "...\lib\site-packages\django\core\management\__init__.py", line 375, > in execute > self.fetch_command(subcommand).run_from_argv(self.argv) > File "...\lib\site-packages\django\core\management\base.py", line 316, in > run_from_argv > self.execute(*args, **cmd_options) > File "...\lib\site-packages\django\core\management\base.py", line 353, in > execute > output = self.handle(*args, **options) > File > "...\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", > line 188, in handle > collected = self.collect() > File > "...\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", > line 114, in collect > handler(path, prefixed_path, storage) > File > "...\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", > line 353, in copy_file > self.storage.save(prefixed_path, source_file) > File "...\lib\site-packages\django\core\files\storage.py", line 49, in save > return self._save(name, content) > File "...\lib\site-packages\storages\backends\apache_libcloud.py", line > 157, in _save > self.driver.upload_object_via_stream(iter(file), self._get_bucket(), name) > File "...\lib\site-packages\libcloud\storage\drivers\azure_blobs.py", line > 828, in upload_object_via_stream > iterator.seek(0, os.SEEK_END) > AttributeError: 'generator' object has no attribute 'seek' > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)