8000 adding support for 'getWorkbookPdf' endpoint of REST API (#376) · SnarkyPapi/server-client-python@68a5159 · GitHub
[go: up one dir, main page]

Skip to content

Commit 68a5159

Browse files
authored
adding support for 'getWorkbookPdf' endpoint of REST API (tableau#376)
1 parent 5a35d6a commit 68a5159

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

tableauserverclient/models/workbook_item.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def __init__(self, project_id, name=None, show_tabs=False):
1414
self._created_at = None
1515
self._id = None
1616
self._initial_tags = set()
17+
self._pdf = None
1718
self._preview_image = None
1819
self._project_name = None
1920
self._size = None
@@ -45,6 +46,13 @@ def created_at(self):
4546
def id(self):
4647
return self._id
4748

49+
@property
50+
def pdf(self):
51+
if self._pdf is None:
52+
error = "Workbook item must be populated with its pdf first."
53+
raise UnpopulatedPropertyError(error)
54+
return self._pdf()
55+
4856
@property
4957
def preview_image(self):
5058
if self._preview_image is None:
@@ -105,6 +113,9 @@ def _set_connections(self, connections):
105113
def _set_views(self, views):
106114
self._views = views
107115

116+
def _set_pdf(self, pdf):
117+
self._pdf = pdf
118+
108119
def _set_preview_image(self, preview_image):
109120
self._preview_image = preview_image
110121

tableauserverclient/server/endpoint/workbooks_endpoint.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,25 @@ def _get_workbook_connections(self, workbook_item, req_options=None):
178178
connections = ConnectionItem.from_response(server_response.content, self.parent_srv.namespace)
179179
return connections
180180

181+
# Get the pdf of the entire workbook if its tabs are enabled, pdf of the default view if its tabs are disabled
182+
@api(version="3.4")
183+
def populate_pdf(self, workbook_item, req_options=None):
184+
if not workbook_item.id:
185+
error = "Workbook item missing ID."
186+
raise MissingRequiredFieldError(error)
187+
188+
def pdf_fetcher():
189+
return self._get_wb_pdf(workbook_item, req_options)
190+
191+
workbook_item._set_pdf(pdf_fetcher)
192+
logger.info("Populated pdf for workbook (ID: {0})".format(workbook_item.id))
193+
194+
def _get_wb_pdf(self, workbook_item, req_options):
195+
url = "{0}/{1}/pdf".format(self.baseurl, workbook_item.id)
196+
server_response = self.get_request(url, req_options)
197+
pdf = server_response.content
198+
return pdf
199+
181200
# Get preview image of workbook
182201
@api(version="2.0")
183202
def populate_preview_image(self, workbook_item):

test/test_workbook.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
GET_EMPTY_XML = os.path.join(TEST_ASSET_DIR, 'workbook_get_empty.xml')
1515
GET_XML = os.path.join(TEST_ASSET_DIR, 'workbook_get.xml')
1616
POPULATE_CONNECTIONS_XML = os.path.join(TEST_ASSET_DIR, 'workbook_populate_connections.xml')
17+
POPULATE_PDF = os.path.join(TEST_ASSET_DIR, 'populate_pdf.pdf')
1718
POPULATE_PREVIEW_IMAGE = os.path.join(TEST_ASSET_DIR, 'RESTAPISample Image.png')
1819
POPULATE_VIEWS_XML = os.path.join(TEST_ASSET_DIR, 'workbook_populate_views.xml')
1920
POPULATE_VIEWS_USAGE_XML = os.path.join(TEST_ASSET_DIR, 'workbook_populate_views_usage.xml')
@@ -271,6 +272,24 @@ def test_populate_connections_missing_id(self):
271272
self.server.workbooks.populate_connections,
272273
single_workbook)
273274

275+
def test_populate_pdf(self):
276+
self.server.version = "3.4"
277+
self.baseurl = self.server.workbooks.baseurl
278+
with open(POPULATE_PDF, "rb") as f:
279+
response = f.read()
280+
with requests_mock.mock() as m:
281+
m.get(self.baseurl + "/1f951daf-4061-451a-9df1-69 8AD7 a8062664f2/pdf?type=a5&orientation=landscape",
282+
content=response)
283+
single_workbook = TSC.WorkbookItem('test')
284+
single_workbook._id = '1f951daf-4061-451a-9df1-69a8062664f2'
285+
286+
type = TSC.PDFRequestOptions.PageType.A5
287+
orientation = TSC.PDFRequestOptions.Orientation.Landscape
288+
req_option = TSC.PDFRequestOptions(type, orientation)
289+
290+
self.server.workbooks.populate_pdf(single_workbook, req_option)
291+
self.assertEqual(response, single_workbook.pdf)
292+
274293
def test_populate_preview_image(self):
275294
with open(POPULATE_PREVIEW_IMAGE, 'rb') as f:
276295
response = f.read()

0 commit comments

Comments
 (0)
0