Skip to content

Commit 6191978

Browse files
authored
fix: remove reserved keywords from kwargs before passing it to requests (#117)
1 parent 6614a63 commit 6191978

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

.pylintrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ disable=
66
duplicate-code,
77
missing-module-docstring,
88
too-many-arguments,
9-
unnecessary-pass
9+
unnecessary-pass,
10+
no-member,
1011

1112
[TYPECHECK]
1213
ignored-classes= responses

ibm_cloud_sdk_core/base_service.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,12 @@ def send(self, request: requests.Request, **kwargs) -> DetailedResponse:
277277
# Check to see if the caller specified the 'stream' argument.
278278
stream_response = kwargs.get('stream') or False
279279

280+
# Remove the keys we set manually, don't let the user to overwrite these.
281+
reserved_keys = ['method', 'url', 'headers', 'params', 'cookies']
282+
for key in reserved_keys:
283+
if key in kwargs:
284+
del kwargs[key]
285+
logging.warning('"%s" has been removed from the request', key)
280286
try:
281287
response = self.http_client.request(**request,
282288
cookies=self.jar,

test/test_base_service.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,30 @@ def test_user_agent_header():
685685
assert response.get_result().request.headers.__getitem__(
686686
'user-agent') == user_agent_header['User-Agent']
687687

688+
@responses.activate
689+
def test_reserved_keys(caplog):
690+
service = AnyServiceV1('2021-07-02', authenticator=NoAuthAuthenticator())
691+
responses.add(
692+
responses.GET,
693+
'https://gateway.watsonplatform.net/test/api',
694+
status=200,
695+
body='some text')
696+
prepped = service.prepare_request('GET', url='', headers={'key': 'OK'})
697+
response = service.send(
698+
prepped,
699+
headers={'key': 'bad'},
700+
method='POST',
701+
url='localhost',
702+
cookies=None,
703+
hooks={'response': []})
704+
assert response.get_result().request.headers.__getitem__('key') == 'OK'
705+
assert response.get_result().request.url == 'https://gateway.watsonplatform.net/test/api'
706+
assert response.get_result().request.method == 'GET'
707+
assert response.get_result().request.hooks == {'response': []}
708+
assert caplog.record_tuples[0][2] == '"method" has been removed from the request'
709+
assert caplog.record_tuples[1][2] == '"url" has been removed from the request'
710+
assert caplog.record_tuples[2][2] == '"headers" has been removed from the request'
711+
assert caplog.record_tuples[3][2] == '"cookies" has been removed from the request'
688712

689713
def test_files_dict():
690714
service = AnyServiceV1('2018-11-20', authenticator=NoAuthAuthenticator())

0 commit comments

Comments
 (0)