From 34e97a9b4dc69ccd45079828631a0320eaf56a29 Mon Sep 17 00:00:00 2001 From: halcy Date: Sun, 23 Apr 2023 19:57:22 +0300 Subject: [PATCH] Add explicit path resolution for __load_media_file to maybe circumvent a mystery problem in some configurations. --- mastodon/compat.py | 4 +++- mastodon/internals.py | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/mastodon/compat.py b/mastodon/compat.py index 905bfa7..e8c2f46 100644 --- a/mastodon/compat.py +++ b/mastodon/compat.py @@ -38,8 +38,10 @@ except ImportError: magic = None try: - from pathlib import PurePath + from pathlib import PurePath, Path except: class PurePath: pass + class Path: + pass diff --git a/mastodon/internals.py b/mastodon/internals.py index 32541fd..05485a6 100644 --- a/mastodon/internals.py +++ b/mastodon/internals.py @@ -19,7 +19,7 @@ from .utility import AttribAccessDict, AttribAccessList, parse_version_string from .errors import MastodonNetworkError, MastodonIllegalArgumentError, MastodonRatelimitError, MastodonNotFoundError, \ MastodonUnauthorizedError, MastodonInternalServerError, MastodonBadGatewayError, MastodonServiceUnavailableError, \ MastodonGatewayTimeoutError, MastodonServerError, MastodonAPIError, MastodonMalformedEventError -from .compat import urlparse, magic, PurePath +from .compat import urlparse, magic, PurePath, Path from .defaults import _DEFAULT_STREAM_TIMEOUT, _DEFAULT_STREAM_RECONNECT_WAIT_SEC @@ -625,11 +625,14 @@ class Mastodon(): def __load_media_file(self, media_file, mime_type=None, file_name=None): if isinstance(media_file, PurePath): media_file = str(media_file) + if isinstance(media_file, str): + try: # Explicitly resolve to canonical for robustness. This can and will fail if Path isn't available because python too old. + media_file = Path(media_file).resolve() + except: + pass if isinstance(media_file, str) and os.path.isfile(media_file): mime_type = self.__guess_type(media_file) media_file = open(media_file, 'rb') - elif isinstance(media_file, str) and os.path.isfile(media_file): - media_file = open(media_file, 'rb') if mime_type is None: raise MastodonIllegalArgumentError('Could not determine mime type or data passed directly without mime type.') if file_name is None: