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 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):

4
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)

2
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', '<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