3
3
import os
4
4
import xml .etree .ElementTree as ET
5
5
6
- from tableaudocumentapi import Workbook , Datasource , Connection
7
-
8
- TABLEAU_93_WORKBOOK = '''<?xml version='1.0' encoding='utf-8' ?>
9
- <workbook source-build='9.3.1 (9300.16.0510.0100)' source-platform='mac' version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'>
10
- <datasources>
11
- <datasource caption='xy (TestV1)' inline='true' name='sqlserver.17u3bqc16tjtxn14e2hxh19tyvpo' version='9.3'>
12
- <connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''>
13
- </connection>
14
- </datasource>
15
- </datasources>
16
- </workbook>'''
17
-
18
- TABLEAU_93_TDS = '''<?xml version='1.0' encoding='utf-8' ?>
19
- <datasource formatted-name='sqlserver.17u3bqc16tjtxn14e2hxh19tyvpo' inline='true' source-platform='mac' version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'>
20
- <connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''>
21
- </connection>
22
- </datasource>'''
6
+ from tableaudocumentapi import Workbook , Datasource , Connection , ConnectionParser
7
+
8
+
9
+ TABLEAU_93_WORKBOOK = '''<?xml version='1.0' encoding='utf-8' ?><workbook source-build='9.3.1 (9300.16.0510.0100)' source-platform='mac' version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'><datasources><datasource caption='xy (TestV1)' inline='true' name='sqlserver.17u3bqc16tjtxn14e2hxh19tyvpo' version='9.3'><connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''></connection></datasource></datasources></workbook>'''
10
+
11
+ TABLEAU_93_TDS = '''<?xml version='1.0' encoding='utf-8' ?><datasource formatted-name='sqlserver.17u3bqc16tjtxn14e2hxh19tyvpo' inline='true' source-platform='mac' version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'><connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''></connection></datasource>'''
12
+
13
+ TABLEAU_10_TDS = '''<?xml version='1.0' encoding='utf-8' ?><datasources><datasource caption='xy+ (Multiple Connections)' inline='true' name='federated.1s4nxn20cywkdv13ql0yk0g1mpdx' version='10.0'><connection class='federated'><named-connections><named-connection caption='mysql55.test.tsi.lan' name='mysql.1ewmkrw0mtgsev1dnurma1blii4x'><connection class='mysql' dbname='testv1' odbc-native-protocol='yes' port='3306' server='mysql55.test.tsi.lan' source-charset='' username='test' /></named-connection><named-connection caption='mssql2012.test.tsi.lan' name='sqlserver.1erdwp01uqynlb14ul78p0haai2r'><connection authentication='sqlserver' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username='test' /></named-connection></named-connections></connection></datasource></datasources>'''
23
14
24
15
TABLEAU_10_WORKBOOK = '''<?xml version='1.0' encoding='utf-8' ?><workbook source-build='0.0.0 (0000.16.0510.1300)' source-platform='mac' version='10.0' xmlns:user='http://www.tableausoftware.com/xml/user'><datasources><datasource caption='xy+ (Multiple Connections)' inline='true' name='federated.1s4nxn20cywkdv13ql0yk0g1mpdx' version='10.0'><connection class='federated'><named-connections><named-connection caption='mysql55.test.tsi.lan' name='mysql.1ewmkrw0mtgsev1dnurma1blii4x'><connection class='mysql' dbname='testv1' odbc-native-protocol='yes' port='3306' server='mysql55.test.tsi.lan' source-charset='' username='test' /></named-connection><named-connection caption='mssql2012.test.tsi.lan' name='sqlserver.1erdwp01uqynlb14ul78p0haai2r'><connection authentication='sqlserver' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username='test' /></named-connection></named-connections></connection></datasource></datasources></workbook>'''
25
16
26
17
TABLEAU_CONNECTION_XML = ET .fromstring (
27
18
'''<connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''></connection>''' )
28
19
29
-
30
20
class HelperMethodTests (unittest .TestCase ):
31
21
32
22
def test_is_valid_file_with_valid_inputs (self ):
@@ -39,13 +29,23 @@ def test_is_valid_file_with_invalid_inputs(self):
39
29
self .assertFalse (Workbook ._is_valid_file ('file1.tds2' ))
40
30
self .assertFalse (Workbook ._is_valid_file ('file2.twb3' ))
41
31
32
+
42
33
class ConnectionParserTests (unittest .TestCase ):
43
34
44
35
def test_can_extract_legacy_connection (self ):
45
- pass
36
+ parser = ConnectionParser (ET .fromstring (TABLEAU_93_TDS ), '9.2' )
37
+ connection = parser .get_connections ()
38
+ self .assertIsInstance (connection , Connection )
39
+ self .assertEqual (connection .dbname , 'TestV1' )
40
+
46
41
47
42
def test_can_extract_federated_connections (self ):
48
- pass
43
+ parser = ConnectionParser (ET .fromstring (TABLEAU_10_TDS ), '10.0' )
44
+ connections = parser .get_connections ()
45
+ self .assertIsInstance (connections , list )
46
+ self .assertIsInstance (connections [0 ], Connection )
47
+ self .assertEqual (connections [0 ].dbname , 'testv1' )
48
+
49
49
50
50
class ConnectionModelTests (unittest .TestCase ):
51
51
@@ -122,33 +122,35 @@ def test_can_update_datasource_connection_and_save(self):
122
122
new_wb = Workbook (self .workbook_file .name )
123
123
self .assertEqual (new_wb .datasources [0 ].connection .dbname , 'newdb.test.tsi.lan' )
124
124
125
- def test_can_update_datasource_connection_and_saveV10 (self ):
126
- temp = io .FileIO ('v10test.twb' , 'w' )
127
- temp .write (TABLEAU_10_WORKBOOK .encode ())
128
- temp .seek (0 )
129
- original_wb = Workbook (temp .name )
130
- original_wb .datasources [0 ].connection [0 ].dbname = 'newdb.test.tsi.lan'
131
125
132
- original_wb . save ()
126
+ class WorkbookModelV10Tests ( unittest . TestCase ):
133
127
134
- new_wb = Workbook (temp .name )
135
- self .assertEqual (new_wb .datasources [0 ].connection [0 ].dbname , 'newdb.test.tsi.lan' )
128
+ def setUp (self ):
129
+ self .workbook_file = io .FileIO ('testv10.twb' , 'w' )
130
+ self .workbook_file .write (TABLEAU_10_WORKBOOK .encode ('utf8' ))
131
+ self .workbook_file .seek (0 )
136
132
137
- temp .close ()
138
- os .unlink (temp .name )
133
+ def tearDown (self ):
134
+ self .workbook_file .close ()
135
+ os .unlink (self .workbook_file .name )
139
136
140
137
def test_can_extract_datasourceV10 (self ):
141
- temp = io .FileIO ('v10test.twb' , 'w' )
142
- temp .write (TABLEAU_10_WORKBOOK .encode ())
143
- temp .seek (0 )
144
- wb = Workbook (temp .name )
138
+ wb = Workbook (self .workbook_file .name )
145
139
self .assertEqual (len (wb .datasources ), 1 )
146
140
self .assertEqual (len (wb .datasources [0 ].connection ), 2 )
147
141
self .assertIsInstance (wb .datasources [0 ].connection , list )
148
142
self .assertIsInstance (wb .datasources [0 ], Datasource )
149
143
self .assertEqual (wb .datasources [0 ].name ,
150
144
'federated.1s4nxn20cywkdv13ql0yk0g1mpdx' )
151
- temp .close ()
145
+
146
+ def test_can_update_datasource_connection_and_saveV10 (self ):
147
+ original_wb = Workbook (self .workbook_file .name )
148
+ original_wb .datasources [0 ].connection [0 ].dbname = 'newdb.test.tsi.lan'
149
+
150
+ original_wb .save ()
151
+
152
+ new_wb = Workbook (self .workbook_file .name )
153
+ self .assertEqual (new_wb .datasources [0 ].connection [0 ].dbname , 'newdb.test.tsi.lan' )
152
154
153
155
if __name__ == '__main__' :
154
156
unittest .main ()
0 commit comments