Use mimetypes.guess_type as fallback for determining image file type
authorHarmon <Harmon758@gmail.com>
Sun, 2 Aug 2020 19:49:41 +0000 (14:49 -0500)
committerHarmon <Harmon758@gmail.com>
Sun, 2 Aug 2020 19:49:41 +0000 (14:49 -0500)
Fixes #1411, regression introduced with #1086 where imghdr.what is unable to determine the file type

tweepy/api.py

index 48450d1452a1cffb0d508eb7d1256faf25875440..ba047d34e8c5fa0fcc3c8283ef334f119ba38f60 100644 (file)
@@ -3,6 +3,7 @@
 # See LICENSE for details.
 
 import imghdr
+import mimetypes
 import os
 
 import six
@@ -220,7 +221,7 @@ class API(object):
         """
         f = kwargs.pop('file', None)
 
-        file_type = imghdr.what(filename)
+        file_type = imghdr.what(filename) or mimetypes.guess_type(filename)[0]
         if file_type == 'gif':
             max_size = 14649
         else:
@@ -1417,10 +1418,10 @@ class API(object):
 
         # image must be gif, jpeg, png, webp
         if not file_type:
-            file_type = imghdr.what(filename)
+            file_type = imghdr.what(filename) or mimetypes.guess_type(filename)[0]
         if file_type is None:
             raise TweepError('Could not determine file type')
-        if file_type not in ['gif', 'jpeg', 'png', 'webp']:
+        if file_type not in ['gif', 'jpeg', 'png', 'webp', 'image/gif', 'image/jpeg', 'image/png']:
             raise TweepError('Invalid file type for image: %s' % file_type)
 
         if isinstance(filename, six.text_type):