Properly close file in API.simple_upload
authorHarmon <Harmon758@gmail.com>
Wed, 19 May 2021 15:42:34 +0000 (10:42 -0500)
committerHarmon <Harmon758@gmail.com>
Wed, 19 May 2021 15:42:34 +0000 (10:42 -0500)
tweepy/api.py

index f48d46090657e4677e18d91cdf03d6bd5476a441..8acf89b310f247d5a498c3fad67e504875087447 100644 (file)
@@ -2570,21 +2570,22 @@ class API:
 
         :reference: https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload
         """
-        if file is not None:
-            files = {'media': (filename, file)}
-        else:
-            files = {'media': open(filename, 'rb')}
+        with contextlib.ExitStack() as stack:
+            if file is not None:
+                files = {'media': (filename, file)}
+            else:
+                files = {'media': stack.enter_context(open(filename, 'rb'))}
 
-        post_data = {}
-        if media_category is not None:
-            post_data['media_category'] = media_category
-        if additional_owners is not None:
-            post_data['additional_owners'] = additional_owners
+            post_data = {}
+            if media_category is not None:
+                post_data['media_category'] = media_category
+            if additional_owners is not None:
+                post_data['additional_owners'] = additional_owners
 
-        return self.request(
-            'POST', 'media/upload', post_data=post_data, files=files,
-            upload_api=True, **kwargs
-        )
+            return self.request(
+                'POST', 'media/upload', post_data=post_data, files=files,
+                upload_api=True, **kwargs
+            )
 
     def chunked_upload(self, filename, *, file=None, file_type=None,
                        wait_for_async_finalize=True, media_category=None,