aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mastodon')
-rw-r--r--mastodon/Mastodon.py35
1 files changed, 31 insertions, 4 deletions
diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py
index 0374427..1dfba7a 100644
--- a/mastodon/Mastodon.py
+++ b/mastodon/Mastodon.py
@@ -925,6 +925,7 @@ class Mastodon:
925 connection may be closed at any time by calling its close() method. 925 connection may be closed at any time by calling its close() method.
926 """ 926 """
927 return self.__stream("/api/v1/streaming/hashtag?tag={}".format(tag), listener) 927 return self.__stream("/api/v1/streaming/hashtag?tag={}".format(tag), listener)
928
928 ### 929 ###
929 # Internal helpers, dragons probably 930 # Internal helpers, dragons probably
930 ### 931 ###
@@ -945,6 +946,19 @@ class Mastodon:
945 946
946 return (date_time_utc - epoch_utc).total_seconds() 947 return (date_time_utc - epoch_utc).total_seconds()
947 948
949 def __json_date_parse(self, json_object):
950 """
951 Parse dates in certain known json fields, if possible.
952 """
953 known_date_fields = ["created_at"]
954 for k, v in json_object.items():
955 if k in known_date_fields:
956 try:
957 json_object[k] = dateutil.parser.parse(v)
958 except:
959 raise MastodonAPIError('Encountered invalid date.')
960 return json_object
961
948 def __api_request(self, method, endpoint, params={}, files={}, do_ratelimiting=True): 962 def __api_request(self, method, endpoint, params={}, files={}, do_ratelimiting=True):
949 """ 963 """
950 Internal API request helper. 964 Internal API request helper.
@@ -1016,19 +1030,32 @@ class Mastodon:
1016 print('Response text content: ' + str(response_object.text)) 1030 print('Response text content: ' + str(response_object.text))
1017 1031
1018 if response_object.status_code == 404: 1032 if response_object.status_code == 404:
1019 raise MastodonAPIError('Endpoint not found.') 1033 try:
1020 1034 response = response_object.json()
1035 except:
1036 raise MastodonAPIError('Endpoint not found.')
1037
1038 if isinstance(response, dict) and 'error' in response:
1039 raise MastodonAPIError("Mastodon API returned error: " + str(response['error']))
1040 else:
1041 raise MastodonAPIError('Endpoint not found.')
1042
1043
1021 if response_object.status_code == 500: 1044 if response_object.status_code == 500:
1022 raise MastodonAPIError('General API problem.') 1045 raise MastodonAPIError('General API problem.')
1023 1046
1024 try: 1047 try:
1025 response = response_object.json() 1048 response = response_object.json(object_hook=self.__json_date_parse)
1026 except: 1049 except:
1027 raise MastodonAPIError( 1050 raise MastodonAPIError(
1028 "Could not parse response as JSON, response code was %s, " 1051 "Could not parse response as JSON, response code was %s, "
1029 "bad json content was '%s'" % (response_object.status_code, 1052 "bad json content was '%s'" % (response_object.status_code,
1030 response_object.content)) 1053 response_object.content))
1031 1054
1055 # See if the returned dict is an error dict even though status is 200
1056 if isinstance(response, dict) and 'error' in response:
1057 raise MastodonAPIError("Mastodon API returned error: " + str(response['error']))
1058
1032 # Parse link headers 1059 # Parse link headers
1033 if isinstance(response, list) and \ 1060 if isinstance(response, list) and \
1034 'Link' in response_object.headers and \ 1061 'Link' in response_object.headers and \
Powered by cgit v1.2.3 (git 2.41.0)