Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions tableauserverclient/server/endpoint/datasources_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -430,16 +430,16 @@ 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.

REST API: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#run_extract_refresh_task

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

Expand Down
9 changes: 5 additions & 4 deletions tableauserverclient/server/endpoint/flows_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,23 +308,24 @@ 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.

REST API: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#run_flow_now

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]
Expand Down
18 changes: 17 additions & 1 deletion test/test_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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(
Expand Down
Loading