From 0cc163e6041bd92fd5a8292a3ee6e83d722db60d Mon Sep 17 00:00:00 2001 From: "bryant.howell" Date: Wed, 13 Nov 2024 15:43:08 -0600 Subject: [PATCH] Updates for new 10.4 spotter APIs as well as changes to some endpoints to make their arguments optional --- setup.cfg | 2 +- src/thoughtspot_rest_api_v1/_version.py | 2 +- src/thoughtspot_rest_api_v1/tsrestapiv2.py | 60 +++++++++++++++++++--- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/setup.cfg b/setup.cfg index 7b4923e..9ed18e4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = thoughtspot_rest_api_v1 -version = 1.8.1 +version = 1.8.2 description = Library implementing the ThoughtSpot V1 REST API long_description = file: README.md long_description_content_type = text/markdown diff --git a/src/thoughtspot_rest_api_v1/_version.py b/src/thoughtspot_rest_api_v1/_version.py index e8b6b09..aa1a8c4 100644 --- a/src/thoughtspot_rest_api_v1/_version.py +++ b/src/thoughtspot_rest_api_v1/_version.py @@ -1 +1 @@ -__version__ = '1.8.1' +__version__ = '1.8.2' diff --git a/src/thoughtspot_rest_api_v1/tsrestapiv2.py b/src/thoughtspot_rest_api_v1/tsrestapiv2.py index b9c67e3..accd3f9 100644 --- a/src/thoughtspot_rest_api_v1/tsrestapiv2.py +++ b/src/thoughtspot_rest_api_v1/tsrestapiv2.py @@ -368,29 +368,35 @@ def orgs_delete(self, org_identifier: str): # # /metadata/tag endpoints # - def tags_search(self, tag_identifier: Optional[str] = None, color: Optional[str] = None): + def tags_search(self, tag_identifier: Optional[str] = None, name_pattern: Optional[str] = None, + color: Optional[str] = None): endpoint = 'tags/search' request = {} if tag_identifier is not None: request['tag_identifier'] = tag_identifier if color is not None: request['color'] = color + if name_pattern is not None: + request['name_pattern'] = name_pattern + return self.post_request(endpoint=endpoint, request=request) - def tags_create(self, name: str, color: str): + def tags_create(self, name: str, color: Optional[str] = None): endpoint = 'tags/create' request = { - 'name': name, - 'color': color + 'name': name } + if color is not None: + request['color'] = color return self.post_request(endpoint=endpoint, request=request) - def tags_update(self, tag_identifier: str, name: str, color: str): + def tags_update(self, tag_identifier: str, name: str, color: Optional[str] = None): endpoint = 'tags/{}/update'.format(tag_identifier) request = { - 'name': name, - 'color': color + 'name': name } + if color is not None: + request['color'] = color return self.post_request(endpoint=endpoint, request=request) def tags_delete(self, tag_identifier: str): @@ -733,4 +739,44 @@ def dbt_dbt_connection_update(self, dbt_connection_identifier: str, request: Dic endpoint = 'dbt/{}'.format(dbt_connection_identifier) return self.post_request(endpoint=endpoint, request=request) +# +# /ai/ endpoints +# + + def ai_conversation_create(self, metadata_identifier: str, + tokens: Optional[List[str]] = None): + endpoint = 'ai/conversation/create' + + request = { + "metadata_identifier": metadata_identifier + } + + if tokens is not None: + tokens_string = "" + for token in tokens: + tokens_string += "[{}],".format(token.lower()) + tokens_string = tokens_string[0:-1] + request["tokens"] = tokens_string + + return self.post_request(endpoint=endpoint, request=request) + + def ai_conversation_converse(self, conversation_identifier: str, metadata_identifier: str, message: str): + endpoint = 'ai/conversation/{}/converse'.format(conversation_identifier) + + request = { + "metadata_identifier": metadata_identifier, + "message": message + } + + return self.post_request(endpoint=endpoint, request=request) + + def ai_answer_create(self, metadata_identifier: str, query: str): + endpoint = 'ai/answer/create' + + request = { + "metadata_identifier": metadata_identifier, + "query": query + } + + return self.post_request(endpoint=endpoint, request=request)