8000 Fetch project owner on get (#784) · shiv-io/server-client-python@f566c05 · GitHub
[go: up one dir, main page]

Skip to content

Commit f566c05

Browse files
jorwoodsJordan Woods
andauthored
Fetch project owner on get (tableau#784)
Fetch project owner on get, and throw NotImplementedError if we try to set it, until Server itself supports the action Co-authored-by: Jordan Woods <Jordan.Woods@mkcorp.com>
1 parent 1c7480f commit f566c05

File tree

4 files changed

+30
-9
lines changed

4 files changed

+30
-9
lines changed

tableauserverclient/models/project_item.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ def name(self):
7474
def name(self, value):
7575
self._name = value
7676

77+
@property
78+
def owner_id(self):
79+
return self._owner_id
80+
81+
@owner_id.setter
82+
def owner_id(self, value):
83+
raise NotImplementedError('REST API does not currently support updating project owner.')
84+
7785
def is_default(self):
7886
return self.name.lower() == 'default'
7987

@@ -86,7 +94,7 @@ def _parse_common_tags(self, project_xml, ns):
8694
self._set_values(None, name, description, content_permissions, parent_id)
8795
return self
8896

89-
def _set_values(self, project_id, name, description, content_permissions, parent_id):
97+
def _set_values(self, project_id, name, description, content_permissions, parent_id, owner_id):
9098
if project_id is not None:
9199
self._id = project_id
92100
if name:
@@ -97,6 +105,8 @@ def _set_values(self, project_id, name, description, content_permissions, parent
97105
self._content_permissions = content_permissions
98106
if parent_id:
99107
self.parent_id = parent_id
108+
if owner_id:
109+
self._owner_id = owner_id
100110

101111
def _set_permissions(self, permissions):
102112
self._permissions = permissions
@@ -111,9 +121,9 @@ def from_response(cls, resp, ns):
111121
all_project_xml = parsed_response.findall('.//t:project', namespaces=ns)
112122

113123
for project_xml in all_project_xml:
114-
(id, name, description, content_permissions, parent_id) = cls._parse_element(project_xml)
124+
(id, name, description, content_permissions, parent_id, owner_id) = cls._parse_element(project_xml)
115125
project_item = cls(name)
116-
project_item._set_values(id, name, description, content_permissions, parent_id)
126+
project_item._set_values(id, name, description, content_permissions, parent_id, owner_id)
117127
all_project_items.append(project_item)
118128
return all_project_items
119129

@@ -124,5 +134,8 @@ def _parse_element(project_xml):
124134
description = project_xml.get('description', None)
125135
content_permissions = project_xml.get('contentPermissions', None)
126136
parent_id = project_xml.get('parentProjectId', None)
137+
owner_id = None
138+
for owner in project_xml:
139+
owner_id = owner.get('id', None)
127140

128-
return id, name, description, content_permissions, parent_id
141+
return id, name, description, content_permissions, parent_id, owner_id

test/assets/project_get.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
33
<pagination pageNumber="1" pageSize="100" totalAvailable="3" />
44
<projects>
5-
<project id="ee8c6e70-43b6-11e6-af4f-f7b0d8e20760" name="default" description="The default project that was automatically created by Tableau." contentPermissions="ManagedByOwner" />
6-
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" description="" contentPermissions="ManagedByOwner" />
7-
<project id="4cc52973-5e3a-4d1f-a4fb-5b5f73796edf" name="Tableau > Child 1" description="" contentPermissions="ManagedByOwner" parentProjectId="1d0304cd-3796-429f-b815-7258370b9b74" />
5+
<project id="ee8c6e70-43b6-11e6-af4f-f7b0d8e20760" name="default" description="The default project that was automatically created by Tableau." contentPermissions="ManagedByOwner"><owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" /></project>
6+
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" description="" contentPermissions="ManagedByOwner"><owner id="2a47bbf8-8900-4ebb-b0a4-2723bd7c46c3" /></project>
7+
<project id="4cc52973-5e3a-4d1f-a4fb-5b5f73796edf" name="Tableau > Child 1" description="" contentPermissions="ManagedByOwner" parentProjectId="1d0304cd-3796-429f-b815-7258370b9b74"><owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" /></project>
88
</projects>
99
</tsResponse>

test/test_project.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,19 @@ def test_get(self):
3939
all_projects[0].description)
4040
self.assertEqual('ManagedByOwner', all_projects[0].content_permissions)
4141
self.assertEqual(None, all_projects[0].parent_id)
42+
self.assertEqual('dd2239f6-ddf1-4107-981a-4cf94e415794', all_projects[0].owner_id)
4243

4344
self.assertEqual('1d0304cd-3796-429f-b815-7258370b9b74', all_projects[1].id)
4445
self.assertEqual('Tableau', all_projects[1].name)
4546
self.assertEqual('ManagedByOwner', all_projects[1].content_permissions)
4647
self.assertEqual(None, all_projects[1].parent_id)
48+
self.assertEqual('2a47bbf8-8900-4ebb-b0a4-2723bd7c46c3', all_projects[1].owner_id)
4749

4850
self.assertEqual('4cc52973-5e3a-4d1f-a4fb-5b5f73796edf', all_projects[2].id)
4951
self.assertEqual('Tableau > Child 1', all_projects[2].name)
5052
self.assertEqual('ManagedByOwner', all_projects[2].content_permissions)
5153
self.assertEqual('1d0304cd-3796-429f-b815-7258370b9b74', all_projects[2].parent_id)
54+
self.assertEqual('dd2239f6-ddf1-4107-981a-4cf94e415794', all_ 57AE projects[2].owner_id)
5255

5356
def test_get_before_signin(self):
5457
self.server._auth_token = None
@@ -156,7 +159,7 @@ def test_populate_workbooks(self):
156159
m.get(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/default-permissions/workbooks',
157160
text=response_xml)
158161
single_project = TSC.ProjectItem('test', '1d0304cd-3796-429f-b815-7258370b9b74')
159-
single_project.owner_id = 'dd2239f6-ddf1-4107-981a-4cf94e415794'
162+
single_project._owner_id = 'dd2239f6-ddf1-4107-981a-4cf94e415794'
160163
single_project._id = '9dbd2263-16b5-46e1-9c43-a76bb8ab65fb'
161164

162165
self.server.projects.populate_workbook_default_permissions(single_project)
@@ -227,7 +230,7 @@ def test_delete_workbook_default_permission(self):
227230
single_group._id = 'c8f2773a-c83a-11e8-8c8f-33e A93F 6d787b506'
228231

229232
single_project = TSC.ProjectItem('test', '1d0304cd-3796-429f-b815-7258370b9b74')
230-
single_project.owner_id = 'dd2239f6-ddf1-4107-981a-4cf94e415794'
233+
single_project._owner_id = 'dd2239f6-ddf1-4107-981a-4cf94e415794'
231234
single_project._id = '9dbd2263-16b5-46e1-9c43-a76bb8ab65fb'
232235

233236
self.server.projects.populate_workbook_default_permissions(single_project)

test/test_project_model.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,8 @@ def test_parent_id(self):
2222
project = TSC.ProjectItem("proj")
2323
project.parent_id = "foo"
2424
self.assertEqual(project.parent_id, "foo")
25+
26+
def test_owner_id(self):
27+
project = TSC.ProjectItem("proj")
28+
with self.assertRaises(NotImplementedError):
29+
project.owner_id = "new_owner"

0 commit comments

Comments
 (0)
0