From 9e31e6478217f24d391d58c114beeece9d3a6f25 Mon Sep 17 00:00:00 2001 From: Delena Malan Date: Mon, 27 Feb 2023 15:49:00 +0200 Subject: [PATCH 1/6] 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/6] 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 63e76cb33e70e56d5f82ee986eec9591c8e67c0e Mon Sep 17 00:00:00 2001 From: Delena Malan Date: Tue, 28 Feb 2023 09:56:52 +0200 Subject: [PATCH 3/6] Add count --- nocodb/api.py | 8 ++++++++ nocodb/infra/requests_client.py | 12 ++++++++++++ nocodb/utils.py | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/nocodb/api.py b/nocodb/api.py index aed549a..23821cc 100644 --- a/nocodb/api.py +++ b/nocodb/api.py @@ -26,6 +26,14 @@ def get_table_uri(self, project: NocoDBProject, table: str) -> str: ) ) + def get_table_count_uri(self, project: NocoDBProject, table: str) -> str: + return "/".join( + ( + self.get_table_uri(project, table), + 'count' + ) + ) + def get_row_detail_uri( self, project: NocoDBProject, table: str, row_id: int ): diff --git a/nocodb/infra/requests_client.py b/nocodb/infra/requests_client.py index c02d35e..1a969da 100644 --- a/nocodb/infra/requests_client.py +++ b/nocodb/infra/requests_client.py @@ -64,6 +64,18 @@ def table_row_delete(self, project: NocoDBProject, table: str, row_id: int) -> i self.__api_info.get_row_detail_uri(project, table, row_id), ).json() + def table_count( + self, + project: NocoDBProject, + table: str, + filter_obj: Optional[WhereFilter] = None, + ) -> dict: + return self._request( + "GET", + self.__api_info.get_table_count_uri(project, table), + params=get_query_params(filter_obj), + ).json() + def table_row_nested_relations_list( self, project: NocoDBProject, diff --git a/nocodb/utils.py b/nocodb/utils.py index 4b37cdf..2b98823 100644 --- a/nocodb/utils.py +++ b/nocodb/utils.py @@ -1,4 +1,4 @@ -def get_query_params(filter_obj, params) -> dict: +def get_query_params(filter_obj, params=None) -> dict: query_params = params or {} if filter_obj: query_params["where"] = filter_obj.get_where() From 54a4d99c02f569221437e59daefc31103a15695d Mon Sep 17 00:00:00 2001 From: Delena Malan Date: Tue, 28 Feb 2023 10:01:00 +0200 Subject: [PATCH 4/6] Add find one --- nocodb/api.py | 8 ++++++++ nocodb/infra/requests_client.py | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/nocodb/api.py b/nocodb/api.py index 23821cc..e8b0f17 100644 --- a/nocodb/api.py +++ b/nocodb/api.py @@ -34,6 +34,14 @@ def get_table_count_uri(self, project: NocoDBProject, table: str) -> str: ) ) + def get_table_find_one_uri(self, project: NocoDBProject, table: str) -> str: + return "/".join( + ( + self.get_table_uri(project, table), + 'find-one' + ) + ) + def get_row_detail_uri( self, project: NocoDBProject, table: str, row_id: int ): diff --git a/nocodb/infra/requests_client.py b/nocodb/infra/requests_client.py index 1a969da..1e84cfe 100644 --- a/nocodb/infra/requests_client.py +++ b/nocodb/infra/requests_client.py @@ -76,6 +76,19 @@ def table_count( params=get_query_params(filter_obj), ).json() + def table_find_one( + self, + project: NocoDBProject, + table: str, + filter_obj: Optional[WhereFilter] = None, + params: Optional[dict] = None, + ) -> dict: + return self._request( + "GET", + self.__api_info.get_table_find_one_uri(project, table), + params=get_query_params(filter_obj, params), + ).json() + def table_row_nested_relations_list( self, project: NocoDBProject, From 20b12f434d4793e16832fde3276ff675b60fe720 Mon Sep 17 00:00:00 2001 From: Delena Malan Date: Tue, 28 Feb 2023 10:10:42 +0200 Subject: [PATCH 5/6] Add examples to README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 7e540f7..78b037f 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,12 @@ table_rows = client.table_row_list(project, table_name, params={'offset': 100}) table_rows = client.table_row_list(project, table_name, InFilter("name", "sam")) table_rows = client.table_row_list(project, table_name, filter_obj=EqFilter("Id", 100)) +# Filter and count rows +count = = client.table_count(project, table_name, filter_obj=EqFilter("Id", 100)) + +# Find one row +table_row = client.table_find_one(project, table_name, filter_obj=EqFilter("Id", 100), params={"sort": "-created_at"}) + # Retrieve a single row row_id = 10 row = client.table_row_detail(project, table_name, row_id) From 948d2c8e6b2e31812a93c9adaa6d8668c29a6f21 Mon Sep 17 00:00:00 2001 From: Delena Malan Date: Wed, 1 Mar 2023 10:20:25 +0200 Subject: [PATCH 6/6] Fix README for count MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Samuel López --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 78b037f..b92021e 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ table_rows = client.table_row_list(project, table_name, InFilter("name", "sam")) table_rows = client.table_row_list(project, table_name, filter_obj=EqFilter("Id", 100)) # Filter and count rows -count = = client.table_count(project, table_name, filter_obj=EqFilter("Id", 100)) +count = client.table_count(project, table_name, filter_obj=EqFilter("Id", 100)) # Find one row table_row = client.table_find_one(project, table_name, filter_obj=EqFilter("Id", 100), params={"sort": "-created_at"})