8000 Adding multi-ds support to sample code · SnarkyPapi/server-client-python@ad79622 · GitHub
[go: up one dir, main page]

Skip to content

Commit ad79622

Browse files
author
Mariano Teixeira
committed
Adding multi-ds support to sample code
1 parent 1a5efa2 commit ad79622

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

tableauserverclient/server/endpoint/datasources_endpoint.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def update(self, datasource_item):
116116

117117
# Publish datasource
118118
@api(version="2.0")
119-
def publish(self, datasource_item, file_path, mode, connection_credentials=None):
119+
def publish(self, datasource_item, file_path, mode, connections=None):
120120
if not os.path.isfile(file_path):
121121
error = "File path does not lead to an existing file."
122122
raise IOError(error)
@@ -145,15 +145,15 @@ def publish(self, datasource_item, file_path, mode, connection_credentials=None)
145145
upload_session_id = Fileuploads.upload_chunks(self.parent_srv, file_path)
146146
url = "{0}&uploadSessionId={1}".format(url, upload_session_id)
147147
xml_request, content_type = RequestFactory.Datasource.publish_req_chunked(datasource_item,
148-
connection_credentials)
148+
connections)
149149
else:
150150
logger.info('Publishing {0} to server'.format(filename))
151151
with open(file_path, 'rb') as f:
152152
file_contents = f.read()
153153
xml_request, content_type = RequestFactory.Datasource.publish_req(datasource_item,
154154
filename,
155155
file_contents,
156-
connection_credentials)
156+
connections)
157157
server_response = self.post_request(url, xml_request, content_type)
158158
new_datasource = DatasourceItem.from_response(server_response.content)[0]
159159
logger.info('Published {0} (ID: {1})'.format(filename, new_datasource.id))

tableauserverclient/server/request_factory.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -278,22 +278,30 @@ def add_req(self, user_item):
278278

279279

280280
class WorkbookRequest(object):
281-
def _generate_xml(self, workbook_item, connection_credentials=None):
281+
def _generate_xml(self, workbook_item, connections=None):
282282
xml_request = ET.Element('tsRequest')
283283
workbook_element = ET.SubElement(xml_request, 'workbook')
284284
workbook_element.attrib['name'] = workbook_item.name
285285
if workbook_item.show_tabs:
286286
workbook_element.attrib['showTabs'] = str(workbook_item.show_tabs).lower()
287287
project_element = ET.SubElement(workbook_element, 'project')
288288
project_element.attrib['id'] = workbook_item.project_id
289-
if connection_credentials:
290-
credentials_element = ET.SubElement(workbook_element, 'connectionCredentials')
291-
credentials_element.attrib['name'] = connection_credentials.name
292-
credentials_element.attrib['password'] = connection_credentials.password
293-
credentials_element.attrib['embed'] = 'true' if connection_credentials.embed else 'false'
294-
295-
if connection_credentials.oauth:
296-
credentials_element.attrib['oAuth'] = 'true'
289+
if connections is not None:
290+
connections_element = ET.SubElement(workbook_element, 'connections')
291+
for connection in connections:
292+
if connection:
293+
connection_element = ET.SubElement(connections_element, 'connection')
294+
connection_element.attrib['serverAddress'] = connection.server_address
295+
if connection.server_port:
296+
connection_element.attrib['serverPort'] = connection.server_port
297+
if connection.connection_credentials:
298+
connection_credentials = connection.connection_credentials
299+
credentials_element = ET.SubElement(connection_element, 'connectionCredentials')
300+
credentials_element.attrib['name'] = connection_credentials.name
301+
credentials_element.attrib['password'] = connection_credentials.password
302+
credentials_element.attrib['embed'] = 'true' if connection_credentials.embed else 'false'
303+
if connection_credentials.oauth:
304+
credentials_element.attrib['oAuth'] = 'true'
297305
return ET.tostring(xml_request)
298306

299307
def update_req(self, workbook_item):
@@ -309,15 +317,15 @@ def update_req(self, workbook_item):
309317
owner_element.attrib['id'] = workbook_item.owner_id
310318
return ET.tostring(xml_request)
311319

312-
def publish_req(self, workbook_item, filename, file_contents, connection_credentials=None):
313-
xml_request = self._generate_xml(workbook_item, connection_credentials)
320+
def publish_req(self, workbook_item, filename, file_contents, connections=None):
321+
xml_request = self._generate_xml(workbook_item, connections)
314322

315323
parts = {'request_payload': ('', xml_request, 'text/xml'),
316324
'tableau_workbook': (filename, file_contents, 'application/octet-stream')}
317325
return _add_multipart(parts)
318326

319-
def publish_req_chunked(self, workbook_item, connection_credentials=None):
320-
xml_request = self._generate_xml(workbook_item, connection_credentials)
327+
def publish_req_chunked(self, workbook_item, connections=None):
328+
xml_request = self._generate_xml(workbook_item, connections)
321329

322330
parts = {'request_payload': ('', xml_request, 'text/xml')}
323331
return _add_multipart(parts)

0 commit comments

Comments
 (0)
0