diff --git a/tableauserverclient/server/endpoint/datasources_endpoint.py b/tableauserverclient/server/endpoint/datasources_endpoint.py
index eef88d09e..44dea28df 100644
--- a/tableauserverclient/server/endpoint/datasources_endpoint.py
+++ b/tableauserverclient/server/endpoint/datasources_endpoint.py
@@ -144,8 +144,10 @@ def update_connection(self, datasource_item, connection_item):
connection_item.id))
return connection
+ @api(version="2.8")
def refresh(self, datasource_item):
- url = "{0}/{1}/refresh".format(self.baseurl, datasource_item.id)
+ id_ = getattr(datasource_item, 'id', datasource_item)
+ url = "{0}/{1}/refresh".format(self.baseurl, id_)
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/tableauserverclient/server/endpoint/jobs_endpoint.py b/tableauserverclient/server/endpoint/jobs_endpoint.py
index 92285c3db..e70c9c313 100644
--- a/tableauserverclient/server/endpoint/jobs_endpoint.py
+++ b/tableauserverclient/server/endpoint/jobs_endpoint.py
@@ -35,7 +35,8 @@ def get(self, job_id=None, req_options=None):
@api(version='3.1')
def cancel(self, job_id):
- url = '{0}/{1}'.format(self.baseurl, job_id)
+ id_ = getattr(job_id, 'id', job_id)
+ url = '{0}/{1}'.format(self.baseurl, id_)
return self.put_request(url)
@api(version='2.6')
diff --git a/tableauserverclient/server/endpoint/workbooks_endpoint.py b/tableauserverclient/server/endpoint/workbooks_endpoint.py
index a6a49fedf..1559bc41b 100644
--- a/tableauserverclient/server/endpoint/workbooks_endpoint.py
+++ b/tableauserverclient/server/endpoint/workbooks_endpoint.py
@@ -56,7 +56,8 @@ def get_by_id(self, workbook_id):
@api(version="2.8")
def refresh(self, workbook_id):
- url = "{0}/{1}/refresh".format(self.baseurl, workbook_id)
+ id_ = getattr(workbook_id, 'id', workbook_id)
+ url = "{0}/{1}/refresh".format(self.baseurl, id_)
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/assets/datasource_refresh.xml b/test/assets/datasource_refresh.xml
new file mode 100644
index 000000000..61b4b7601
--- /dev/null
+++ b/test/assets/datasource_refresh.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/test/assets/workbook_refresh.xml b/test/assets/workbook_refresh.xml
new file mode 100644
index 000000000..6f5da8283
--- /dev/null
+++ b/test/assets/workbook_refresh.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/test_datasource.py b/test/test_datasource.py
index c90cf4601..2b7cc623c 100644
--- a/test/test_datasource.py
+++ b/test/test_datasource.py
@@ -16,6 +16,7 @@
POPULATE_PERMISSIONS_XML = 'datasource_populate_permissions.xml'
PUBLISH_XML = 'datasource_publish.xml'
PUBLISH_XML_ASYNC = 'datasource_publish_async.xml'
+REFRESH_XML = 'datasource_refresh.xml'
UPDATE_XML = 'datasource_update.xml'
UPDATE_CONNECTION_XML = 'datasource_connection_update.xml'
@@ -249,6 +250,26 @@ def test_publish_async(self):
self.assertEqual('2018-06-30T00:54:54Z', format_datetime(new_job.created_at))
self.assertEqual('1', new_job.finish_code)
+ def test_refresh_id(self):
+ self.server.version = '2.8'
+ self.baseurl = self.server.datasources.baseurl
+ response_xml = read_xml_asset(REFRESH_XML)
+ with requests_mock.mock() as m:
+ m.post(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/refresh',
+ status_code=202, text=response_xml)
+ self.server.datasources.refresh('9dbd2263-16b5-46e1-9c43-a76bb8ab65fb')
+
+ def test_refresh_object(self):
+ self.server.version = '2.8'
+ self.baseurl = self.server.datasources.baseurl
+ datasource = TSC.DatasourceItem('')
+ datasource._id = '9dbd2263-16b5-46e1-9c43-a76bb8ab65fb'
+ response_xml = read_xml_asset(REFRESH_XML)
+ with requests_mock.mock() as m:
+ m.post(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/refresh',
+ status_code=202, text=response_xml)
+ self.server.datasources.refresh(datasource)
+
def test_delete(self):
with requests_mock.mock() as m:
m.delete(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb', status_code=204)
diff --git a/test/test_job.py b/test/test_job.py
index ee8316168..ee80450ca 100644
--- a/test/test_job.py
+++ b/test/test_job.py
@@ -45,7 +45,16 @@ def test_get_before_signin(self):
self.server._auth_token = None
self.assertRaises(TSC.NotSignedInError, self.server.jobs.get)
- def test_cancel(self):
+ def test_cancel_id(self):
with requests_mock.mock() as m:
m.put(self.baseurl + '/ee8c6e70-43b6-11e6-af4f-f7b0d8e20760', status_code=204)
self.server.jobs.cancel('ee8c6e70-43b6-11e6-af4f-f7b0d8e20760')
+
+ def test_cancel_item(self):
+ created_at = datetime(2018, 5, 22, 13, 0, 29, tzinfo=utc)
+ started_at = datetime(2018, 5, 22, 13, 0, 37, tzinfo=utc)
+ job = TSC.JobItem('ee8c6e70-43b6-11e6-af4f-f7b0d8e20760', 'backgroundJob',
+ 0, created_at, started_at, None, 0)
+ with requests_mock.mock() as m:
+ m.put(self.baseurl + '/ee8c6e70-43b6-11e6-af4f-f7b0d8e20760', status_code=204)
+ self.server.jobs.cancel(job)
diff --git a/test/test_workbook.py b/test/test_workbook.py
index fac6c49a1..dabf49a6d 100644
--- a/test/test_workbook.py
+++ b/test/test_workbook.py
@@ -27,6 +27,7 @@
POPULATE_VIEWS_USAGE_XML = os.path.join(TEST_ASSET_DIR, 'workbook_populate_views_usage.xml')
PUBLISH_XML = os.path.join(TEST_ASSET_DIR, 'workbook_publish.xml')
PUBLISH_ASYNC_XML = os.path.join(TEST_ASSET_DIR, 'workbook_publish_async.xml')
+REFRESH_XML = os.path.join(TEST_ASSET_DIR, 'workbook_refresh.xml')
UPDATE_XML = os.path.join(TEST_ASSET_DIR, 'workbook_update.xml')
UPDATE_PERMISSIONS = os.path.join(TEST_ASSET_DIR, 'workbook_update_permissions.xml')
@@ -114,6 +115,28 @@ def test_get_by_id(self):
def test_get_by_id_missing_id(self):
self.assertRaises(ValueError, self.server.workbooks.get_by_id, '')
+ def test_refresh_id(self):
+ self.server.version = '2.8'
+ self.baseurl = self.server.workbooks.baseurl
+ with open(REFRESH_XML, 'rb') as f:
+ response_xml = f.read().decode('utf-8')
+ with requests_mock.mock() as m:
+ m.post(self.baseurl + '/3cc6cd06-89ce-4fdc-b935-5294135d6d42/refresh',
+ status_code=202, text=response_xml)
+ self.server.workbooks.refresh('3cc6cd06-89ce-4fdc-b935-5294135d6d42')
+
+ def test_refresh_object(self):
+ self.server.version = '2.8'
+ self.baseurl = self.server.workbooks.baseurl
+ workbook = TSC.WorkbookItem('')
+ workbook._id = '3cc6cd06-89ce-4fdc-b935-5294135d6d42'
+ with open(REFRESH_XML, 'rb') as f:
+ response_xml = f.read().decode('utf-8')
+ with requests_mock.mock() as m:
+ m.post(self.baseurl + '/3cc6cd06-89ce-4fdc-b935-5294135d6d42/refresh',
+ status_code=202, text=response_xml)
+ self.server.workbooks.refresh(workbook)
+
def test_delete(self):
with requests_mock.mock() as m:
m.delete(self.baseurl + '/3cc6cd06-89ce-4fdc-b935-5294135d6d42', status_code=204)