From 68efc6f7560405ae86adfa09f1b0eeeb7ebb51f1 Mon Sep 17 00:00:00 2001 From: Sylvain Lemiere Date: Mon, 19 Nov 2018 15:46:00 +0100 Subject: [PATCH 1/2] Fix rate limiting when 'Retry-After' is missing (#161) --- nest/nest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nest/nest.py b/nest/nest.py index a7100f8..2161a12 100644 --- a/nest/nest.py +++ b/nest/nest.py @@ -1699,7 +1699,7 @@ def _handle_ratelimit(self, res, verb, url, data, retries = 0 while response.status_code == 429 and retries <= max_retries: retries += 1 - retry_after = response.headers['Retry-After'] + retry_after = response.headers.get('Retry-After', 'N/A') _LOGGER.info("Reach rate limit, retry (%d), after %s", retries, retry_after) # Default Retry Time From ad5476c445dfa85036618bb9c67f598cc3b8ba4d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 19 Nov 2018 15:51:18 +0100 Subject: [PATCH 2/2] Version bump to 4.0.5 --- nest/nest.py | 23 ++++++++++++----------- setup.py | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/nest/nest.py b/nest/nest.py index 2161a12..cc9b3ba 100644 --- a/nest/nest.py +++ b/nest/nest.py @@ -1699,24 +1699,25 @@ def _handle_ratelimit(self, res, verb, url, data, retries = 0 while response.status_code == 429 and retries <= max_retries: retries += 1 - retry_after = response.headers.get('Retry-After', 'N/A') + retry_after = response.headers.get('Retry-After') _LOGGER.info("Reach rate limit, retry (%d), after %s", retries, retry_after) # Default Retry Time wait = default_wait - try: - # Checks if retry_after is a number - wait = float(retry_after) - except ValueError: - # If not: + if retry_after is not None: try: - # Checks if retry_after is a HTTP date - now = datetime.datetime.now() - wait = (now - parse_time(retry_after)).total_seconds() + # Checks if retry_after is a number + wait = float(retry_after) except ValueError: - # Does nothing and uses default (shouldn't happen) - pass + # If not: + try: + # Checks if retry_after is a HTTP date + now = datetime.datetime.now() + wait = (now - parse_time(retry_after)).total_seconds() + except ValueError: + # Use default + pass _LOGGER.debug("Wait %d seconds.", wait) time.sleep(wait) diff --git a/setup.py b/setup.py index 1c98e93..c2a4d55 100755 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ # Bumping Minor means API bugfix or new functionality. # Bumping Micro means CLI change of any kind unless it is # significant enough to warrant a minor/major bump. -version = '4.0.4' +version = '4.0.5' setup(name='python-nest',