From 1efc0088c0a7435f370895076ba9911a1dc48cb1 Mon Sep 17 00:00:00 2001 From: skywalker Date: Tue, 4 Apr 2023 15:28:15 +0800 Subject: [PATCH 1/2] smart_fill --- seatable_api/main.py | 46 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/seatable_api/main.py b/seatable_api/main.py index b3adaaa..7790e60 100644 --- a/seatable_api/main.py +++ b/seatable_api/main.py @@ -172,6 +172,12 @@ def _dtable_db_linked_records_url(self): def _dtable_db_insert_rows_url(self): return self.dtable_db_url + '/api/v1/insert-rows/' + self.dtable_uuid + '/' + def _smart_fill_from_text_url(self): + return self.dtable_db_url + '/api/v1/smart-fill-from-text/' + + def _smart_fill_from_column_url(self): + return self.dtable_db_url + '/api/v1/smart-fill-from-column/' + def _get_related_users_url(self): return '%(server_url)s/api/v2.1/dtables/%(dtable_uuid)s/related-users/' % { 'server_url': self.server_url, @@ -944,7 +950,6 @@ def add_workflow_task_with_existed_row(self, workflow_token, row_id, initiator=N response = requests.post(url, data={'row_id': row_id, 'initiator': initiator}, headers=headers) return parse_response(response)['task'] - def big_data_insert_rows(self, table_name, rows_data): url = self._dtable_db_insert_rows_url() json_data = { @@ -954,6 +959,45 @@ def big_data_insert_rows(self, table_name, rows_data): response = requests.post(url, json=json_data, headers=self.headers, timeout=self.timeout) return parse_response(response) + # ----- ----- ----- AI ----- ----- ----- # + + def smart_fill_from_text(self, table_name, long_text, columns): + """ + :param table_name: str + :param long_text: str + :param columns: list + :return: list + """ + url = self._smart_fill_from_text_url() + json_data = { + 'dtable_uuid': self.dtable_uuid, + 'table_name': table_name, + 'long_text': long_text, + 'columns': columns, + } + response = requests.post(url, json=json_data, headers=self.headers, timeout=self.timeout) + return parse_response(response) + + def smart_fill_from_column(self, table_name, long_text_column_name, columns, start=0, limit=10): + """ + :param table_name: str + :param long_text_column_name: str + :param columns: list + :param start: int + :param limit: int + :return: list + """ + url = self._smart_fill_from_column_url() + json_data = { + 'dtable_uuid': self.dtable_uuid, + 'table_name': table_name, + 'long_text_column_name': long_text_column_name, + 'columns': columns, + 'start': start, + 'limit': limit, + } + response = requests.post(url, json=json_data, headers=self.headers, timeout=self.timeout) + return parse_response(response) class Account(object): From 3f6eb6d7f881a45b99589341e25bbdb33769742b Mon Sep 17 00:00:00 2001 From: skywalker Date: Fri, 7 Apr 2023 18:31:13 +0800 Subject: [PATCH 2/2] smart_fill_task_status --- seatable_api/main.py | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/seatable_api/main.py b/seatable_api/main.py index 7790e60..18e152a 100644 --- a/seatable_api/main.py +++ b/seatable_api/main.py @@ -1,4 +1,5 @@ import io +import time import json import re from datetime import datetime, timedelta @@ -172,12 +173,6 @@ def _dtable_db_linked_records_url(self): def _dtable_db_insert_rows_url(self): return self.dtable_db_url + '/api/v1/insert-rows/' + self.dtable_uuid + '/' - def _smart_fill_from_text_url(self): - return self.dtable_db_url + '/api/v1/smart-fill-from-text/' - - def _smart_fill_from_column_url(self): - return self.dtable_db_url + '/api/v1/smart-fill-from-column/' - def _get_related_users_url(self): return '%(server_url)s/api/v2.1/dtables/%(dtable_uuid)s/related-users/' % { 'server_url': self.server_url, @@ -196,6 +191,16 @@ def _add_workflow_task_url(self, token): 'token': token } + def _smart_fill_from_text_url(self): + return self.server_url + '/api/v2.1/smart-fill-from-text/' + + def _smart_fill_from_column_url(self): + return self.server_url + '/api/v2.1/smart-fill-from-column/' + + def _smart_fill_task_status_url(self, task_id): + return self.server_url + '/api/v2.1/smart-fill-task-status/?dtable_uuid=' + \ + self.dtable_uuid + '&task_id=' + str(task_id) + def _get_account_detail(self, account_name): url = self._third_party_accounts_url() params = { @@ -966,7 +971,7 @@ def smart_fill_from_text(self, table_name, long_text, columns): :param table_name: str :param long_text: str :param columns: list - :return: list + :return: dict """ url = self._smart_fill_from_text_url() json_data = { @@ -985,7 +990,7 @@ def smart_fill_from_column(self, table_name, long_text_column_name, columns, sta :param columns: list :param start: int :param limit: int - :return: list + :return: dict """ url = self._smart_fill_from_column_url() json_data = { @@ -999,6 +1004,22 @@ def smart_fill_from_column(self, table_name, long_text_column_name, columns, sta response = requests.post(url, json=json_data, headers=self.headers, timeout=self.timeout) return parse_response(response) + def smart_fill_task_status(self, task_id): + """ + :param task_id: str + :return: dict + """ + url = self._smart_fill_task_status_url(task_id) + print('start check task status, please wait...') + for i in range(300): + time.sleep(1) + response = requests.get(url, headers=self.headers, timeout=self.timeout) + response = parse_response(response) + is_finished = response['is_finished'] + if is_finished: + return response + return {'error': 'smart fill task status timeout'} + class Account(object): def __init__(self, login_name, password, server_url):