From 203befbcf0d6c379fd89788c61ff9f843674a5a4 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 19 Jul 2017 20:09:47 -0700 Subject: [PATCH] Just subclass list, naming changes, tests --- disco/api/client.py | 12 ++++-------- disco/api/http.py | 4 ++-- examples/basic_plugin.py | 2 +- tests/api/client.py | 18 ++++++++++++++++++ 4 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 tests/api/client.py diff --git a/disco/api/client.py b/disco/api/client.py index ccae1f3..37c7413 100644 --- a/disco/api/client.py +++ b/disco/api/client.py @@ -4,7 +4,6 @@ import warnings from contextlib import contextmanager from gevent.local import local -from six.moves import UserList from six.moves.urllib.parse import quote from disco.api.http import Routes, HTTPClient, to_bytes @@ -32,16 +31,13 @@ def _reason_header(value): return optional(**{'X-Audit-Log-Reason': quote(to_bytes(value)) if value else None}) -class Responses(UserList): - def __init__(self): - super(Responses, self).__init__([]) - - def rate_limited_for(self): - return sum([i.rate_limited_for for i in self.data]) +class Responses(list): + def rate_limited_duration(self): + return sum([i.rate_limited_duration for i in self]) @property def rate_limited(self): - return self.rate_limited_for() != 0 + return self.rate_limited_duration() != 0 class APIClient(LoggingClass): diff --git a/disco/api/http.py b/disco/api/http.py index c10fbeb..2950fcc 100644 --- a/disco/api/http.py +++ b/disco/api/http.py @@ -136,7 +136,7 @@ class APIResponse(object): def __init__(self): self.response = None self.exception = None - self.rate_limited_for = 0 + self.rate_limited_duration = 0 class APIException(Exception): @@ -262,7 +262,7 @@ class HTTPClient(LoggingClass): response = APIResponse() # Possibly wait if we're rate limited - response.rate_limited_for = self.limiter.check(bucket) + response.rate_limited_duration = self.limiter.check(bucket) self.log.debug('KW: %s', kwargs) diff --git a/examples/basic_plugin.py b/examples/basic_plugin.py index c705218..b615aa8 100644 --- a/examples/basic_plugin.py +++ b/examples/basic_plugin.py @@ -22,7 +22,7 @@ class BasicPlugin(Plugin): print('Rate limited {} for {}'.format( requests.rate_limited, - requests.rate_limited_for(), + requests.rate_limited_duration(), )) @Plugin.command('ban', ' ') diff --git a/tests/api/client.py b/tests/api/client.py new file mode 100644 index 0000000..cbc5c83 --- /dev/null +++ b/tests/api/client.py @@ -0,0 +1,18 @@ +from disco.api.client import Responses +from disco.api.http import APIResponse + + +def test_responses_list(): + r = Responses() + r.append(APIResponse()) + r.append(APIResponse()) + + assert not r.rate_limited + assert r.rate_limited_duration() == 0 + + res = APIResponse() + res.rate_limited_duration = 5.5 + r.append(res) + + assert r.rate_limited + assert r.rate_limited_duration() == 5.5