diff options
author | codl <[email protected]> | 2018-04-08 23:06:09 +0200 |
---|---|---|
committer | codl <[email protected]> | 2018-04-08 23:07:08 +0200 |
commit | 06a7a875fe2705044b98f3ef285944b5513be7de (patch) | |
tree | 29d59351b48e046588523c539d0eccf398441862 | |
parent | d98a3546a318bca88469a1accde99ecdf46574c1 (diff) | |
download | mastodon.py-06a7a875fe2705044b98f3ef285944b5513be7de.tar.gz |
add timeouts to streams (GH-127)
-rw-r--r-- | mastodon/Mastodon.py | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index 8b7064f..ea54649 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 | __SUPPORTED_MASTODON_VERSION = "2.2.0" | 93 | __SUPPORTED_MASTODON_VERSION = "2.2.0" |
93 | 94 | ||
94 | ### | 95 | ### |
@@ -1395,37 +1396,37 @@ class Mastodon: | |||
1395 | return self.__stream('/api/v1/streaming/user', listener, async=async) | 1396 | return self.__stream('/api/v1/streaming/user', listener, async=async) |
1396 | 1397 | ||
1397 | @api_version("1.1.0", "1.4.2") | 1398 | @api_version("1.1.0", "1.4.2") |
1398 | def stream_public(self, listener, async=False): | 1399 | def stream_public(self, listener, async=False, timeout=__DEFAULT_STREAM_TIMEOUT): |
1399 | """ | 1400 | """ |
1400 | Streams public events. | 1401 | Streams public events. |
1401 | """ | 1402 | """ |
1402 | return self.__stream('/api/v1/streaming/public', listener, async=async) | 1403 | return self.__stream('/api/v1/streaming/public', listener, async=async, timeout=timeout) |
1403 | 1404 | ||
1404 | @api_version("1.1.0", "1.4.2") | 1405 | @api_version("1.1.0", "1.4.2") |
1405 | def stream_local(self, listener, async=False): | 1406 | def stream_local(self, listener, async=False, timeout=__DEFAULT_STREAM_TIMEOUT): |
1406 | """ | 1407 | """ |
1407 | Streams local public events. | 1408 | Streams local public events. |
1408 | """ | 1409 | """ |
1409 | return self.__stream('/api/v1/streaming/public/local', listener, async=async) | 1410 | return self.__stream('/api/v1/streaming/public/local', listener, async=async, timeout=timeout) |
1410 | 1411 | ||
1411 | @api_version("1.1.0", "1.4.2") | 1412 | @api_version("1.1.0", "1.4.2") |
1412 | def stream_hashtag(self, tag, listener, async=False): | 1413 | def stream_hashtag(self, tag, listener, async=False, timeout=__DEFAULT_STREAM_TIMEOUT): |
1413 | """ | 1414 | """ |
1414 | Stream for all public statuses for the hashtag 'tag' seen by the connected | 1415 | Stream for all public statuses for the hashtag 'tag' seen by the connected |
1415 | instance. | 1416 | instance. |
1416 | """ | 1417 | """ |
1417 | if tag.startswith("#"): | 1418 | if tag.startswith("#"): |
1418 | raise MastodonIllegalArgumentError("Tag parameter should omit leading #") | 1419 | raise MastodonIllegalArgumentError("Tag parameter should omit leading #") |
1419 | return self.__stream("/api/v1/streaming/hashtag?tag={}".format(tag), listener, async=async) | 1420 | return self.__stream("/api/v1/streaming/hashtag?tag={}".format(tag), listener, async=async, timeout=timeout) |
1420 | 1421 | ||
1421 | @api_version("2.1.0", "2.1.0") | 1422 | @api_version("2.1.0", "2.1.0") |
1422 | def stream_list(self, id, listener, async=False): | 1423 | def stream_list(self, id, listener, async=False, timeout=__DEFAULT_STREAM_TIMEOUT): |
1423 | """ | 1424 | """ |
1424 | Stream events for the current user, restricted to accounts on the given | 1425 | Stream events for the current user, restricted to accounts on the given |
1425 | list. | 1426 | list. |
1426 | """ | 1427 | """ |
1427 | id = self.__unpack_id(id) | 1428 | id = self.__unpack_id(id) |
1428 | return self.__stream("/api/v1/streaming/list?list={}".format(id), listener, async=async) | 1429 | return self.__stream("/api/v1/streaming/list?list={}".format(id), listener, async=async, timeout=timeout) |
1429 | 1430 | ||
1430 | ### | 1431 | ### |
1431 | # Internal helpers, dragons probably | 1432 | # Internal helpers, dragons probably |
@@ -1667,7 +1668,7 @@ class Mastodon: | |||
1667 | 1668 | ||
1668 | return response | 1669 | return response |
1669 | 1670 | ||
1670 | def __stream(self, endpoint, listener, params={}, async=False): | 1671 | def __stream(self, endpoint, listener, params={}, async=False, timeout=__DEFAULT_STREAM_TIMEOUT): |
1671 | """ | 1672 | """ |
1672 | Internal streaming API helper. | 1673 | Internal streaming API helper. |
1673 | 1674 | ||
@@ -1697,7 +1698,8 @@ class Mastodon: | |||
1697 | url = url[:-1] | 1698 | url = url[:-1] |
1698 | 1699 | ||
1699 | headers = {"Authorization": "Bearer " + self.access_token} | 1700 | headers = {"Authorization": "Bearer " + self.access_token} |
1700 | connection = requests.get(url + endpoint, headers = headers, data = params, stream = True) | 1701 | connection = requests.get(url + endpoint, headers = headers, data = params, stream = True, |
1702 | timeout=(self.request_timeout, timeout)) | ||
1701 | 1703 | ||
1702 | if connection.status_code != 200: | 1704 | if connection.status_code != 200: |
1703 | raise MastodonNetworkError("Could not connect to streaming server: %s" % connection.reason) | 1705 | raise MastodonNetworkError("Could not connect to streaming server: %s" % connection.reason) |