From 3d27cbabf98388baee7bd4b66e470953cca4f590 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 9 Aug 2025 21:36:34 +0000 Subject: [PATCH 1/2] Initial plan From 21287f7bbab760452bd9baf9fc80c6cf2d7e8582 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 9 Aug 2025 21:43:10 +0000 Subject: [PATCH 2/2] Add timeout parameter to BulkImport.perform() method Co-authored-by: chezou <916653+chezou@users.noreply.github.com> --- tdclient/bulk_import_model.py | 5 +++-- tdclient/test/bulk_import_model_test.py | 26 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/tdclient/bulk_import_model.py b/tdclient/bulk_import_model.py index afad72e..9cc0ff6 100644 --- a/tdclient/bulk_import_model.py +++ b/tdclient/bulk_import_model.py @@ -101,7 +101,7 @@ def unfreeze(self): self.update() return response - def perform(self, wait=False, wait_interval=5, wait_callback=None): + def perform(self, wait=False, wait_interval=5, wait_callback=None, timeout=None): """Perform bulk import Args: @@ -109,6 +109,7 @@ def perform(self, wait=False, wait_interval=5, wait_callback=None): wait_interval (int, optional): wait interval in second. Default `5`. wait_callback (callable, optional): A callable to be called on every tick of wait interval. + timeout (int, optional): Timeout in seconds. No timeout by default. """ self.update() if not self.upload_frozen: @@ -117,7 +118,7 @@ def perform(self, wait=False, wait_interval=5, wait_callback=None): ) job = self._client.perform_bulk_import(self.name) if wait: - job.wait(wait_interval=wait_interval, wait_callback=wait_callback) + job.wait(timeout=timeout, wait_interval=wait_interval, wait_callback=wait_callback) self.update() return job diff --git a/tdclient/test/bulk_import_model_test.py b/tdclient/test/bulk_import_model_test.py index 66f47d4..226da6a 100644 --- a/tdclient/test/bulk_import_model_test.py +++ b/tdclient/test/bulk_import_model_test.py @@ -120,6 +120,32 @@ def test_bulk_import_perfom(): assert bulk_import.update.called +def test_bulk_import_perform_with_timeout(): + client = mock.MagicMock() + job_mock = mock.MagicMock() + client.perform_bulk_import.return_value = job_mock + + bulk_import = models.BulkImport( + client, + name="name", + database="database", + table="table", + status="status", + upload_frozen=True, + job_id="job_id", + valid_records="valid_records", + error_records="error_records", + valid_parts="valid_parts", + error_parts="error_parts", + ) + bulk_import.update = mock.MagicMock() + bulk_import.perform(wait=True, timeout=300, wait_interval=10) + + client.perform_bulk_import.assert_called_with("name") + job_mock.wait.assert_called_with(timeout=300, wait_interval=10, wait_callback=None) + assert bulk_import.update.called + + def test_bulk_import_commit(): client = mock.MagicMock() bulk_import = models.BulkImport(