diff --git a/.gitignore b/.gitignore index e146528..66273be 100644 --- a/.gitignore +++ b/.gitignore @@ -91,4 +91,6 @@ ENV/ # Secret files (for credentials used in testing) *.secret pytooter_clientcred.txt -pytooter_usercred.txt \ No newline at end of file +pytooter_usercred.txtPipfile +Pipfile.lock +Pipfile diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index 7f0f0fd..a5c05b7 100644 --- a/mastodon/Mastodon.py +++ b/mastodon/Mastodon.py @@ -31,6 +31,11 @@ try: except ImportError: from urlparse import urlparse +try: + import magic +except ImportError: + magic = None + ### # Version check functions, including decorator and parser ### @@ -1491,7 +1496,7 @@ class Mastodon: # Load avatar, if specified if not avatar is None: if avatar_mime_type is None and os.path.isfile(avatar): - avatar_mime_type = mimetypes.guess_type(avatar)[0] + avatar_mime_type = guess_type(avatar) avatar = open(avatar, 'rb') if avatar_mime_type is None: @@ -1500,7 +1505,7 @@ class Mastodon: # Load header, if specified if not header is None: if header_mime_type is None and os.path.isfile(header): - header_mime_type = mimetypes.guess_type(header)[0] + header_mime_type = guess_type(header) header = open(header, 'rb') if header_mime_type is None: @@ -1720,7 +1725,7 @@ class Mastodon: status_post to attach the media file to a toot. """ if mime_type is None and os.path.isfile(media_file): - mime_type = mimetypes.guess_type(media_file)[0] + mime_type = guess_type(media_file) media_file = open(media_file, 'rb') elif mime_type and os.path.isfile(media_file): media_file = open(media_file, 'rb') @@ -2531,3 +2536,11 @@ class MastodonRatelimitError(MastodonError): class MastodonMalformedEventError(MastodonError): """Raised when the server-sent event stream is malformed""" pass + +def guess_type(media_file): + mime_type = None + if magic: + mime_type = magic.from_file(media_file, mime=True) + else: + mime_type = mimetypes.guess_type(media_file)[0] + return mime_type diff --git a/setup.py b/setup.py index e49c26c..009063d 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,8 @@ setup(name='Mastodon.py', 'requests', 'python-dateutil', 'six', - 'pytz', + 'pytz', + 'python-magic', 'decorator>=4.0.0', 'http_ece>=1.0.5', 'cryptography>=1.6.0'