Skip to content

Commit

Permalink
Merge pull request #181 from openshift-cherrypick-robot/cherry-pick-1…
Browse files Browse the repository at this point in the history
…78-to-release-4.4

[release-4.4] Bug 1810595: Raise K8sResourceNotFound for all client methods
  • Loading branch information
openshift-merge-robot committed Mar 5, 2020
2 parents 47fcaa8 + a55e4d9 commit 74173bc
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 29 deletions.
49 changes: 20 additions & 29 deletions kuryr_kubernetes/k8s_client.py
Expand Up @@ -76,6 +76,12 @@ def __init__(self, base_url):
else:
self.verify_server = ca_crt_file

def _raise_from_response(self, response):
if response.status_code == requests.codes.not_found:
raise exc.K8sResourceNotFound(response.text)
if not response.ok:
raise exc.K8sClientException(response.text)

def get(self, path, json=True, headers=None):
LOG.debug("Get %(path)s", {'path': path})
url = self._base_url + path
Expand All @@ -87,10 +93,7 @@ def get(self, path, json=True, headers=None):
response = self.session.get(url, cert=self.cert,
verify=self.verify_server,
headers=header)
if response.status_code == requests.codes.not_found:
raise exc.K8sResourceNotFound(response.text)
if not response.ok:
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
result = response.json() if json else response.text
return result

Expand All @@ -113,9 +116,8 @@ def patch(self, field, path, data):
response = self.session.patch(url, json={field: data},
headers=header, cert=self.cert,
verify=self.verify_server)
if response.ok:
return response.json().get('status')
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
return response.json().get('status')

def patch_crd(self, field, path, data):
content_type = 'application/json-patch+json'
Expand All @@ -132,9 +134,8 @@ def patch_crd(self, field, path, data):
response = self.session.patch(url, data=jsonutils.dumps(data),
headers=header, cert=self.cert,
verify=self.verify_server)
if response.ok:
return response.json().get('status')
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
return response.json().get('status')

def patch_node_annotations(self, node, annotation_name, value):
content_type = 'application/json-patch+json'
Expand All @@ -149,9 +150,8 @@ def patch_node_annotations(self, node, annotation_name, value):
response = self.session.patch(url, data=jsonutils.dumps(data),
headers=header, cert=self.cert,
verify=self.verify_server)
if response.ok:
return response.json().get('status')
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
return response.json().get('status')

def remove_node_annotations(self, node, annotation_name):
content_type = 'application/json-patch+json'
Expand All @@ -164,9 +164,8 @@ def remove_node_annotations(self, node, annotation_name):
response = self.session.patch(url, data=jsonutils.dumps(data),
headers=header, cert=self.cert,
verify=self.verify_server)
if response.ok:
return response.json().get('status')
raise exc.K8sClientException(response.text)
self._raise_from_response(response)
return response.json().get('status')

def post(self, path, body):
LOG.debug("Post %(path)s: %(body)s", {'path': path, 'body': body})
Expand All @@ -177,9 +176,8 @@ def post(self, path, body):

response = self.session.post(url, json=body, cert=self.cert,
verify=self.verify_server, headers=header)
if response.ok:
return response.json()
raise exc.K8sClientException(response)
self._raise_from_response(response)
return response.json()

def delete(self, path):
LOG.debug("Delete %(path)s", {'path': path})
Expand All @@ -191,12 +189,8 @@ def delete(self, path):
response = self.session.delete(url, cert=self.cert,
verify=self.verify_server,
headers=header)
if response.ok:
return response.json()
else:
if response.status_code == requests.codes.not_found:
raise exc.K8sResourceNotFound(response.text)
raise exc.K8sClientException(response)
self._raise_from_response(response)
return response.json()

def annotate(self, path, annotations, resource_version=None):
"""Pushes a resource annotation to the K8s API resource
Expand Down Expand Up @@ -245,10 +239,7 @@ def annotate(self, path, annotations, resource_version=None):
% {'headers': response.headers,
'content': response.content, 'text': response.text})

if response.status_code == requests.codes.not_found:
raise exc.K8sResourceNotFound(response.text)
else:
raise exc.K8sClientException(response.text)
self._raise_from_response(response)

def watch(self, path):
url = self._base_url + path
Expand Down
20 changes: 20 additions & 0 deletions kuryr_kubernetes/tests/unit/test_k8s_client.py
Expand Up @@ -434,3 +434,23 @@ def test_delete_exception(self, m_delete):

self.assertRaises(exc.K8sClientException,
self.client.delete, path)

def test__raise_from_response(self):
m_resp = mock.MagicMock()
m_resp.ok = True
m_resp.status_code = 202
self.client._raise_from_response(m_resp)

def test__raise_from_response_404(self):
m_resp = mock.MagicMock()
m_resp.ok = False
m_resp.status_code = 404
self.assertRaises(exc.K8sResourceNotFound,
self.client._raise_from_response, m_resp)

def test__raise_from_response_500(self):
m_resp = mock.MagicMock()
m_resp.ok = False
m_resp.status_code = 500
self.assertRaises(exc.K8sClientException,
self.client._raise_from_response, m_resp)

0 comments on commit 74173bc

Please sign in to comment.