33import os
44import xml .etree .ElementTree as ET
55
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>'''
2314
2415TABLEAU_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>'''
2516
2617TABLEAU_CONNECTION_XML = ET .fromstring (
2718 '''<connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''></connection>''' )
2819
29-
3020class HelperMethodTests (unittest .TestCase ):
3121
3222 def test_is_valid_file_with_valid_inputs (self ):
@@ -39,13 +29,23 @@ def test_is_valid_file_with_invalid_inputs(self):
3929 self .assertFalse (Workbook ._is_valid_file ('file1.tds2' ))
4030 self .assertFalse (Workbook ._is_valid_file ('file2.twb3' ))
4131
32+
4233class ConnectionParserTests (unittest .TestCase ):
4334
4435 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+
4641
4742 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+
4949
5050class ConnectionModelTests (unittest .TestCase ):
5151
@@ -122,33 +122,35 @@ def test_can_update_datasource_connection_and_save(self):
122122 new_wb = Workbook (self .workbook_file .name )
123123 self .assertEqual (new_wb .datasources [0 ].connection .dbname , 'newdb.test.tsi.lan' )
124124
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'
131125
132- original_wb . save ()
126+ class WorkbookModelV10Tests ( unittest . TestCase ):
133127
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 )
136132
137- temp .close ()
138- os .unlink (temp .name )
133+ def tearDown (self ):
134+ self .workbook_file .close ()
135+ os .unlink (self .workbook_file .name )
139136
140137 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 )
145139 self .assertEqual (len (wb .datasources ), 1 )
146140 self .assertEqual (len (wb .datasources [0 ].connection ), 2 )
147141 self .assertIsInstance (wb .datasources [0 ].connection , list )
148142 self .assertIsInstance (wb .datasources [0 ], Datasource )
149143 self .assertEqual (wb .datasources [0 ].name ,
150144 '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' )
152154
153155if __name__ == '__main__' :
154156 unittest .main ()
0 commit comments