@@ -25,6 +25,25 @@ def wrapper(self, *args, **kwargs):
25
25
return wrapper
26
26
27
27
28
+ def _add_connections_element (connections_element , <
6851
span class=pl-s1>connection):
29
+ connection_element = ET .SubElement (connections_element , 'connection' )
30
+ connection_element .attrib ['serverAddress' ] = connection .server_address
31
+ if connection .server_port :
32
+ connection_element .attrib ['serverPort' ] = connection .server_port
33
+ if connection .connection_credentials :
34
+ connection_credentials = connection .connection_credentials
35
+ _add_credentials_element (connection_element , connection_credentials )
36
+
37
+
38
+ def _add_credentials_element (parent_element , connection_credentials ):
39
+ credentials_element = ET .SubElement (parent_element , 'connectionCredentials' )
40
+ credentials_element .attrib ['name' ] = connection_credentials .name
41
+ credentials_element .attrib ['password' ] = connection_credentials .password
42
+ credentials_element .attrib ['embed' ] = 'true' if connection_credentials .embed else 'false'
43
+ if connection_credentials .oauth :
44
+ credentials_element .attrib ['oAuth' ] = 'true'
45
+
46
+
28
47
class AuthRequest (object ):
29
48
def signin_req (self , auth_item ):
30
49
xml_request = ET .Element ('tsRequest' )
@@ -40,20 +59,23 @@ def signin_req(self, auth_item):
40
59
41
60
42
61
class DatasourceRequest (object ):
43
- def _generate_xml (self , datasource_item , connection_credentials = None ):
62
+ def _generate_xml (self , datasource_item , connection_credentials = None , connections = None ):
44
63
xml_request = ET .Element ('tsRequest' )
45
64
datasource_element = ET .SubElement (xml_request , 'datasource' )
46
65
datasource_element .attrib ['name' ] = datasource_item .name
47
66
project_element = ET .SubElement (datasource_element , 'project' )
48
67
project_element .attrib ['id' ] = datasource_item .project_id
49
- if connection_credentials :
50
- credentials_element = ET .SubElement (datasource_element , 'connectionCredentials' )
51
- credentials_element .attrib ['name' ] = connection_credentials .name
52
- credentials_element .attrib ['password' ] = connection_credentials .password
53
- credentials_element .attrib ['embed' ] = 'true' if connection_credentials .embed else 'false'
54
-
55
- if connection_credentials .oauth :
56
- credentials_element .attrib ['oAuth' ] = 'true'
68
+
69
+ if connection_credentials is not None and connections is not None :
70
+ raise RuntimeError ('You cannot set both `connections` and `connection_credentials`' )
71
+
72
+ if connection_credentials is not None :
73
+ _add_credentials_element (datasource_element , connection_credentials )
74
+
75
+ if connections is not None :
76
+ connections_element = ET .SubElement (datasource_element , 'connections' )
77
+ for connection in connections :
78
+ _add_connections_element (connections_element , connection )
57
79
return ET .tostring (xml_request )
58
80
59
81
def update_req (self , datasource_item ):
@@ -73,15 +95,15 @@ def update_req(self, datasource_item):
73
95
74
96
return ET .tostring (xml_request )
75
97
76
- def publish_req (self , datasource_item , filename , file_contents , connection_credentials = None ):
77
- xml_request = self ._generate_xml (datasource_item , connection_credentials )
98
+ def publish_req (self , datasource_item , filename , file_contents , connection_credentials = None , connections = None ):
99
+ xml_request = self ._generate_xml (datasource_item , connection_credentials , connections )
78
100
79
101
parts = {'request_payload' : ('' , xml_request , 'text/xml' ),
80
102
'tableau_datasource' : (filename , file_contents , 'application/octet-stream' )}
81
103
return _add_multipart (parts )
82
104
83
105
def publish_req_chunked (self , datasource_item , connection_credentials = None ):
84
- xml_request = self ._generate_xml (datasource_item , connection_credentials )
106
+ xml_request = self ._generate_xml (datasource_item , connection_credentials , connections )
85
107
86
108
parts = {'request_payload' : ('' , xml_request , 'text/xml' )}
87
109
return _add_multipart (parts )
@@ -324,22 +346,25 @@ def add_req(self, user_item):
324
346
325
347
326
348
class WorkbookRequest (object ):
327
- def _generate_xml (self , workbook_item , connection_credentials = None ):
349
+ def _generate_xml (self , workbook_item , connection_credentials = None , connections = None ):
328
350
xml_request = ET .Element ('tsRequest' )
329
351
workbook_element = ET .SubElement (xml_request , 'workbook' )
330
352
workbook_element .attrib ['name' ] = workbook_item .name
331
353
if workbook_item .show_tabs :
332
354
workbook_element .attrib ['showTabs' ] = str (workbook_item .show_tabs ).lower ()
333
355
project_element = ET .SubElement (workbook_element , 'project' )
334
356
project_element .attrib ['id' ] = workbook_item .project_id
335
- if connection_credentials :
336
- credentials_element = ET .SubElement (workbook_element , 'connectionCredentials' )
337
- credentials_element .attrib ['name' ] = connection_credentials .name
338
- credentials_element .attrib ['password' ] = connection_credentials .password
339
- credentials_element .attrib ['embed' ] = 'true' if connection_credentials .embed else 'false'
340
-
341
- if connection_credentials .oauth :
342
- credentials_element .attrib ['oAuth' ] = 'true'
357
+
358
+ if connection_credentials is not None and connections is not None :
359
+ raise RuntimeError ('You cannot set both `connections` and `connection_credentials`' )
360
+
361
+ if connection_credentials is not None :
362
+ _add_credentials_element (workbook_element , connection_credentials )
363
+
364
+ if connections is not None :
365
+ connections_element = ET .SubElement (workbook_element , 'connections' )
366
+ for connection in connections :
367
+ _add_connections_element (connections_element , connection )
343
368
return ET .tostring (xml_request )
344
369
345
370
def update_req (self , workbook_item ):
@@ -357,15 +382,19 @@ def update_req(self, workbook_item):
357
382
owner_element .attrib ['id' ] = workbook_item .owner_id
358
383
return ET .tostring (xml_request )
359
384
360
- def publish_req (self , workbook_item , filename , file_contents , connection_credentials = None ):
361
- xml_request = self ._generate_xml (workbook_item , connection_credentials )
385
+ def publish_req (self , workbook_item , filename , file_contents , connection_credentials = None , connections = None ):
386
+ xml_request = self ._generate_xml (workbook_item ,
387
+ connection_credentials = connection_credentials ,
388
+ connections = connections )
362
389
363
390
parts = {'request_payload' : ('' , xml_request , 'text/xml' ),
364
391
'tableau_workbook' : (filename , file_contents , 'application/octet-stream' )}
365
392
return _add_multipart (parts )
366
393
367
- def publish_req_chunked (self , workbook_item , connection_credentials = None ):
368
- xml_request = self ._generate_xml (workbook_item , connection_credentials )
394
+ def publish_req_chunked (self , workbook_item , connections = None ):
395
+ xml_request = self ._generate_xml (workbook_item ,
396
+ connection_credentials = connection_credentials ,
397
+ connections = connections )
369
398
370
399
parts = {'request_payload' : ('' , xml_request , 'text/xml' )}
371
400
return _add_multipart (parts )
0 commit comments