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, "