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

index d82df20bbc2043ed5384efc7f7d2cb6d202eff04..856e0ab752df4da2b3fbb452f4e74e7d44a12047 100644 (file)
@@ -2,6 +2,7 @@
 # Copyright 2009-2021 Joshua Roesslein
 # See LICENSE for details.
 
+import contextlib
 import functools
 import imghdr
 import logging
@@ -940,16 +941,17 @@ class API:
 
         :reference: https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update_with_media
         """
-        if file is not None:
-            files = {'media[]': (filename, file)}
-        else:
-            files = {'media[]': open(filename, 'rb')}
-        return self.request(
-            'POST', 'statuses/update_with_media', endpoint_parameters=(
-                'status', 'possibly_sensitive', 'in_reply_to_status_id',
-                'lat', 'long', 'place_id', 'display_coordinates'
-            ), status=status, files=files, **kwargs
-        )
+        with contextlib.ExitStack() as stack:
+            if file is not None:
+                files = {'media[]': (filename, file)}
+            else:
+                files = {'media[]': stack.enter_context(open(filename, 'rb'))}
+            return self.request(
+                'POST', 'statuses/update_with_media', endpoint_parameters=(
+                    'status', 'possibly_sensitive', 'in_reply_to_status_id',
+                    'lat', 'long', 'place_id', 'display_coordinates'
+                ), status=status, files=files, **kwargs
+            )
 
     # Search Tweets