From c3e893c565e1e799dbfc97940074f1476107b23f Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Wed, 3 Aug 2016 13:31:20 -0700 Subject: [PATCH 1/9] Add extra info to BoxAPIException. --- boxsdk/exception.py | 32 ++++++++++++++++++++++++++++++- boxsdk/network/default_network.py | 4 ++++ boxsdk/session/box_session.py | 2 ++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/boxsdk/exception.py b/boxsdk/exception.py index 1a3714aea..74839eaf7 100644 --- a/boxsdk/exception.py +++ b/boxsdk/exception.py @@ -25,7 +25,19 @@ class BoxAPIException(BoxException): """ Exception raised from the box session layer. """ - def __init__(self, status, code=None, message=None, request_id=None, headers=None, url=None, method=None, context_info=None): + def __init__( + self, + status, + code=None, + message=None, + request_id=None, + headers=None, + url=None, + method=None, + context_info=None, + request_response=None, + access_token_used=None + ): """ :param status: HTTP status code of the failed response @@ -69,6 +81,8 @@ def __init__(self, status, code=None, message=None, request_id=None, headers=Non self._url = url self._method = method self._context_info = context_info + self._request_response = request_response + self._access_token_used = access_token_used def __unicode__(self): return '\nMessage: {0}\nStatus: {1}\nCode: {2}\nRequest id: {3}\nHeaders: {4}\nURL: {5}\nMethod: {6}\nContext info: {7}'.format( @@ -134,6 +148,22 @@ def context_info(self): """ return self._context_info + @property + def request_response(self): + """ + The response returned from the Requests library. + :rtype: `Response` + """ + return self._request_response + + @property + def access_token_used(self): + """ + The access token that was used for the failed request. + :rtype: `unicode` + """ + return self._access_token_used + class BoxOAuthException(BoxException): """ diff --git a/boxsdk/network/default_network.py b/boxsdk/network/default_network.py index f8f19af3e..538922916 100644 --- a/boxsdk/network/default_network.py +++ b/boxsdk/network/default_network.py @@ -71,3 +71,7 @@ def response_as_stream(self): def access_token_used(self): """Base class override.""" return self._access_token_used + + @property + def request_response(self): + return self._request_response diff --git a/boxsdk/session/box_session.py b/boxsdk/session/box_session.py index 52cca9d00..efc10d2a5 100644 --- a/boxsdk/session/box_session.py +++ b/boxsdk/session/box_session.py @@ -248,6 +248,8 @@ def _raise_on_unsuccessful_request(self, network_response, expect_json_response, url=url, method=method, context_info=response_json.get('context_info', None), + request_response=network_response.request_response, + access_token_used=network_response.access_token_used ) if expect_json_response and not self._is_json_response(network_response): raise BoxAPIException( From f580403d88755dbd7780d7fba5eeb7b02e5af4d8 Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Thu, 11 Aug 2016 15:31:35 -0700 Subject: [PATCH 2/9] Clean up. --- boxsdk/exception.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/boxsdk/exception.py b/boxsdk/exception.py index 74839eaf7..071a1190d 100644 --- a/boxsdk/exception.py +++ b/boxsdk/exception.py @@ -71,6 +71,14 @@ def __init__( The context_info returned in the failed response. :type context_info: `dict` + :param request_response: + The failed response + :type request_response: + Requests `Response` + :param access_token_used + The access token used to make the request + :type access_token_used + `unicode` """ super(BoxAPIException, self).__init__() self._status = status From 3cf83c180d1f3329ad96f155fe8f61b90d210755 Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Mon, 15 Aug 2016 09:16:05 -0700 Subject: [PATCH 3/9] Fix linter error --- boxsdk/exception.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/boxsdk/exception.py b/boxsdk/exception.py index 071a1190d..42c67e5e9 100644 --- a/boxsdk/exception.py +++ b/boxsdk/exception.py @@ -26,17 +26,17 @@ class BoxAPIException(BoxException): Exception raised from the box session layer. """ def __init__( - self, - status, - code=None, - message=None, - request_id=None, - headers=None, - url=None, - method=None, - context_info=None, - request_response=None, - access_token_used=None + self, + status, + code=None, + message=None, + request_id=None, + headers=None, + url=None, + method=None, + context_info=None, + request_response=None, + access_token_used=None ): """ :param status: From 943ce0183731a7628f6c86f5f4a2f0c1fc5d3382 Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Tue, 16 Aug 2016 09:44:21 -0700 Subject: [PATCH 4/9] Remove {} params default. --- boxsdk/object/base_object.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/boxsdk/object/base_object.py b/boxsdk/object/base_object.py index 442a792d1..9d106068c 100644 --- a/boxsdk/object/base_object.py +++ b/boxsdk/object/base_object.py @@ -152,7 +152,8 @@ def delete(self, params=None, headers=None): url = self.get_url() # ??? There's a question about why params forces a default to {}, while headers doesn't. Looking for # confirmation that the below is correct. - box_response = self._session.delete(url, expect_json_response=False, params=params or {}, headers=headers) + # box_response = self._session.delete(url, expect_json_response=False, params=params or {}, headers=headers) + box_response = self._session.delete(url, expect_json_response=False, params=params, headers=headers) return box_response.ok def __eq__(self, other): From b21613d5c3c8d3093d111e2500d7be08006a14d7 Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Wed, 17 Aug 2016 13:13:48 -0700 Subject: [PATCH 5/9] Clean up. --- boxsdk/object/folder.py | 1 + 1 file changed, 1 insertion(+) diff --git a/boxsdk/object/folder.py b/boxsdk/object/folder.py index 38d10b224..74b05d561 100644 --- a/boxsdk/object/folder.py +++ b/boxsdk/object/folder.py @@ -299,6 +299,7 @@ def create_subfolder(self, name): } box_response = self._session.post(url, data=json.dumps(data)) response = box_response.json() + print response return self.__class__( session=self._session, object_id=response['id'], From 68fd82324ea2b0d9fd04098d2591391d4abdddee Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Wed, 17 Aug 2016 13:43:15 -0700 Subject: [PATCH 6/9] Clean up. --- boxsdk/object/base_object.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/boxsdk/object/base_object.py b/boxsdk/object/base_object.py index 9d106068c..442a792d1 100644 --- a/boxsdk/object/base_object.py +++ b/boxsdk/object/base_object.py @@ -152,8 +152,7 @@ def delete(self, params=None, headers=None): url = self.get_url() # ??? There's a question about why params forces a default to {}, while headers doesn't. Looking for # confirmation that the below is correct. - # box_response = self._session.delete(url, expect_json_response=False, params=params or {}, headers=headers) - box_response = self._session.delete(url, expect_json_response=False, params=params, headers=headers) + box_response = self._session.delete(url, expect_json_response=False, params=params or {}, headers=headers) return box_response.ok def __eq__(self, other): From a3ffd421883a8537c26cad6e26670a2c70a80698 Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Wed, 17 Aug 2016 13:47:32 -0700 Subject: [PATCH 7/9] Clean up. --- boxsdk/object/folder.py | 1 - 1 file changed, 1 deletion(-) diff --git a/boxsdk/object/folder.py b/boxsdk/object/folder.py index 74b05d561..38d10b224 100644 --- a/boxsdk/object/folder.py +++ b/boxsdk/object/folder.py @@ -299,7 +299,6 @@ def create_subfolder(self, name): } box_response = self._session.post(url, data=json.dumps(data)) response = box_response.json() - print response return self.__class__( session=self._session, object_id=response['id'], From 1b42479b8d86d92fb98a73a7d726e6cf8fded8d7 Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Wed, 17 Aug 2016 21:05:21 -0700 Subject: [PATCH 8/9] Add NetworkResponse instead of Requests Response to BoxAPIException. --- boxsdk/exception.py | 30 ++++++++---------------------- boxsdk/network/default_network.py | 4 ++++ 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/boxsdk/exception.py b/boxsdk/exception.py index 42c67e5e9..8ae66735b 100644 --- a/boxsdk/exception.py +++ b/boxsdk/exception.py @@ -35,8 +35,7 @@ def __init__( url=None, method=None, context_info=None, - request_response=None, - access_token_used=None + network_response=None, ): """ :param status: @@ -71,14 +70,10 @@ def __init__( The context_info returned in the failed response. :type context_info: `dict` - :param request_response: + :param network_response: The failed response - :type request_response: + :type network_response: Requests `Response` - :param access_token_used - The access token used to make the request - :type access_token_used - `unicode` """ super(BoxAPIException, self).__init__() self._status = status @@ -89,8 +84,7 @@ def __init__( self._url = url self._method = method self._context_info = context_info - self._request_response = request_response - self._access_token_used = access_token_used + self._network_response = network_response def __unicode__(self): return '\nMessage: {0}\nStatus: {1}\nCode: {2}\nRequest id: {3}\nHeaders: {4}\nURL: {5}\nMethod: {6}\nContext info: {7}'.format( @@ -157,20 +151,12 @@ def context_info(self): return self._context_info @property - def request_response(self): - """ - The response returned from the Requests library. - :rtype: `Response` - """ - return self._request_response - - @property - def access_token_used(self): + def network_response(self): """ - The access token that was used for the failed request. - :rtype: `unicode` + The response returned from the network. + :rtype: `NetworkResponse` """ - return self._access_token_used + return self._network_response class BoxOAuthException(BoxException): diff --git a/boxsdk/network/default_network.py b/boxsdk/network/default_network.py index 538922916..b103aadb6 100644 --- a/boxsdk/network/default_network.py +++ b/boxsdk/network/default_network.py @@ -74,4 +74,8 @@ def access_token_used(self): @property def request_response(self): + """ + The response returned from the Requests library. + :rtype: `Response` + """ return self._request_response From 7a7507bbca67f7b59d94defc878a271d077bae68 Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Wed, 17 Aug 2016 21:09:34 -0700 Subject: [PATCH 9/9] Clean up. --- boxsdk/session/box_session.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boxsdk/session/box_session.py b/boxsdk/session/box_session.py index efc10d2a5..ad0284100 100644 --- a/boxsdk/session/box_session.py +++ b/boxsdk/session/box_session.py @@ -248,8 +248,7 @@ def _raise_on_unsuccessful_request(self, network_response, expect_json_response, url=url, method=method, context_info=response_json.get('context_info', None), - request_response=network_response.request_response, - access_token_used=network_response.access_token_used + network_response=network_response ) if expect_json_response and not self._is_json_response(network_response): raise BoxAPIException( @@ -258,6 +257,7 @@ def _raise_on_unsuccessful_request(self, network_response, expect_json_response, message='Non-json response received, while expecting json response.', url=url, method=method, + network_response=network_response ) def _prepare_and_send_request(