From 055828c4147d30dfc0fa5077e933ea419e197283 Mon Sep 17 00:00:00 2001 From: "bryant.howell" Date: Tue, 9 Dec 2025 14:01:29 -0600 Subject: [PATCH 1/6] Updated to v.2.0.3. Added system communication channel configs, and start of webhooks endpoints --- setup.cfg | 2 +- src/thoughtspot_rest_api/_version.py | 2 +- src/thoughtspot_rest_api/tsrestapiv2.py | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/setup.cfg b/setup.cfg index 9a8cabf..c1951ce 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = thoughtspot_rest_api -version = 2.0.2 +version = 2.0.3 description = Library implementing ThoughtSpot REST API V2.0 and V1 long_description = file: README.md long_description_content_type = text/markdown diff --git a/src/thoughtspot_rest_api/_version.py b/src/thoughtspot_rest_api/_version.py index 668c344..e7c12d2 100644 --- a/src/thoughtspot_rest_api/_version.py +++ b/src/thoughtspot_rest_api/_version.py @@ -1 +1 @@ -__version__ = '2.0.2' +__version__ = '2.0.3' diff --git a/src/thoughtspot_rest_api/tsrestapiv2.py b/src/thoughtspot_rest_api/tsrestapiv2.py index 1cafaa2..54dfc7b 100644 --- a/src/thoughtspot_rest_api/tsrestapiv2.py +++ b/src/thoughtspot_rest_api/tsrestapiv2.py @@ -445,6 +445,14 @@ def system_config_update(self, configuration: Dict): } return self.post_request(endpoint=endpoint, request=request) + def system_preferences_communication_channels_configure(self, request: Dict): + endpoint = 'system/preferences/communication-channels/configure' + return self.post_request(endpoint=endpoint, request=request) + + def system_preferences_communication_channels_search(self, request: Dict): + endpoint = 'system/preferences/communication-channels/search' + return self.post_request(endpoint=endpoint, request=request) + # # /orgs/ endpoints # @@ -1058,3 +1066,6 @@ def template_variables_update_values(self, request: Dict): endpoint = 'template/variables/update-values' return self.post_request(endpoint=endpoint, request=request) +# +# webhooks endpoints +# From 3a92ac62d66227b83405fa0b5bf0d27c7f9406b8 Mon Sep 17 00:00:00 2001 From: "bryant.howell" Date: Tue, 9 Dec 2025 14:05:23 -0600 Subject: [PATCH 2/6] Added webhooks endpoints --- src/thoughtspot_rest_api/tsrestapiv2.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/thoughtspot_rest_api/tsrestapiv2.py b/src/thoughtspot_rest_api/tsrestapiv2.py index 54dfc7b..a60f7bc 100644 --- a/src/thoughtspot_rest_api/tsrestapiv2.py +++ b/src/thoughtspot_rest_api/tsrestapiv2.py @@ -1069,3 +1069,19 @@ def template_variables_update_values(self, request: Dict): # # webhooks endpoints # + + def webhooks_create(self, request: Dict): + endpoint = 'webhooks/create' + return self.post_request(endpoint=endpoint, request=request) + + def webhooks_delete(self, request: Dict): + endpoint = 'webhooks/delete' + return self.post_request(endpoint=endpoint, request=request) + + def webhooks_search(self, request: Dict): + endpoint = 'webhooks/search' + return self.post_request(endpoint=endpoint, request=request) + + def webhooks_update(self, webhook_identifier: str, request: Dict): + endpoint = f'webhooks/{webhook_identifier}/update' + return self.post_request(endpoint=endpoint, request=request) \ No newline at end of file From bffd595b5548dd124af67a8ecc941b858e8e5d15 Mon Sep 17 00:00:00 2001 From: "bryant.howell" Date: Tue, 9 Dec 2025 14:16:53 -0600 Subject: [PATCH 3/6] Email customization and new column level security rule endpoints --- src/thoughtspot_rest_api/tsrestapiv2.py | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/thoughtspot_rest_api/tsrestapiv2.py b/src/thoughtspot_rest_api/tsrestapiv2.py index a60f7bc..840bd57 100644 --- a/src/thoughtspot_rest_api/tsrestapiv2.py +++ b/src/thoughtspot_rest_api/tsrestapiv2.py @@ -795,6 +795,15 @@ def security_metadata_unpublish(self, request: Dict): endpoint = 'security/metadata/unpublish' return self.post_request(endpoint=endpoint, request=request) + def security_column_rules_fetch(self, request: Dict): + endpoint = 'security/column/rules/fetch' + return self.post_request(endpoint=endpoint, request=request) + + def security_column_rules_update(self, request: Dict): + endpoint = 'security/column/rules/update' + return self.post_request(endpoint=endpoint, request=request) + + # # /data/ # @@ -952,6 +961,25 @@ def customization_custom_actions_delete(self, custom_action_identifier: str): # /customization/email # + def customization_email_create(self, request: Dict): + endpoint = 'customization/email' + return self.post_request(endpoint=endpoint, request=request) + + def customization_email_delete(self, request: Dict): + endpoint = 'customization/email/delete' + return self.post_request(endpoint=endpoint, request=request) + + def customization_email_search(self, request: Dict): + endpoint = 'customization/email/search' + return self.post_request(endpoint=endpoint, request=request) + + def customization_email_update(self, request: Dict): + endpoint = 'customization/email/update' + return self.post_request(endpoint=endpoint, request=request) + + def customization_email_validate(self, request: Dict): + endpoint = 'customization/email/validate' + return self.post_request(endpoint=endpoint, request=request) # # /schedules/ endpoints # From 818d19e54307ae5b2d34bea61ae7a0ad059dd258 Mon Sep 17 00:00:00 2001 From: "bryant.howell" Date: Wed, 10 Dec 2025 07:32:28 -0500 Subject: [PATCH 4/6] Custom Calendars endpoints --- src/thoughtspot_rest_api/tsrestapiv2.py | 26 ++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/thoughtspot_rest_api/tsrestapiv2.py b/src/thoughtspot_rest_api/tsrestapiv2.py index 840bd57..1158e3b 100644 --- a/src/thoughtspot_rest_api/tsrestapiv2.py +++ b/src/thoughtspot_rest_api/tsrestapiv2.py @@ -1112,4 +1112,28 @@ def webhooks_search(self, request: Dict): def webhooks_update(self, webhook_identifier: str, request: Dict): endpoint = f'webhooks/{webhook_identifier}/update' - return self.post_request(endpoint=endpoint, request=request) \ No newline at end of file + return self.post_request(endpoint=endpoint, request=request) + +# +# custom calendars endpoints +# + def calendars_create(self, request: Dict): + endpoint = 'calendars/create' + return self.post_request(endpoint=endpoint, request=request) + + def calendars_delete(self, calendar_identifier: str): + endpoint = f'calendars/{calendar_identifier}/delete' + return self.post_request(endpoint=endpoint) + + def calendars_generate_csv(self, request: Dict): + endpoint = 'calendars/generate-csv' + return self.post_request(endpoint=endpoint, request=request) + + def calendars_search(self, request: Dict): + endpoint = 'calendars/search' + return self.post_request(endpoint=endpoint, request=request) + + def calendars_update(self, calendar_identifier: str, request: Dict): + endpoint = f'calendars/{calendar_identifier}/update' + return self.post_request(endpoint=endpoint, request=request) + From 697c7b822c7f64d76ec88d156ae3015eb18300ed Mon Sep 17 00:00:00 2001 From: "bryant.howell" Date: Wed, 10 Dec 2025 07:36:40 -0500 Subject: [PATCH 5/6] Connection Configurations endpoints --- src/thoughtspot_rest_api/tsrestapiv2.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/thoughtspot_rest_api/tsrestapiv2.py b/src/thoughtspot_rest_api/tsrestapiv2.py index 1158e3b..9e6636a 100644 --- a/src/thoughtspot_rest_api/tsrestapiv2.py +++ b/src/thoughtspot_rest_api/tsrestapiv2.py @@ -919,6 +919,28 @@ def connection_fetch_connection_diff_status(self, connection_identifier: str): endpoint = 'connections/fetch-connection-diff-status/{}'.format(connection_identifier) return self.post_request(endpoint=endpoint) +# +# Connection Configurations endpoints +# + def connection_configurations_search(self, request: Dict): + endpoint = 'connection-configurations/search' + return self.post_request(endpoint=endpoint, request=request) + + def connection_configurations_create(self, request: Dict): + endpoint = 'connection-configurations/create' + return self.post_request(endpoint=endpoint, request=request) + + def connection_configurations_delete(self, request: Dict): + endpoint = 'connection-configurations/delete' + return self.post_request(endpoint=endpoint, request=request) + + def connection_configurations_update(self, connection_identifier: str, + request: Dict): + endpoint = f'connection-configurations/{connection_identifier}/update' + return self.post_request(endpoint=endpoint, request=request) + + + # # /roles/ endpoints # @@ -1137,3 +1159,4 @@ def calendars_update(self, calendar_identifier: str, request: Dict): endpoint = f'calendars/{calendar_identifier}/update' return self.post_request(endpoint=endpoint, request=request) + From c712db11ee2673dc82bb1d70b5eedbc9923f5207 Mon Sep 17 00:00:00 2001 From: "bryant.howell" Date: Wed, 10 Dec 2025 07:46:18 -0500 Subject: [PATCH 6/6] AI Agent endpoints --- src/thoughtspot_rest_api/tsrestapiv2.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/thoughtspot_rest_api/tsrestapiv2.py b/src/thoughtspot_rest_api/tsrestapiv2.py index 9e6636a..1788b41 100644 --- a/src/thoughtspot_rest_api/tsrestapiv2.py +++ b/src/thoughtspot_rest_api/tsrestapiv2.py @@ -1049,6 +1049,21 @@ def dbt_dbt_connection_update(self, dbt_connection_identifier: str, request: Dic # /ai/ endpoints # + def ai_agent_conversation_create(self, request: Dict): + endpoint = 'ai/agent/conversation/create' + return self.post_request(endpoint=endpoint, request=request) + + def ai_data_source_suggestions_get(self, query: str): + endpoint = 'ai/data-source-suggestions' + request = { + "query": query + } + return self.post_request(endpoint=endpoint, request=request) + + def ai_relevant_questions(self, request: Dict): + endpoint = 'ai/relevant-questions/' + return self.post_request(endpoint=endpoint, request=request) + def ai_conversation_create(self, metadata_identifier: str, tokens: Optional[List[str]] = None): endpoint = 'ai/conversation/create' @@ -1090,6 +1105,15 @@ def ai_analytical_questions(self, request: Dict): endpoint = 'ai/analytical-questions' return self.post_request(endpoint=endpoint, request=request) + def ai_agent_converse(self, conversation_identifier: str, request: Dict): + endpoint = f'ai/agent/{conversation_identifier}/converse' + return self.post_request(endpoint=endpoint, request=request) + + # Marked as BETA in 10.15 + def ai_agent_converse_sse(self, request: Dict): + endpoint = 'ai/agent/converse/sse' + return self.post_request(endpoint=endpoint, request=request) + # # /template/variables endpoints #