From 9e31e6478217f24d391d58c114beeece9d3a6f25 Mon Sep 17 00:00:00 2001 From: Delena Malan Date: Mon, 27 Feb 2023 15:49:00 +0200 Subject: [PATCH 1/3] Raise exception for unsuccessful requests --- nocodb/infra/requests_client.py | 51 ++++++++++++++++----------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/nocodb/infra/requests_client.py b/nocodb/infra/requests_client.py index fd223ed..2a18afa 100644 --- a/nocodb/infra/requests_client.py +++ b/nocodb/infra/requests_client.py @@ -20,6 +20,11 @@ def __init__(self, auth_token: AuthToken, base_uri: str): self.__session.headers.update({"Content-Type": "application/json"}) self.__api_info = NocoDBAPI(base_uri) + def _request(self, method, url, *args, **kwargs): + response = self.__session(method, url, *args, **kwargs) + response.raise_for_status() + return response + def table_row_list( self, project: NocoDBProject, @@ -27,39 +32,35 @@ def table_row_list( filter_obj: Optional[WhereFilter] = None, params: Optional[dict] = None, ) -> dict: - - response = self.__session.get( + return self._request( + "GET", self.__api_info.get_table_uri(project, table), params=get_query_params(filter_obj, params), - ) - return response.json() + ).json() - def table_row_create( - self, project: NocoDBProject, table: str, body: dict - ) -> dict: - return self.__session.post( - self.__api_info.get_table_uri(project, table), json=body + def table_row_create(self, project: NocoDBProject, table: str, body: dict) -> dict: + return self._request( + "POST", self.__api_info.get_table_uri(project, table), json=body ).json() - def table_row_detail( - self, project: NocoDBProject, table: str, row_id: int - ) -> dict: - return self.__session.get( + def table_row_detail(self, project: NocoDBProject, table: str, row_id: int) -> dict: + return self._request( + "GET", self.__api_info.get_row_detail_uri(project, table, row_id), ).json() def table_row_update( self, project: NocoDBProject, table: str, row_id: int, body: dict ) -> dict: - return self.__session.patch( + return self._request( + "PATCH", self.__api_info.get_row_detail_uri(project, table, row_id), json=body, ).json() - def table_row_delete( - self, project: NocoDBProject, table: str, row_id: int - ) -> int: - return self.__session.delete( + def table_row_delete(self, project: NocoDBProject, table: str, row_id: int) -> int: + return self._request( + "DELETE", self.__api_info.get_row_detail_uri(project, table, row_id), ).json() @@ -71,16 +72,14 @@ def table_row_nested_relations_list( row_id: int, column_name: str, ) -> dict: - return self.__session.get( + return self._request( + "GET", self.__api_info.get_nested_relations_rows_list_uri( project, table, relation_type, row_id, column_name - ) + ), ).json() - def project_create( - self, - body - ): - return self.__session.post( - self.__api_info.get_project_uri(), json=body + def project_create(self, body): + return self._request( + "POST", self.__api_info.get_project_uri(), json=body ).json() From a9c01a19013db43505166d875aa4b933b6720c22 Mon Sep 17 00:00:00 2001 From: Delena Malan Date: Tue, 28 Feb 2023 09:17:07 +0200 Subject: [PATCH 2/3] Add request call --- nocodb/infra/requests_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nocodb/infra/requests_client.py b/nocodb/infra/requests_client.py index 2a18afa..c02d35e 100644 --- a/nocodb/infra/requests_client.py +++ b/nocodb/infra/requests_client.py @@ -21,7 +21,7 @@ def __init__(self, auth_token: AuthToken, base_uri: str): self.__api_info = NocoDBAPI(base_uri) def _request(self, method, url, *args, **kwargs): - response = self.__session(method, url, *args, **kwargs) + response = self.__session.request(method, url, *args, **kwargs) response.raise_for_status() return response From b948dd64bd7413ba7790b6804f7a64992a7ccc4f Mon Sep 17 00:00:00 2001 From: Delena Malan Date: Fri, 3 Mar 2023 10:42:46 +0200 Subject: [PATCH 3/3] Add custom exception --- nocodb/exceptions.py | 6 ++++++ nocodb/infra/requests_client.py | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 nocodb/exceptions.py diff --git a/nocodb/exceptions.py b/nocodb/exceptions.py new file mode 100644 index 0000000..3e317c1 --- /dev/null +++ b/nocodb/exceptions.py @@ -0,0 +1,6 @@ +class NocoDBAPIError(Exception): + def __init__(self, message, status_code, response_json=None, response_text=None): + super().__init__(message) + self.status_code = status_code + self.response_json = response_json + self.response_text = response_text \ No newline at end of file diff --git a/nocodb/infra/requests_client.py b/nocodb/infra/requests_client.py index c02d35e..96a7e48 100644 --- a/nocodb/infra/requests_client.py +++ b/nocodb/infra/requests_client.py @@ -7,6 +7,7 @@ ) from ..api import NocoDBAPI from ..utils import get_query_params +from ..exceptions import NocoDBAPIError import requests @@ -22,7 +23,21 @@ def __init__(self, auth_token: AuthToken, base_uri: str): def _request(self, method, url, *args, **kwargs): response = self.__session.request(method, url, *args, **kwargs) - response.raise_for_status() + try: + response.raise_for_status() + except requests.exceptions.HTTPError as http_error: + response_json = None + try: + response_json = response.json() + except requests.exceptions.JSONDecodeError: + ... + raise NocoDBAPIError( + message=str(http_error), + status_code=http_error.response.status_code, + response_json=response_json, + response_text=response.text + ) + return response def table_row_list(