diff --git a/tableauserverclient/server/endpoint/datasources_endpoint.py b/tableauserverclient/server/endpoint/datasources_endpoint.py index f528b373..6a734f7b 100644 --- a/tableauserverclient/server/endpoint/datasources_endpoint.py +++ b/tableauserverclient/server/endpoint/datasources_endpoint.py @@ -430,7 +430,7 @@ def update_connections( return connection_items @api(version="2.8") - def refresh(self, datasource_item: DatasourceItem, incremental: bool = False) -> JobItem: + def refresh(self, datasource_item: Union[DatasourceItem, str], incremental: bool = False) -> JobItem: """ Refreshes the extract of an existing workbook. @@ -438,8 +438,8 @@ def refresh(self, datasource_item: DatasourceItem, incremental: bool = False) -> Parameters ---------- - workbook_item : WorkbookItem | str - The workbook item or workbook ID. + workbook_item : DatasourceItem | str + The datasource item or datasource ID. incremental: bool Whether to do a full refresh or incremental refresh of the extract data diff --git a/tableauserverclient/server/endpoint/flows_endpoint.py b/tableauserverclient/server/endpoint/flows_endpoint.py index 42c9d4c1..ea29f296 100644 --- a/tableauserverclient/server/endpoint/flows_endpoint.py +++ b/tableauserverclient/server/endpoint/flows_endpoint.py @@ -308,7 +308,7 @@ def update_connection(self, flow_item: FlowItem, connection_item: ConnectionItem return connection @api(version="3.3") - def refresh(self, flow_item: FlowItem) -> JobItem: + def refresh(self, flow_item: Union[FlowItem, str]) -> JobItem: """ Runs the flow to refresh the data. @@ -316,15 +316,16 @@ def refresh(self, flow_item: FlowItem) -> JobItem: Parameters ---------- - flow_item: FlowItem - The flow item to refresh. + flow_item: FlowItem | str + The FlowItem or str of the flow id to refresh. Returns ------- JobItem The job item that was created to refresh the flow. """ - url = f"{self.baseurl}/{flow_item.id}/run" + flow_id = getattr(flow_item, "id", flow_item) + url = f"{self.baseurl}/{flow_id}/run" empty_req = RequestFactory.Empty.empty_req() server_response = self.post_request(url, empty_req) new_job = JobItem.from_response(server_response.content, self.parent_srv.namespace)[0] diff --git a/test/test_flow.py b/test/test_flow.py index d458bc77..54c1f020 100644 --- a/test/test_flow.py +++ b/test/test_flow.py @@ -197,7 +197,7 @@ def test_publish_file_object(self) -> None: self.assertEqual("default", new_flow.project_name) self.assertEqual("5de011f8-5aa9-4d5b-b991-f462c8dd6bb7", new_flow.owner_id) - def test_refresh(self): + def test_refresh(self) -> None: with open(asset(REFRESH_XML), "rb") as f: response_xml = f.read().decode("utf-8") with requests_mock.mock() as m: @@ -215,6 +215,22 @@ def test_refresh(self): self.assertEqual(refresh_job.flow_run.flow_id, "92967d2d-c7e2-46d0-8847-4802df58f484") self.assertEqual(format_datetime(refresh_job.flow_run.started_at), "2018-05-22T13:00:29Z") + def test_refresh_id_str(self) -> None: + with open(asset(REFRESH_XML), "rb") as f: + response_xml = f.read().decode("utf-8") + with requests_mock.mock() as m: + m.post(self.baseurl + "/92967d2d-c7e2-46d0-8847-4802df58f484/run", text=response_xml) + refresh_job = self.server.flows.refresh("92967d2d-c7e2-46d0-8847-4802df58f484") + + self.assertEqual(refresh_job.id, "d1b2ccd0-6dfa-444a-aee4-723dbd6b7c9d") + self.assertEqual(refresh_job.mode, "Asynchronous") + self.assertEqual(refresh_job.type, "RunFlow") + self.assertEqual(format_datetime(refresh_job.created_at), "2018-05-22T13:00:29Z") + self.assertIsInstance(refresh_job.flow_run, TSC.FlowRunItem) + self.assertEqual(refresh_job.flow_run.id, "e0c3067f-2333-4eee-8028-e0a56ca496f6") + self.assertEqual(refresh_job.flow_run.flow_id, "92967d2d-c7e2-46d0-8847-4802df58f484") + self.assertEqual(format_datetime(refresh_job.flow_run.started_at), "2018-05-22T13:00:29Z") + def test_bad_download_response(self) -> None: with requests_mock.mock() as m, tempfile.TemporaryDirectory() as td: m.get(