Skip to content

Commit b2d86c6

Browse files
committed
Add self.retry_after to SparkRateLimitError class
If one sets the wait_on_rate_limit to True in their CiscoSparkAPI class instantiation, they will hit an error telling them that retry_after is not an attribute of the SparkRateLimitError class. This is because the RestSession class checks for its existence when it catches the error at line 282 in restsession.py Error: File "/home/daspano/../ciscosparkapi/restsession.py", line 282, in request if self.wait_on_rate_limit and e.retry_after: AttributeError: 'SparkRateLimitError' object has no attribute 'retry_after' This commit adds that the retry_after attribute as an int, as my testing shows the Retry-After result always being an integer in seconds. Ex: -----------------------------------Response------------------------------------ 429 Too Many Requests Date: Wed, 15 Nov 2017 21:47:00 GMT Content-Type: application/json Content-Length: 182 Connection: keep-alive TrackingID: ROUTER_5A0CB5D2-B92F-01BB-7C3F-AC12D9227C3F Cache-Control: no-cache Retry-After: 194 Server: Redacted l5d-success-class: 1.0 Via: 1.1 linkerd content-encoding: gzip Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
1 parent efabff5 commit b2d86c6

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

ciscosparkapi/exceptions.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,12 @@ def __init__(self, response):
140140

141141
class SparkRateLimitError(SparkApiError):
142142
"""Cisco Spark Rate-Limit exceeded Error."""
143-
pass
143+
144+
def __init__(self, response):
145+
assert isinstance(response, requests.Response)
146+
147+
# Set a sane default just incase Spark lets us down
148+
self.retry_after = 200
149+
150+
if 'Retry-After' in response.headers.keys():
151+
self.retry_after = int(response.headers['Retry-After'])

ciscosparkapi/restsession.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ def request(self, method, url, erc, **kwargs):
281281
# Wait and retry if automatic rate-limit handling is enabled
282282
if self.wait_on_rate_limit and e.retry_after:
283283
logger.info("Received rate-limit message; "
284-
"waiting {:0.0f} seconds."
284+
"waiting {0} seconds."
285285
"".format(e.retry_after))
286286
time.sleep(e.retry_after)
287287
continue

0 commit comments

Comments
 (0)