From 6b5deb4898d2817c484ccbdfceadfdb242ba7aa0 Mon Sep 17 00:00:00 2001 From: codl Date: Sun, 5 Nov 2017 13:37:45 +0100 Subject: add support for mastodon v2.0's string IDs --- mastodon/Mastodon.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index b118421..cc16a10 100644 --- a/mastodon/Mastodon.py +++ b/mastodon/Mastodon.py @@ -16,6 +16,7 @@ import dateutil.parser import re import copy import threading +import sys try: from urllib.parse import urlparse except ImportError: @@ -970,6 +971,7 @@ class Mastodon: return (date_time_utc - epoch_utc).total_seconds() + def __json_date_parse(self, json_object): """ Parse dates in certain known json fields, if possible. @@ -986,6 +988,29 @@ class Mastodon: raise MastodonAPIError('Encountered invalid date.') return json_object + def __json_id_to_bignum(self, json_object): + """ + Converts json string IDs to native python bignums. + """ + if sys.version_info.major >= 3: + str_type = str + else: + str_type = unicode + + if ('id' in json_object and + isinstance(json_object['id'], str_type)): + try: + json_object['id'] = int(json_object['id']) + except ValueError: + pass + + return json_object + + def __json_hooks(self, json_object): + json_object = self.__json_date_parse(json_object) + json_object = self.__json_id_to_bignum(json_object) + return json_object + def __api_request(self, method, endpoint, params={}, files={}, do_ratelimiting=True): """ Internal API request helper. @@ -1104,7 +1129,7 @@ class Mastodon: continue try: - response = response_object.json(object_hook=self.__json_date_parse) + response = response_object.json(object_hook=self.__json_hooks) except: raise MastodonAPIError( "Could not parse response as JSON, response code was %s, " -- cgit v1.2.3 From c7641d71d0b5011020ac94c867f23242927cf6fd Mon Sep 17 00:00:00 2001 From: codl Date: Sun, 5 Nov 2017 13:38:15 +0100 Subject: update supported version in docs --- README.rst | 2 +- docs/index.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 874bb80..d13f90a 100644 --- a/README.rst +++ b/README.rst @@ -35,7 +35,7 @@ Mastodon.py mastodon.toot('Tooting from python using #mastodonpy !') Python wrapper for the Mastodon ( https://github.com/tootsuite/mastodon/ ) API. -Feature complete for public API as of version v1.6 and easy to get started with. +Feature complete for public API as of version v2.0 and easy to get started with. You can install Mastodon.py via pypi: diff --git a/docs/index.rst b/docs/index.rst index fae8b2d..34b7b38 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -46,7 +46,7 @@ node running Mastodon by setting api_base_url when creating the api object (or creating an app). Mastodon.py aims to implement the complete public Mastodon API. As -of this time, it is feature complete for Mastodon version 1.6. +of this time, it is feature complete for Mastodon version 2.0. A note about rate limits ------------------------ -- cgit v1.2.3 From 23d57587e4c95f6a944ae9531d716d39b1d0206a Mon Sep 17 00:00:00 2001 From: James Moore Date: Thu, 9 Nov 2017 11:55:13 -0800 Subject: Added optional media description This works with the new alt text support in mastodon 2.0. --- mastodon/Mastodon.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index b118421..8c2bf8c 100644 --- a/mastodon/Mastodon.py +++ b/mastodon/Mastodon.py @@ -776,7 +776,7 @@ class Mastodon: ### # Writing data: Media ### - def media_post(self, media_file, mime_type=None): + def media_post(self, media_file, mime_type=None, description=None): """ Post an image. media_file can either be image data or a file name. If image data is passed directly, the mime @@ -804,7 +804,8 @@ class Mastodon: media_file_description = (file_name, media_file, mime_type) return self.__api_request('POST', '/api/v1/media', - files={'file': media_file_description}) + files={'file': media_file_description}, + params={'description': description}) ### # Writing data: Domain blocks -- cgit v1.2.3