From d0f14bfa577f912575a914a8b55e910afcc314ae Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Wed, 14 Oct 2020 17:42:19 +0200 Subject: [PATCH 01/10] Ignore the ideas dir --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 46c699c..0883b60 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,4 @@ ENV/ # OS generated files .DS_Store +.idea/ From 3ceb3db38c83758f1d5684a50dc65e8da3ff5e25 Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Wed, 14 Oct 2020 17:43:00 +0200 Subject: [PATCH 02/10] Load the version file and send the new UA headers --- bynder_sdk/util.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/bynder_sdk/util.py b/bynder_sdk/util.py index 4e38a88..3c2cfcb 100644 --- a/bynder_sdk/util.py +++ b/bynder_sdk/util.py @@ -1,3 +1,11 @@ +with open('../VERSION') as fh: + __version__ = fh.read().strip() + fh.close() + +UA_HEADER = { + 'User-Agent': 'bynder-python-sdk/{}'.format(__version__) +} + def api_endpoint_url(session, endpoint): return 'https://{}/api{}'.format(session.bynder_domain, endpoint) @@ -11,6 +19,11 @@ def parse_json_for_response(response): class SessionMixin: def wrapped_request(self, func, endpoint, *args, **kwargs): + if 'headers' in kwargs: + kwargs['headers'].update(UA_HEADER) + else: + kwargs['headers'] = UA_HEADER + endpoint = api_endpoint_url(self, endpoint) response = func(endpoint, *args, **kwargs) @@ -26,6 +39,7 @@ def post(self, url, *args, **kwargs): # Do not send the Authorization header to S3 kwargs['headers'] = {'Authorization': None} return super().post(url, *args, **kwargs) + return self.wrapped_request(super().post, url, *args, **kwargs) def put(self, url, *args, **kwargs): From 7b8a688fc272f311d287a7aa36442442177d7dff Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Thu, 15 Oct 2020 11:23:24 +0200 Subject: [PATCH 03/10] Version file path fixed --- bynder_sdk/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bynder_sdk/util.py b/bynder_sdk/util.py index 3c2cfcb..3bc9ad2 100644 --- a/bynder_sdk/util.py +++ b/bynder_sdk/util.py @@ -1,4 +1,4 @@ -with open('../VERSION') as fh: +with open('VERSION') as fh: __version__ = fh.read().strip() fh.close() From 71e1bb9a30581f96ea7d51d641d2478f6358d50b Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Thu, 15 Oct 2020 12:24:01 +0200 Subject: [PATCH 04/10] User agent header tests --- bynder_sdk/util.py | 2 ++ test/oauth2_session_test.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/bynder_sdk/util.py b/bynder_sdk/util.py index 3bc9ad2..98e96a8 100644 --- a/bynder_sdk/util.py +++ b/bynder_sdk/util.py @@ -2,10 +2,12 @@ __version__ = fh.read().strip() fh.close() + UA_HEADER = { 'User-Agent': 'bynder-python-sdk/{}'.format(__version__) } + def api_endpoint_url(session, endpoint): return 'https://{}/api{}'.format(session.bynder_domain, endpoint) diff --git a/test/oauth2_session_test.py b/test/oauth2_session_test.py index 6447e44..64757fa 100644 --- a/test/oauth2_session_test.py +++ b/test/oauth2_session_test.py @@ -5,6 +5,12 @@ TEST_DOMAIN = 'test.getbynder.com' +VERSION = None + + +with open('VERSION') as fh: + VERSION = fh.read().strip() + fh.close() class OAuth2Test(TestCase): @@ -45,3 +51,13 @@ def test_fetch_token(self, mocked_func): include_client_id=True, code='code', ) + + @mock.patch('requests_oauthlib.OAuth2Session.get') + def test_user_agent_header(self, mocked_func): + self.session.get('/upload') + mocked_func.assert_called_with( + 'https://test.getbynder.com/api/upload', + headers={ + 'User-Agent': 'bynder-python-sdk/{}'.format(VERSION) + } + ) From a3da89c33ec6221aca9180faa747d334f8f7df31 Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Fri, 16 Oct 2020 11:00:53 +0200 Subject: [PATCH 05/10] Simplified logic to set and fetch the UA header and SDK version --- bynder_sdk/oauth2.py | 4 +++- bynder_sdk/permanent_token.py | 6 ++++-- bynder_sdk/util.py | 16 +++++----------- test/oauth2_session_test.py | 17 +++++++---------- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/bynder_sdk/oauth2.py b/bynder_sdk/oauth2.py index 67d8c40..abee2ca 100644 --- a/bynder_sdk/oauth2.py +++ b/bynder_sdk/oauth2.py @@ -3,7 +3,7 @@ from requests_oauthlib import OAuth2Session -from bynder_sdk.util import SessionMixin +from bynder_sdk.util import SessionMixin, UA_HEADER def oauth2_url(bynder_domain, endpoint): @@ -19,6 +19,8 @@ def __init__(self, bynder_domain, *args, **kwargs): super().__init__(*args, **kwargs) + self._set_ua_header() + def authorization_url(self): state = ''.join([ random.choice(string.ascii_letters + string.digits) diff --git a/bynder_sdk/permanent_token.py b/bynder_sdk/permanent_token.py index d4f4df2..4b04e0e 100644 --- a/bynder_sdk/permanent_token.py +++ b/bynder_sdk/permanent_token.py @@ -1,6 +1,6 @@ from requests import Session -from bynder_sdk.util import SessionMixin +from bynder_sdk.util import SessionMixin, UA_HEADER class PermanentTokenSession(SessionMixin, Session): @@ -9,5 +9,7 @@ def __init__(self, bynder_domain, permanent_token): self.bynder_domain = bynder_domain self.headers.update({ - 'Authorization': 'Bearer {}'.format(permanent_token) + 'Authorization': 'Bearer {}'.format(permanent_token), }) + + self._set_ua_header() diff --git a/bynder_sdk/util.py b/bynder_sdk/util.py index 98e96a8..09ea76a 100644 --- a/bynder_sdk/util.py +++ b/bynder_sdk/util.py @@ -1,13 +1,10 @@ with open('VERSION') as fh: - __version__ = fh.read().strip() - fh.close() - + SDK_VERSION = fh.read().strip() UA_HEADER = { - 'User-Agent': 'bynder-python-sdk/{}'.format(__version__) + 'User-Agent': f'bynder-python-sdk/{SDK_VERSION}' } - def api_endpoint_url(session, endpoint): return 'https://{}/api{}'.format(session.bynder_domain, endpoint) @@ -21,13 +18,7 @@ def parse_json_for_response(response): class SessionMixin: def wrapped_request(self, func, endpoint, *args, **kwargs): - if 'headers' in kwargs: - kwargs['headers'].update(UA_HEADER) - else: - kwargs['headers'] = UA_HEADER - endpoint = api_endpoint_url(self, endpoint) - response = func(endpoint, *args, **kwargs) response.raise_for_status() @@ -49,3 +40,6 @@ def put(self, url, *args, **kwargs): def delete(self, url, *args, **kwargs): return self.wrapped_request(super().delete, url, *args, **kwargs) + + def _set_ua_header(self): + self.headers.update(UA_HEADER) diff --git a/test/oauth2_session_test.py b/test/oauth2_session_test.py index 64757fa..e09e4c3 100644 --- a/test/oauth2_session_test.py +++ b/test/oauth2_session_test.py @@ -1,7 +1,7 @@ from unittest import mock, TestCase from bynder_sdk.oauth2 import BynderOAuth2Session, oauth2_url -from bynder_sdk.util import api_endpoint_url +from bynder_sdk.util import api_endpoint_url, SDK_VERSION TEST_DOMAIN = 'test.getbynder.com' @@ -52,12 +52,9 @@ def test_fetch_token(self, mocked_func): code='code', ) - @mock.patch('requests_oauthlib.OAuth2Session.get') - def test_user_agent_header(self, mocked_func): - self.session.get('/upload') - mocked_func.assert_called_with( - 'https://test.getbynder.com/api/upload', - headers={ - 'User-Agent': 'bynder-python-sdk/{}'.format(VERSION) - } - ) + def test_user_agent_header(self): + expected_ua_header = { + 'User-Agent': f'bynder-python-sdk/{SDK_VERSION}' + } + # the UA header is contained within the session headers + assert expected_ua_header.items() <= self.session.headers.items() From 70a99f221d16916e45b239109df0006abe0045e8 Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Fri, 16 Oct 2020 11:01:47 +0200 Subject: [PATCH 06/10] Unrequired code deleted --- bynder_sdk/oauth2.py | 2 +- bynder_sdk/permanent_token.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bynder_sdk/oauth2.py b/bynder_sdk/oauth2.py index abee2ca..4f9fbf0 100644 --- a/bynder_sdk/oauth2.py +++ b/bynder_sdk/oauth2.py @@ -3,7 +3,7 @@ from requests_oauthlib import OAuth2Session -from bynder_sdk.util import SessionMixin, UA_HEADER +from bynder_sdk.util import SessionMixin def oauth2_url(bynder_domain, endpoint): diff --git a/bynder_sdk/permanent_token.py b/bynder_sdk/permanent_token.py index 4b04e0e..a3b3ab3 100644 --- a/bynder_sdk/permanent_token.py +++ b/bynder_sdk/permanent_token.py @@ -1,6 +1,6 @@ from requests import Session -from bynder_sdk.util import SessionMixin, UA_HEADER +from bynder_sdk.util import SessionMixin class PermanentTokenSession(SessionMixin, Session): From 3b4b11f89678d0b1f7c70ab4df1ce57b8cd051b9 Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Fri, 16 Oct 2020 11:03:03 +0200 Subject: [PATCH 07/10] Don't load the version on tests --- test/oauth2_session_test.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/test/oauth2_session_test.py b/test/oauth2_session_test.py index e09e4c3..9da994d 100644 --- a/test/oauth2_session_test.py +++ b/test/oauth2_session_test.py @@ -5,12 +5,6 @@ TEST_DOMAIN = 'test.getbynder.com' -VERSION = None - - -with open('VERSION') as fh: - VERSION = fh.read().strip() - fh.close() class OAuth2Test(TestCase): From d07523fecca700517bc97d041b15e10db3c77ac4 Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Fri, 16 Oct 2020 11:09:33 +0200 Subject: [PATCH 08/10] Linting fix --- bynder_sdk/util.py | 1 + test/oauth2_session_test.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bynder_sdk/util.py b/bynder_sdk/util.py index 09ea76a..ace85a2 100644 --- a/bynder_sdk/util.py +++ b/bynder_sdk/util.py @@ -5,6 +5,7 @@ 'User-Agent': f'bynder-python-sdk/{SDK_VERSION}' } + def api_endpoint_url(session, endpoint): return 'https://{}/api{}'.format(session.bynder_domain, endpoint) diff --git a/test/oauth2_session_test.py b/test/oauth2_session_test.py index 9da994d..dced2e1 100644 --- a/test/oauth2_session_test.py +++ b/test/oauth2_session_test.py @@ -50,5 +50,5 @@ def test_user_agent_header(self): expected_ua_header = { 'User-Agent': f'bynder-python-sdk/{SDK_VERSION}' } - # the UA header is contained within the session headers + # The UA header is contained within the session headers assert expected_ua_header.items() <= self.session.headers.items() From 2b64372a2ff21caa5326c4dc7a77924fc2e45214 Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Fri, 16 Oct 2020 12:12:26 +0200 Subject: [PATCH 09/10] Don't usee 3.6 formatting --- bynder_sdk/util.py | 2 +- test/oauth2_session_test.py | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/bynder_sdk/util.py b/bynder_sdk/util.py index ace85a2..653d6a6 100644 --- a/bynder_sdk/util.py +++ b/bynder_sdk/util.py @@ -2,7 +2,7 @@ SDK_VERSION = fh.read().strip() UA_HEADER = { - 'User-Agent': f'bynder-python-sdk/{SDK_VERSION}' + 'User-Agent': 'bynder-python-sdk/{}'.format(SDK_VERSION) } diff --git a/test/oauth2_session_test.py b/test/oauth2_session_test.py index dced2e1..cf28023 100644 --- a/test/oauth2_session_test.py +++ b/test/oauth2_session_test.py @@ -1,7 +1,7 @@ from unittest import mock, TestCase from bynder_sdk.oauth2 import BynderOAuth2Session, oauth2_url -from bynder_sdk.util import api_endpoint_url, SDK_VERSION +from bynder_sdk.util import api_endpoint_url, UA_HEADER TEST_DOMAIN = 'test.getbynder.com' @@ -47,8 +47,5 @@ def test_fetch_token(self, mocked_func): ) def test_user_agent_header(self): - expected_ua_header = { - 'User-Agent': f'bynder-python-sdk/{SDK_VERSION}' - } # The UA header is contained within the session headers - assert expected_ua_header.items() <= self.session.headers.items() + assert UA_HEADER.items() <= self.session.headers.items() From a308fdedaf035ac45f838a3e3ecce7e729d2f573 Mon Sep 17 00:00:00 2001 From: Carlos Betancourt Carrero Date: Fri, 16 Oct 2020 15:11:11 +0200 Subject: [PATCH 10/10] Version bumped to 1.1.3 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 45a1b3f..781dcb0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.2 +1.1.3