8000 Add flexibility for wkbk/ds id or item in endpoint (#570) · burnier/server-client-python@2552c26 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2552c26

Browse files
jorwoodsJordan Woods
andauthored
Add flexibility for wkbk/ds id or item in endpoint (tableau 10000 #570)
* Add flexibility for wkbk/ds id or item in endpoint * Add API version number decorator * Write tests for workbook refresh * Correct refresh XML * Correct code style * Create tests for datasource refresh * Test job cancel on item Co-authored-by: Jordan Woods <Jordan.Woods@mkcorp.com>
1 parent dd0fcd5 commit 2552c26

File tree

8 files changed

+77
-4
lines changed

8 files changed

+77
-4
lines changed

tableauserverclient/server/endpoint/datasources_endpoint.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,10 @@ def update_connection(self, datasource_item, connection_item):
144144
connection_item.id))
145145
return connection
146146

147+
@api(version="2.8")
147148
def refresh(self, datasource_item):
148-
url = "{0}/{1}/refresh".format(self.baseurl, datasource_item.id)
149+
id_ = getattr(datasource_item, 'id', datasource_item)
150+
url = "{0}/{1}/refresh".format(self.baseurl, id_)
149151
empty_req = RequestFactory.Empty.empty_req()
150152
server_response = self.post_request(url, empty_req)
151153
new_job = JobItem.from_response(server_response.content, self.parent_srv.namespace)[0]

tableauserverclient/server/endpoint/jobs_endpoint.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ def get(self, job_id=None, req_options=None):
3535

3636
@api(version='3.1')
3737
def cancel(self, job_id):
38-
url = '{0}/{1}'.format(self.baseurl, job_id)
38+
id_ = getattr(job_id, 'id', job_id)
39+
url = '{0}/{1}'.format(self.baseurl, id_)
3940
return self.put_request(url)
4041

4142
@api(version='2.6')

tableauserverclient/server/endpoint/workbooks_endpoint.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ def get_by_id(self, workbook_id):
5656

5757
@api(version="2.8")
5858
def refresh(self, workbook_id):
59-
url = "{0}/{1}/refresh".format(self.baseurl, workbook_id)
59+
id_ = getattr(workbook_id, 'id', workbook_id)
60+
url = "{0}/{1}/refresh".format(self.baseurl, id_)
6061
empty_req = RequestFactory.Empty.empty_req()
6162
server_response = self.post_request(url, empty_req)
6263
new_job = JobItem.from_response(server_response.content, self.parent_srv.namespace)[0]

test/assets/datasource_refresh.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
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 http://tableau.com/api/ts-api-2.3.xsd">
3+
<job id="7c3d599e-949f-44c3-94a1-f30ba85757e4" mode="Asynchronous" type="RefreshExtract" createdAt="2020-03-05T22:05:32Z">
4+
<extractRefreshJob>
5+
<datasource id="9dbd2263-16b5-46e1-9c43-a76bb8ab65fb" name="datasource-name" />
6+
</extractRefreshJob>
7+
</job>
8+
</tsResponse>

test/assets/workbook_refresh.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
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 http://tableau.com/api/ts-api-2.3.xsd">
3+
<job id="7c3d599e-949f-44c3-94a1-f30ba85757e4" mode="Asynchronous" type="RefreshExtract" createdAt="2020-03-05T22:05:32Z">
4+
<extractRefreshJob>
5+
<workbook id="3cc6cd06-89ce-4fdc-b935-5294135d6d42" name="workbook-name" />
6+
</extractRefreshJob>
7+
</job>
8+
</tsResponse>

test/test_datasource.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
POPULATE_PERMISSIONS_XML = 'datasource_populate_permissions.xml'
1717
PUBLISH_XML = 'datasource_publish.xml'
1818
PUBLISH_XML_ASYNC = 'datasource_publish_async.xml'
19+
REFRESH_XML = 'datasource_refresh.xml'
1920
UPDATE_XML = 'datasource_update.xml'
2021
UPDATE_CONNECTION_XML = 'datasource_connection_update.xml'
2122

@@ -249,6 +250,26 @@ def test_publish_async(self):
249250
self.assertEqual('2018-06-30T00:54:54Z', format_datetime(new_job.created_at))
250251
self.assertEqual('1', new_job.finish_code)
251252

253+
def test_refresh_id(self):
254+
self.server.version = '2.8'
255+
self.baseurl = self.server.datasources.baseurl
256+
response_xml = read_xml_asset(REFRESH_XML)
257+
with requests_mock.mock() as m:
258+
m.post(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/refresh',
259+
status_code=202, text=response_xml)
260+
self.server.datasources.refresh('9dbd2263-16b5-46e1-9c43-a76bb8ab65fb')
261+
262+
def test_refresh_object(self):
263+
self.server.version = '2.8'
264+
self.baseurl = self.server.datasources.baseurl
265+
datasource = TSC.DatasourceItem('')
266+
datasource._id = '9dbd2263-16b5-46e1-9c43-a76bb8ab65fb'
267+
response_xml = read_xml_asset(REFRESH_XML)
268+
with requests_mock.mock() as m:
269+
m.post(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/refresh',
270+
status_code=202, text=response_xml)
271+
self.server.datasources.refresh(datasource)
272+
252273
def test_delete(self):
253274
with requests_mock.mock() as m:
254275
m.delete(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb', status_code=204)

test/test_job.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,16 @@ def test_get_before_signin(self):
4545
self.server._auth_token = None
4646
self.assertRaises(TSC.NotSignedInError, self.server.jobs.get)
4747

48-
def test_cancel(self):
48+
def test_cancel_id(self):
4949
with requests_mock.mock() as m:
5050
m.put(self.baseurl + '/ee8c6e70-43b6-11e6-af4f-f7b0d8e20760', status_code=204)
5151
self.server.jobs.cancel('ee8c6e70-43b6-11e6-af4f-f7b0d8e20760')
52+
53+
def test_cancel_item(self):
54+
created_at = datetime(2018, 5, 22, 13, 0, 29, tzinfo=utc)
55+
started_at = datetime(2018, 5, 22, 13, 0, 37, tzinfo=utc)
56+
job = TSC.JobItem('ee8c6e70-43b6-11e6-af4f-f7b0d8e20760', 'backgroundJob',
57+
0, created_at, started_at, None, 0)
58+
with requests_mock.mock() as m:
59+
m.put(self.baseurl + '/ee8c6e70-43b6-11e6-af4f-f7b0d8e20760', status_code=204)
60+
self.server.jobs.cancel(job)

test/test_workbook.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
POPULATE_VIEWS_USAGE_XML = os.path.join(TEST_ASSET_DIR, 'workbook_populate_views_usage.xml')
2828
PUBLISH_XML = os.path.join(TEST_ASSET_DIR, 'workbook_publish.xml')
2929
PUBLISH_ASYNC_XML = os.path.join(TEST_ASSET_DIR, 'workbook_publish_async.xml')
30+
REFRESH_XML = os.path.join(TEST_ASSET_DIR, 'workbook_refresh.xml')
3031
UPDATE_XML = os.path.join(TEST_ASSET_DIR, 'workbook_update.xml')
3132
UPDATE_PERMISSIONS = os.path.join(TEST_ASSET_DIR, 'workbook_update_permissions.xml')
3233

@@ -114,6 +115,28 @@ def test_get_by_id(self):
114115
def test_get_by_id_missing_id(self):
115116
self.assertRaises(ValueError, self.server.workbooks.get_by_id, '')
116117

118+
def test_refresh_id(self):
119+
self.server.version = '2.8'
120+
self.baseurl = self.server.workbooks.baseurl
121+
with open(REFRESH_XML, 'rb') as f:
122+
response_xml = f.read().decode('utf-8')
123+
with requests_mock.mock() as m:
124+
m.post(self.baseurl + '/3cc6cd06-89ce-4fdc-b935-5294135d6d42/refresh',
125+
status_code=202, text=response_xml)
126+
self.server.workbooks.refresh('3cc6cd06-89ce-4fdc-b935-5294135d6d42')
127+
128+
def test_refresh_object(self):
129+
self.server.version = '2.8'
130+
self.baseurl = self.server.workbooks.baseurl
131+
workbook = TSC.WorkbookItem('')
132+
workbook._id = '3cc6cd06-89ce-4fdc-b935-5294135d6d42'
133+
with open(REFRESH_XML, 'rb') as f:
134+
response_xml = f.read().decode('utf-8')
135+
with requests_mock.mock() as m:
136+
m.post(self.baseurl + '/3cc6cd06-89ce-4fdc-b935-5294135d6d42/refresh',
137+
status_code=202, text=response_xml)
138+
self.server.workbooks.refresh(workbook)
139+
117140
def test_delete(self):
118141
with requests_mock.mock() as m:
119142
m.delete(self.baseurl + '/3cc6cd06-89ce-4fdc-b935-5294135d6d42', status_code=204)

0 commit comments

Comments
 (0)
0