Skip to content

Commit 24e47ce

Browse files
committed
add check for 409 error code
1 parent 6f525ff commit 24e47ce

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

tableauserverclient/server/endpoint/workbooks_endpoint.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from tableauserverclient.server.endpoint.exceptions import (
1515
InternalServerError,
1616
MissingRequiredFieldError,
17+
ServerResponseError,
1718
UnsupportedAttributeError,
1819
)
1920
from tableauserverclient.server.endpoint.permissions_endpoint import _PermissionsEndpoint
@@ -144,7 +145,15 @@ def refresh(self, workbook_item: Union[WorkbookItem, str], incremental: bool = F
144145
id_ = getattr(workbook_item, "id", workbook_item)
145146
url = f"{self.baseurl}/{id_}/refresh"
146147
refresh_req = RequestFactory.Task.refresh_req(incremental, self.parent_srv)
147-
server_response = self.post_request(url, refresh_req)
148+
server_response = None
149+
try:
150+
server_response = self.post_request(url, refresh_req)
151+
except ServerResponseError as e:
152+
if e.code.startswith("409") and e.detail.find("already"):
153+
print(e.summary + " " + e.detail)
154+
return None
155+
else:
156+
raise e
148157
new_job = JobItem.from_response(server_response.content, self.parent_srv.namespace)[0]
149158
return new_job
150159

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api https://help.tableau.com/samples/en-us/rest_api/ts-api_3_27.xsd">
3+
<error code="409093"><summary>Resource Conflict</summary><detail>Job for \'extract\' is already queued. Not queuing a duplicate.</detail></error></tsResponse>

test/test_workbook.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
PUBLISH_XML = TEST_ASSET_DIR / "workbook_publish.xml"
3535
PUBLISH_ASYNC_XML = TEST_ASSET_DIR / "workbook_publish_async.xml"
3636
REFRESH_XML = TEST_ASSET_DIR / "workbook_refresh.xml"
37+
WORKBOOK_REFRESH_DUPLICATE_XML = TEST_ASSET_DIR / "workbook_refresh_duplicate.xml"
3738
REVISION_XML = TEST_ASSET_DIR / "workbook_revision.xml"
3839
UPDATE_XML = TEST_ASSET_DIR / "workbook_update.xml"
3940
UPDATE_PERMISSIONS = TEST_ASSET_DIR / "workbook_update_permissions.xml"
@@ -177,6 +178,21 @@ def test_refresh_id(server: TSC.Server) -> None:
177178
)
178179
server.workbooks.refresh("3cc6cd06-89ce-4fdc-b935-5294135d6d42")
179180

181+
def test_refresh_already_running(server: TSC.Server) -> None:
182+
server.version = "2.8"
183+
server.workbooks.baseurl
184+
response_xml = WORKBOOK_REFRESH_DUPLICATE_XML.read_text()
185+
with requests_mock.mock() as m:
186+
m.post(
187+
server.workbooks.baseurl + "/3cc6cd06-89ce-4fdc-b935-5294135d6d42/refresh",
188+
status_code=409,
189+
text=response_xml,
190+
)
191+
refresh_job = server.workbooks.refresh("3cc6cd06-89ce-4fdc-b935-5294135d6d42")
192+
assert refresh_job is None
193+
194+
195+
180196

181197
def test_refresh_object(server: TSC.Server) -> None:
182198
server.version = "2.8"

0 commit comments

Comments
 (0)