6
6
import xml .etree .ElementTree as ET
7
7
from tableaudocumentapi import Connection
8
8
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
+
9
29
class Datasource (object ):
10
30
"""
11
31
A class for writing datasources to Tableau files.
@@ -27,10 +47,8 @@ def __init__(self, dsxml, filename=None):
27
47
self ._datasourceTree = ET .ElementTree (self ._datasourceXML )
28
48
self ._name = self ._datasourceXML .get ('name' ) or self ._datasourceXML .get ('formatted-name' ) # TDS files don't have a name attribute
29
49
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 ()
34
52
35
53
@classmethod
36
54
def from_file (cls , filename ):
0 commit comments