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)