flake8
-
djblets/webapi/tests/test_api_ratelimit.py (Diff revision 1) Show all issues
Review Request #9114 — Created Aug. 1, 2017 and submitted
This change generalizes the rate limiting infrastructure a bit and adds support
for rate limiting API requests. I've changed it so that there are three
settings keys,LOGIN_LIMIT_RATE
,API_ANONYMOUS_LIMIT_RATE
, and
API_AUTHENTICATED_LIMIT_RATE
. These can be set toNone
, which will disable
rate limiting for that type, or to a rate limit string as before.If an API request is rate limited, the response will have the error and include
a couple special headers that show what the limit is and how long the user has
to wait before retrying the request.As part of this, I've also fixed up a couple small issues with the logic
between the different cases depending on the value ofincrement
. In the case
where it'sFalse
, we expect to get results as if we were incrementing, but
without actually storing the value to the cache. Once this was fixed, I was
able to fixis_ratelimited
to actually check if the limit was exceeded,
rather than at or above.Based on work by Raman Dhatt.
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 2 (+133 -14) |
djblets/auth/ratelimit.py (Diff revision 2) |
---|
Do we want to maybe put these into a dict or list and pull them all out at once?
e.g.
_info = { 0: ('LOGIN_LIMIT_RATE', DEFAULT_LOGIN_LIMIT_RATE, 'login-ratelimit'), # ... } try: settings_key, default_value, cache_key_prefix = _info[limit_type] except KeyError: raise ValueError(...)
Also do we want to extract
LOGIN_LIMIT_RATE
etc into constants?
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 3 (+140 -14) |