diff options
Diffstat (limited to 'mastodon')
-rw-r--r-- | mastodon/Mastodon.py | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index 9ccba5b..53b6bc1 100644 --- a/mastodon/Mastodon.py +++ b/mastodon/Mastodon.py | |||
@@ -701,7 +701,8 @@ class Mastodon: | |||
701 | """ | 701 | """ |
702 | Basic health check. Returns True if healthy, False if not. | 702 | Basic health check. Returns True if healthy, False if not. |
703 | """ | 703 | """ |
704 | return self.__api_request('GET', '/health', parse=False).decode("utf-8") == "success" | 704 | status = self.__api_request('GET', '/health', parse=False).decode("utf-8") |
705 | return status in ["OK", "success"] | ||
705 | 706 | ||
706 | @api_version("3.0.0", "3.0.0", "3.0.0") | 707 | @api_version("3.0.0", "3.0.0", "3.0.0") |
707 | def instance_nodeinfo(self, schema = "http://nodeinfo.diaspora.software/ns/schema/2.0"): | 708 | def instance_nodeinfo(self, schema = "http://nodeinfo.diaspora.software/ns/schema/2.0"): |
@@ -2522,8 +2523,8 @@ class Mastodon: | |||
2522 | ### | 2523 | ### |
2523 | # Writing data: Media | 2524 | # Writing data: Media |
2524 | ### | 2525 | ### |
2525 | @api_version("1.0.0", "2.9.1", __DICT_VERSION_MEDIA) | 2526 | @api_version("1.0.0", "3.1.4", __DICT_VERSION_MEDIA) |
2526 | def media_post(self, media_file, mime_type=None, description=None, focus=None, file_name=None): | 2527 | def media_post(self, media_file, mime_type=None, description=None, focus=None, file_name=None, synchronous=False): |
2527 | """ | 2528 | """ |
2528 | Post an image, video or audio file. `media_file` can either be image data or | 2529 | Post an image, video or audio file. `media_file` can either be image data or |
2529 | a file name. If image data is passed directly, the mime | 2530 | a file name. If image data is passed directly, the mime |
@@ -2542,6 +2543,12 @@ class Mastodon: | |||
2542 | 2543 | ||
2543 | Returns a `media dict`_. This contains the id that can be used in | 2544 | Returns a `media dict`_. This contains the id that can be used in |
2544 | status_post to attach the media file to a toot. | 2545 | status_post to attach the media file to a toot. |
2546 | |||
2547 | When using the v2 API (post Mastodon version 3.1.4), the `url` in the | ||
2548 | returned dict will be `null`, since attachments are processed | ||
2549 | asynchronously. You can fetch an updated dict using `media`. Pass | ||
2550 | "synchronous" to emulate the old behaviour. Not recommended, inefficient | ||
2551 | and deprecated, you know the deal. | ||
2545 | """ | 2552 | """ |
2546 | if mime_type is None and (isinstance(media_file, str) and os.path.isfile(media_file)): | 2553 | if mime_type is None and (isinstance(media_file, str) and os.path.isfile(media_file)): |
2547 | mime_type = guess_type(media_file) | 2554 | mime_type = guess_type(media_file) |
@@ -2562,10 +2569,32 @@ class Mastodon: | |||
2562 | focus = str(focus[0]) + "," + str(focus[1]) | 2569 | focus = str(focus[0]) + "," + str(focus[1]) |
2563 | 2570 | ||
2564 | media_file_description = (file_name, media_file, mime_type) | 2571 | media_file_description = (file_name, media_file, mime_type) |
2565 | return self.__api_request('POST', '/api/v1/media', | 2572 | |
2566 | files={'file': media_file_description}, | 2573 | # Disambiguate URL by version |
2567 | params={'description': description, 'focus': focus}) | 2574 | if self.verify_minimum_version("3.1.4"): |
2568 | 2575 | ret_dict = self.__api_request('POST', '/api/v2/media', | |
2576 | files={'file': media_file_description}, | ||
2577 | params={'description': description, 'focus': focus}) | ||
2578 | else: | ||
2579 | ret_dict = self.__api_request('POST', '/api/v1/media', | ||
2580 | files={'file': media_file_description}, | ||
2581 | params={'description': description, 'focus': focus}) | ||
2582 | |||
2583 | # Wait for processing? | ||
2584 | if synchronous: | ||
2585 | if self.verify_minimum_version("3.1.4"): | ||
2586 | while not "url" in ret_dict or ret_dict.url == None: | ||
2587 | try: | ||
2588 | ret_dict = self.media(ret_dict) | ||
2589 | time.sleep(1.0) | ||
2590 | except: | ||
2591 | raise MastodonAPIError("Attachment could not be processed") | ||
2592 | else: | ||
2593 | # Old version always waits | ||
2594 | return ret_dict | ||
2595 | |||
2596 | return ret_dict | ||
2597 | |||
2569 | @api_version("2.3.0", "2.3.0", __DICT_VERSION_MEDIA) | 2598 | @api_version("2.3.0", "2.3.0", __DICT_VERSION_MEDIA) |
2570 | def media_update(self, id, description=None, focus=None): | 2599 | def media_update(self, id, description=None, focus=None): |
2571 | """ | 2600 | """ |
@@ -2582,6 +2611,15 @@ class Mastodon: | |||
2582 | params = self.__generate_params(locals(), ['id']) | 2611 | params = self.__generate_params(locals(), ['id']) |
2583 | return self.__api_request('PUT', '/api/v1/media/{0}'.format(str(id)), params) | 2612 | return self.__api_request('PUT', '/api/v1/media/{0}'.format(str(id)), params) |
2584 | 2613 | ||
2614 | @api_version("3.1.4", "3.1.4", __DICT_VERSION_MEDIA) | ||
2615 | def media(self, id): | ||
2616 | """ | ||
2617 | Get the updated JSON for one non-attached / in progress media upload belonging | ||
2618 | to the logged-in user. | ||
2619 | """ | ||
2620 | id = self.__unpack_id(id) | ||
2621 | return self.__api_request('GET', '/api/v1/media/{0}'.format(str(id))) | ||
2622 | |||
2585 | ### | 2623 | ### |
2586 | # Writing data: Domain blocks | 2624 | # Writing data: Domain blocks |
2587 | ### | 2625 | ### |