Skip to content
This repository was archived by the owner on May 5, 2025. It is now read-only.

Commit 6edb1fa

Browse files
authored
Refactor how authorization header is updated (#88)
1 parent a62cfe7 commit 6edb1fa

File tree

1 file changed

+19
-28
lines changed

1 file changed

+19
-28
lines changed

pancloud/httpclient.py

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
from __future__ import absolute_import
66

7-
import json
87
import logging
98

109
import requests
@@ -96,9 +95,8 @@ def __init__(self, **kwargs):
9695
raise UnexpectedKwargsError(kwargs)
9796

9897
if self.credentials:
99-
self.session.headers = self._apply_credentials(
100-
self.session.headers, self.credentials
101-
)
98+
self._apply_credentials(
99+
self.credentials, self.session.headers)
102100

103101
def __repr__(self):
104102
for k in self.kwargs.get('headers', {}):
@@ -118,25 +116,23 @@ def __repr__(self):
118116
)
119117

120118
@staticmethod
121-
def _apply_credentials(headers, credentials):
119+
def _apply_credentials(credentials, headers):
122120
"""Update Authorization header.
123121
124122
Update request headers with latest `access_token`. Perform token
125123
`refresh` if token is ``None``.
126124
127125
Args:
128-
headers (dict): Request headers.
129126
credentials (class): Read-only credentials.
130-
131-
Returns:
132-
dict: Updated request headers.
127+
headers (class): Requests `CaseInsensitiveDict`.
133128
134129
"""
135130
token = credentials.get_credentials().access_token
136131
if token is None:
137132
token = credentials.refresh(access_token=None, timeout=10)
138-
headers['Authorization'] = "Bearer {}".format(token)
139-
return headers
133+
headers.update(
134+
{'Authorization': "Bearer {}".format(token)}
135+
)
140136

141137
def _default_headers(self):
142138
"""Update default headers.
@@ -215,22 +211,22 @@ def request(self, **kwargs):
215211
verify = kwargs.pop('verify', None)
216212

217213
# Non-Requests key-word arguments
218-
auto_refresh = kwargs.pop('auto_refresh', None) or self.auto_refresh
219-
auto_retry = kwargs.pop('auto_retry', None) or self.auto_retry
220-
credentials = kwargs.pop(
221-
'credentials', None) or self.credentials
214+
auto_refresh = kwargs.pop('auto_refresh', self.auto_refresh)
215+
auto_retry = kwargs.pop('auto_retry', self.auto_retry)
216+
credentials = kwargs.pop('credentials', None)
222217
enforce_json = kwargs.pop('enforce_json', self.enforce_json)
223218
path = kwargs.pop('path', '') # default to empty path
224219
raise_for_status = kwargs.pop(
225220
'raise_for_status', self.raise_for_status
226221
)
227222
url = "{}:{}{}".format(url, self.port, path)
228223

229-
if credentials and not headers:
230-
headers = self._apply_credentials(
231-
self.session.headers, credentials)
232-
elif credentials and headers:
233-
headers = self._apply_credentials(headers, credentials)
224+
if credentials:
225+
if headers is None:
226+
headers = self.session.headers.copy()
227+
self._apply_credentials(credentials, headers)
228+
else:
229+
credentials = self.credentials
234230

235231
k = { # Re-pack kwargs to dictionary
236232
'params': params or self.session.params,
@@ -260,21 +256,16 @@ def request(self, **kwargs):
260256

261257
# Prepare and send the Request() and return Response()
262258
try:
263-
if credentials:
264-
if credentials.cache_token:
265-
h = self._apply_credentials(
266-
k['headers'], credentials)
267-
k['headers'] = h
268259
r = self._send_request(
269260
enforce_json, method, raise_for_status, url, **k
270261
)
271262
if r.status_code == 401:
272263
if credentials and auto_refresh:
273264
token = credentials.get_credentials().access_token
274265
credentials.refresh(access_token=token, timeout=10)
275-
h = self._apply_credentials(
276-
k['headers'], credentials)
277-
k['headers'] = h
266+
self._apply_credentials(
267+
credentials, headers or self.session.headers
268+
)
278269
if auto_retry:
279270
r = self._send_request(
280271
enforce_json, method, raise_for_status, url,

0 commit comments

Comments
 (0)