From 2b6fb25934a7c428922e08e49f8360e409bb6284 Mon Sep 17 00:00:00 2001 From: Kiran Naidoo Date: Thu, 31 Dec 2020 16:38:07 +0000 Subject: [PATCH] Support Consul response code: 429 Consul returns a 429 response code when: Some healthchecks are passing, at least one is warning (see https://www.consul.io/api-docs/agent/service). This PR updates the callback handler to support response code 429. --- consul/base.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/consul/base.py b/consul/base.py index 9d27dbd..c3ab490 100755 --- a/consul/base.py +++ b/consul/base.py @@ -41,6 +41,13 @@ class ClientError(ConsulException): pass +class ConsulUnhealthy(ConsulException): + """ + 429 response code: Some healthchecks are passing, at least one is warning + """ + pass + + # # Convenience to define checks @@ -194,7 +201,7 @@ def _compat( class CB(object): @classmethod - def _status(klass, response, allow_404=True): + def _status(klass, response, allow_404=True, allow_429=True): # status checking if 400 <= response.code < 500: if response.code == 400: @@ -206,6 +213,9 @@ def _status(klass, response, allow_404=True): elif response.code == 404: if not allow_404: raise NotFound(response.body) + elif response.code == 429: + if not allow_429: + raise ConsulUnhealthy(response.body) else: raise ClientError("%d %s" % (response.code, response.body)) elif 500 <= response.code < 600: