66import xml .etree .ElementTree as ET
77from tableaudocumentapi import Connection
88
9+ class ConnectionParser (object ):
10+
11+ def __init__ (self , datasource_xml , version ):
12+ self ._dsxml = datasource_xml
13+ self ._dsversion = version
14+
15+ def get_connections (self ):
16+ if float (self ._dsversion ) < 10 :
17+ connections = self ._extract_legacy_connection ()
18+ else :
19+ connections = self ._extract_federated_connections ()
20+ return connections
21+
22+ def _extract_federated_connections (self ):
23+ return list (map (Connection ,self ._dsxml .findall ('.//named-connections/named-connection/*' )))
24+
25+ def _extract_legacy_connection (self ):
26+ return Connection (self ._dsxml .find ('connection' ))
27+
28+
929class Datasource (object ):
1030 """
1131 A class for writing datasources to Tableau files.
@@ -27,10 +47,8 @@ def __init__(self, dsxml, filename=None):
2747 self ._datasourceTree = ET .ElementTree (self ._datasourceXML )
2848 self ._name = self ._datasourceXML .get ('name' ) or self ._datasourceXML .get ('formatted-name' ) # TDS files don't have a name attribute
2949 self ._version = self ._datasourceXML .get ('version' )
30- if self ._version == '10.0' :
31- self ._connection = list (map (Connection ,self ._datasourceXML .findall ('.//named-connections/named-connection/*' )))
32- else :
33- self ._connection = Connection (self ._datasourceXML .find ('connection' ))
50+ self ._connection_parser = ConnectionParser (self ._datasourceXML , version = self ._version )
51+ self ._connection = self ._connection_parser .get_connections ()
3452
3553 @classmethod
3654 def from_file (cls , filename ):
0 commit comments