From 464522407a985eb60a8e55acb665851b023f31ef Mon Sep 17 00:00:00 2001 From: Harmon Date: Tue, 12 Jan 2021 09:00:54 -0600 Subject: [PATCH] Use files parameter of requests Session.request for API.image_upload --- tweepy/api.py | 15 +++++++-------- tweepy/binder.py | 2 ++ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/tweepy/api.py b/tweepy/api.py index ae6655f..d536b1a 100644 --- a/tweepy/api.py +++ b/tweepy/api.py @@ -248,19 +248,18 @@ class API: raise TweepError(f'Media files must be smaller than {MAX_UPLOAD_SIZE_CHUNKED} kb') if file_type in IMAGE_TYPES and size_bytes < MAX_UPLOAD_SIZE_STANDARD * 1024: - return self.image_upload(filename, MAX_UPLOAD_SIZE_STANDARD * 1024, file_type=file_type, f=f, *args, **kwargs) + return self.image_upload(filename, f=f, *args, **kwargs) else: return self.upload_chunked(filename, f=f, file_type=file_type, *args, **kwargs) - def image_upload(self, filename, max_size, *args, **kwargs): + def image_upload(self, filename, f=None, *args, **kwargs): """ :reference: https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload :allowed_param: """ - headers, post_data = API._pack_image(filename, max_size, - form_field='media', f=kwargs.get('f'), - file_type=kwargs.get('file_type') - ) - kwargs.update({'headers': headers, 'post_data': post_data}) + if f is not None: + files = {'media': (filename, f)} + else: + files = {'media': open(filename, 'rb')} return bind_api( api=self, path='/media/upload.json', @@ -269,7 +268,7 @@ class API: allowed_param=[], require_auth=True, upload_api=True - )(*args, **kwargs) + )(*args, files=files, **kwargs) def upload_chunked(self, filename, *args, **kwargs): """ :reference https://developer.twitter.com/en/docs/media/upload-media/uploading-media/chunked-media-upload diff --git a/tweepy/binder.py b/tweepy/binder.py index 893e176..b9781bf 100644 --- a/tweepy/binder.py +++ b/tweepy/binder.py @@ -42,6 +42,7 @@ def bind_api(**config): raise TweepError('Authentication required!') self.post_data = kwargs.pop('post_data', None) + self.files = kwargs.pop('files', None) self.json_payload = kwargs.pop('json_payload', None) self.retry_count = kwargs.pop('retry_count', api.retry_count) @@ -173,6 +174,7 @@ def bind_api(**config): resp = self.session.request(self.method, full_url, data=self.post_data, + files=self.files, json=self.json_payload, timeout=self.api.timeout, auth=auth, -- 2.25.1