Browse Source

Just subclass list, naming changes, tests

pull/46/head
Andrei 8 years ago
parent
commit
203befbcf0
  1. 12
      disco/api/client.py
  2. 4
      disco/api/http.py
  3. 2
      examples/basic_plugin.py
  4. 18
      tests/api/client.py

12
disco/api/client.py

@ -4,7 +4,6 @@ import warnings
from contextlib import contextmanager from contextlib import contextmanager
from gevent.local import local from gevent.local import local
from six.moves import UserList
from six.moves.urllib.parse import quote from six.moves.urllib.parse import quote
from disco.api.http import Routes, HTTPClient, to_bytes 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}) return optional(**{'X-Audit-Log-Reason': quote(to_bytes(value)) if value else None})
class Responses(UserList): class Responses(list):
def __init__(self): def rate_limited_duration(self):
super(Responses, self).__init__([]) return sum([i.rate_limited_duration for i in self])
def rate_limited_for(self):
return sum([i.rate_limited_for for i in self.data])
@property @property
def rate_limited(self): def rate_limited(self):
return self.rate_limited_for() != 0 return self.rate_limited_duration() != 0
class APIClient(LoggingClass): class APIClient(LoggingClass):

4
disco/api/http.py

@ -136,7 +136,7 @@ class APIResponse(object):
def __init__(self): def __init__(self):
self.response = None self.response = None
self.exception = None self.exception = None
self.rate_limited_for = 0 self.rate_limited_duration = 0
class APIException(Exception): class APIException(Exception):
@ -262,7 +262,7 @@ class HTTPClient(LoggingClass):
response = APIResponse() response = APIResponse()
# Possibly wait if we're rate limited # 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) self.log.debug('KW: %s', kwargs)

2
examples/basic_plugin.py

@ -22,7 +22,7 @@ class BasicPlugin(Plugin):
print('Rate limited {} for {}'.format( print('Rate limited {} for {}'.format(
requests.rate_limited, requests.rate_limited,
requests.rate_limited_for(), requests.rate_limited_duration(),
)) ))
@Plugin.command('ban', '<user:snowflake> <reason:str...>') @Plugin.command('ban', '<user:snowflake> <reason:str...>')

18
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
Loading…
Cancel
Save