8000 Add caption support for datasources (#99) · tableau/document-api-python@cb0de80 · GitHub
[go: up one dir, main page]

Skip to content

Commit cb0de80

Browse files
Russell Hayt8y8
Russell Hay
authored andcommitted
Add caption support for datasources (#99)
* Add caption support for datasources * fix a pep8 issue E303 * Add ability to remove the caption using del
1 parent 94d1f82 commit cb0de80

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

tableaudocumentapi/datasource.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ def __init__(self, dsxml, filename=None):
137137
self._name = self._datasourceXML.get('name') or self._datasourceXML.get(
138138
'formatted-name') # TDS files don't have a name attribute
139139
self._version = self._datasourceXML.get('version')
140+
self._caption = self._datasourceXML.get('caption', '')
140141
self._connection_parser = ConnectionParser(
141142
self._datasourceXML, version=self._version)
142143
self._connections = self._connection_parser.get_connections()
@@ -207,6 +208,20 @@ def name(self):
207208
def version(self):
208209
return self._version
209210

211+
@property
212+
def caption(self):
213+
return self._caption
214+
215+
@caption.setter
216+
def caption(self, value):
217+
self._datasourceXML.set('caption', value)
218+
self._caption = value
219+
220+
@caption.deleter
221+
def caption(self):
222+
del self._datasourceXML.attrib['caption']
223+
self._caption = ''
224+
210225
###########
211226
# connections
212227
###########

test/assets/datasource_test.tds

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version='1.0' encoding='utf-8' ?>
2-
<datasource formatted-name='postgres.1of3kl00aoax5d1a1ejma1397430' inline='true' source-platform='mac' version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'>
2+
<datasource caption='foo' formatted-name='postgres.1of3kl00aoax5d1a1ejma1397430' inline='true' source-platform='mac'
3+
version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'>
34
<repository-location />
45
<connection authentication='username-password' class='postgres' dbname='TestV1' odbc-native-protocol='yes' port='5432' server='postgres91.test.tsi.lan' username='test'>
56
<relation name='xy' table='[public].[xy]' type='table' />

test/test_datasource.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
import unittest
1+
import os
22
import os.path
3+
import shutil
4+
import tempfile
5+
import unittest
6+
37

48
from tableaudocumentapi import Datasource, Workbook
59

@@ -22,6 +26,19 @@ class DataSourceFieldsTDS(unittest.TestCase):
2226

2327
def setUp(self):
2428
self.ds = Datasource.from_file(TEST_TDS_FILE)
29+
self.to_delete = set()
30+
31+
def cleanUp(self):
32+
for path in self.to_delete:
33+
if os.path.isdir(path):
34+
shutil.rmtree(path, ignore_errors=True)
35+
elif os.path.isfile(path):
36+
os.unlink(path)
37+
38+
def get_temp_file(self, filename):
39+
tempdir = tempfile.mkdtemp('tda-datasource')
40+
self.to_delete.add(tempdir)
41+
return os.path.join(tempdir, filename)
2542

2643
def test_datasource_returns_correct_fields(self):
2744
self.assertIsNotNone(self.ds.fields)
@@ -63,6 +80,30 @@ def test_datasource_field_description(self):
6380
self.assertIsNotNone(actual)
6481
self.assertTrue(u'muted gray' in actual)
6582

83+
def test_datasource_caption(self):
84+
actual = self.ds.caption
85+
self.assertIsNotNone(actual)
86+
self.assertEqual(actual, 'foo')
87+
88+
def test_datasource_can_set_caption(self):
89+
filename = self.get_temp_file('test_datasource_can_set_caption')
90+
self.ds.caption = 'bar'
91+
self.ds.save_as(filename)
92+
93+
actual = Datasource.from_file(filename)
94+
self.assertIsNotNone(actual)
95+
self.assertIsNotNone(actual.caption)
96+
self.assertEqual(actual.caption, 'bar')
97+
98+
def test_datasource_can_remove_caption(self):
99+
filename = self.get_temp_file('test_datasource_can_remove_caption')
100+
del self.ds.caption
101+
self.ds.save_as(filename)
102+
103+
actual = Datasource.from_file(filename)
104+
self.assertIsNotNone(actual)
105+
self.assertEqual(actual.caption, '')
106+
66107
def test_datasource_clear_repository_location(self):
67108
filename = os.path.join(TEST_ASSET_DIR, 'clear-repository-test.tds')
68109

0 commit comments

Comments
 (0)
0