diff options
-rw-r--r-- | mastodon/Mastodon.py | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index 5f1edb3..5461661 100644 --- a/mastodon/Mastodon.py +++ b/mastodon/Mastodon.py | |||
@@ -89,6 +89,7 @@ class Mastodon: | |||
89 | """ | 89 | """ |
90 | __DEFAULT_BASE_URL = 'https://mastodon.social' | 90 | __DEFAULT_BASE_URL = 'https://mastodon.social' |
91 | __DEFAULT_TIMEOUT = 300 | 91 | __DEFAULT_TIMEOUT = 300 |
92 | __DEFAULT_STREAM_TIMEOUT = 300 | ||
92 | __DEFAULT_STREAM_RECONNECT_WAIT_SEC = 5 | 93 | __DEFAULT_STREAM_RECONNECT_WAIT_SEC = 5 |
93 | __SUPPORTED_MASTODON_VERSION = "2.2.0" | 94 | __SUPPORTED_MASTODON_VERSION = "2.2.0" |
94 | 95 | ||
@@ -1388,45 +1389,45 @@ class Mastodon: | |||
1388 | # Streaming | 1389 | # Streaming |
1389 | ### | 1390 | ### |
1390 | @api_version("1.1.0", "1.4.2") | 1391 | @api_version("1.1.0", "1.4.2") |
1391 | def stream_user(self, listener, run_async=False, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): | 1392 | def stream_user(self, listener, run_async=False, timeout=__DEFAULT_STREAM_TIMEOUT, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): |
1392 | """ | 1393 | """ |
1393 | Streams events that are relevant to the authorized user, i.e. home | 1394 | Streams events that are relevant to the authorized user, i.e. home |
1394 | timeline and notifications. | 1395 | timeline and notifications. |
1395 | """ | 1396 | """ |
1396 | return self.__stream('/api/v1/streaming/user', listener, run_async=run_async, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) | 1397 | return self.__stream('/api/v1/streaming/user', listener, run_async=run_async, timeout=timeout, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) |
1397 | 1398 | ||
1398 | @api_version("1.1.0", "1.4.2") | 1399 | @api_version("1.1.0", "1.4.2") |
1399 | def stream_public(self, listener, run_async=False, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): | 1400 | def stream_public(self, listener, run_async=False, timeout=__DEFAULT_STREAM_TIMEOUT, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): |
1400 | """ | 1401 | """ |
1401 | Streams public events. | 1402 | Streams public events. |
1402 | """ | 1403 | """ |
1403 | return self.__stream('/api/v1/streaming/public', listener, run_async=run_async, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) | 1404 | return self.__stream('/api/v1/streaming/public', listener, run_async=run_async, timeout=timeout, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) |
1404 | 1405 | ||
1405 | @api_version("1.1.0", "1.4.2") | 1406 | @api_version("1.1.0", "1.4.2") |
1406 | def stream_local(self, listener, run_async=False, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): | 1407 | def stream_local(self, listener, run_async=False, timeout=__DEFAULT_STREAM_TIMEOUT, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): |
1407 | """ | 1408 | """ |
1408 | Streams local public events. | 1409 | Streams local public events. |
1409 | """ | 1410 | """ |
1410 | return self.__stream('/api/v1/streaming/public/local', listener, run_async=run_async, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) | 1411 | return self.__stream('/api/v1/streaming/public/local', listener, run_async=run_async, timeout=timeout, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) |
1411 | 1412 | ||
1412 | @api_version("1.1.0", "1.4.2") | 1413 | @api_version("1.1.0", "1.4.2") |
1413 | def stream_hashtag(self, tag, listener, run_async=False, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): | 1414 | def stream_hashtag(self, tag, listener, run_async=False, timeout=__DEFAULT_STREAM_TIMEOUT, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): |
1414 | """ | 1415 | """ |
1415 | Stream for all public statuses for the hashtag 'tag' seen by the connected | 1416 | Stream for all public statuses for the hashtag 'tag' seen by the connected |
1416 | instance. | 1417 | instance. |
1417 | """ | 1418 | """ |
1418 | if tag.startswith("#"): | 1419 | if tag.startswith("#"): |
1419 | raise MastodonIllegalArgumentError("Tag parameter should omit leading #") | 1420 | raise MastodonIllegalArgumentError("Tag parameter should omit leading #") |
1420 | return self.__stream("/api/v1/streaming/hashtag?tag={}".format(tag), listener, run_async=run_async, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) | 1421 | return self.__stream("/api/v1/streaming/hashtag?tag={}".format(tag), listener, run_async=run_async, timeout=timeout, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) |
1421 | 1422 | ||
1422 | @api_version("2.1.0", "2.1.0") | 1423 | @api_version("2.1.0", "2.1.0") |
1423 | def stream_list(self, id, listener, run_async=False, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): | 1424 | def stream_list(self, id, listener, run_async=False, timeout=__DEFAULT_STREAM_TIMEOUT, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): |
1424 | """ | 1425 | """ |
1425 | Stream events for the current user, restricted to accounts on the given | 1426 | Stream events for the current user, restricted to accounts on the given |
1426 | list. | 1427 | list. |
1427 | """ | 1428 | """ |
1428 | id = self.__unpack_id(id) | 1429 | id = self.__unpack_id(id) |
1429 | return self.__stream("/api/v1/streaming/list?list={}".format(id), listener, run_async=run_async, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) | 1430 | return self.__stream("/api/v1/streaming/list?list={}".format(id), listener, run_async=run_async, timeout=timeout, reconnect_async=reconnect_async, reconnect_async_wait_sec=reconnect_async_wait_sec) |
1430 | 1431 | ||
1431 | ### | 1432 | ### |
1432 | # Internal helpers, dragons probably | 1433 | # Internal helpers, dragons probably |
@@ -1668,7 +1669,7 @@ class Mastodon: | |||
1668 | 1669 | ||
1669 | return response | 1670 | return response |
1670 | 1671 | ||
1671 | def __stream(self, endpoint, listener, params={}, run_async=False, reconnect_async=False, reconnect_async_wait_sec=5): | 1672 | def __stream(self, endpoint, listener, params={}, run_async=False, timeout=__DEFAULT_STREAM_TIMEOUT, reconnect_async=False, reconnect_async_wait_sec=__DEFAULT_STREAM_RECONNECT_WAIT_SEC): |
1672 | """ | 1673 | """ |
1673 | Internal streaming API helper. | 1674 | Internal streaming API helper. |
1674 | 1675 | ||
@@ -1700,7 +1701,8 @@ class Mastodon: | |||
1700 | # Connect function (called and then potentially passed to async handler) | 1701 | # Connect function (called and then potentially passed to async handler) |
1701 | def connect_func(): | 1702 | def connect_func(): |
1702 | headers = {"Authorization": "Bearer " + self.access_token} | 1703 | headers = {"Authorization": "Bearer " + self.access_token} |
1703 | connection = requests.get(url + endpoint, headers = headers, data = params, stream = True) | 1704 | connection = requests.get(url + endpoint, headers = headers, data = params, stream = True, |
1705 | timeout=(self.request_timeout, timeout)) | ||
1704 | 1706 | ||
1705 | if connection.status_code != 200: | 1707 | if connection.status_code != 200: |
1706 | raise MastodonNetworkError("Could not connect to streaming server: %s" % connection.reason) | 1708 | raise MastodonNetworkError("Could not connect to streaming server: %s" % connection.reason) |