Public bug reported: The upstream package integrates a newer version of the requests python library. In the debian package it is modified to use the debian packages python3-requests. However it's not modified to use the older requests API fully.
At least the bucket.upload_file method is broken in the debian packaging. I ticketed it upstream https://github.com/boto/botocore/issues/1266 but since it's a packaging issue I'm refiling it here. Here's my script failing with the call to requests. ``` $ python3 run_test.py Uploading results for test: test_upload_20170817142448 from /tmp/output Uploading /tmp/output/ros.bag to test_upload_20170817142448/ros.bag Uploading /tmp/output/gazebo.log to test_upload_20170817142448/gazebo.log Traceback (most recent call last): File "run_test.py", line 47, in <module> upload_to_s3(b, test_name, results_dir) File "run_test.py", line 14, in upload_to_s3 bucket.upload_file(full_f, bucket_key) File "/usr/lib/python3/dist-packages/boto3/s3/inject.py", line 110, in bucket_upload_file ExtraArgs=ExtraArgs, Callback=Callback, Config=Config) File "/usr/lib/python3/dist-packages/boto3/s3/inject.py", line 71, in upload_file extra_args=ExtraArgs, callback=Callback) File "/usr/lib/python3/dist-packages/boto3/s3/transfer.py", line 629, in upload_file self._put_object(filename, bucket, key, callback, extra_args) File "/usr/lib/python3/dist-packages/boto3/s3/transfer.py", line 639, in _put_object **extra_args) File "/usr/lib/python3/dist-packages/botocore/client.py", line 251, in _api_call return self._make_api_call(operation_name, kwargs) File "/usr/lib/python3/dist-packages/botocore/client.py", line 526, in _make_api_call operation_model, request_dict) File "/usr/lib/python3/dist-packages/botocore/endpoint.py", line 141, in make_request return self._send_request(request_dict, operation_model) File "/usr/lib/python3/dist-packages/botocore/endpoint.py", line 166, in _send_request request = self.create_request(request_dict, operation_model) File "/usr/lib/python3/dist-packages/botocore/endpoint.py", line 151, in create_request prepared_request = self.prepare_request(request) File "/usr/lib/python3/dist-packages/botocore/endpoint.py", line 162, in prepare_request return request.prepare() File "/usr/lib/python3/dist-packages/botocore/awsrequest.py", line 369, in prepare p.prepare_body(self.data, self.files) File "/usr/lib/python3/dist-packages/botocore/awsrequest.py", line 440, in prepare_body data.seek(0, 2) TypeError: seek() takes 2 positional arguments but 3 were given ``` I have a local workaround that doesn't call `upload_file` but just calls `put_object` instead that avoids the problem. ``` print('Uploading %s to %s' % (full_f, bucket_key)) if os.stat(full_f).st_size: bucket.upload_file(full_f, bucket_key) else: print("Empty file fallback behavior") bucket.put_object( Key=bucket_key, Body='' ) ``` And here's it passing with the workaround above. ``` $ python3 run_test.py Uploading results for test: test_upload_20170817144559 from /tmp/output Uploading /tmp/output/ros.bag to test_upload_20170817144559/ros.bag Uploading /tmp/output/gazebo.log to test_upload_20170817144559/gazebo.log Empty file fallback behavior Uploading /tmp/output/test_results/results1.xml to test_upload_20170817144559/results1.xml Empty file fallback behavior Uploading /tmp/output/test_results/results2.xml to test_upload_20170817144559/results2.xml Empty file fallback behavior ``` ** Affects: python-botocore (Ubuntu) Importance: Undecided Status: New -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1711737 Title: botocore API missmatch with python3-requests To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/python-botocore/+bug/1711737/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
