diff --git a/tableauserverclient/models/project_item.py b/tableauserverclient/models/project_item.py index d6aece83b..4cfbcb4e9 100644 --- a/tableauserverclient/models/project_item.py +++ b/tableauserverclient/models/project_item.py @@ -74,6 +74,14 @@ def name(self): def name(self, value): self._name = value + @property + def owner_id(self): + return self._owner_id + + @owner_id.setter + def owner_id(self, value): + raise NotImplementedError('REST API does not currently support updating project owner.') + def is_default(self): return self.name.lower() == 'default' @@ -86,7 +94,7 @@ def _parse_common_tags(self, project_xml, ns): self._set_values(None, name, description, content_permissions, parent_id) return self - def _set_values(self, project_id, name, description, content_permissions, parent_id): + def _set_values(self, project_id, name, description, content_permissions, parent_id, owner_id): if project_id is not None: self._id = project_id if name: @@ -97,6 +105,8 @@ def _set_values(self, project_id, name, description, content_permissions, parent self._content_permissions = content_permissions if parent_id: self.parent_id = parent_id + if owner_id: + self._owner_id = owner_id def _set_permissions(self, permissions): self._permissions = permissions @@ -111,9 +121,9 @@ def from_response(cls, resp, ns): all_project_xml = parsed_response.findall('.//t:project', namespaces=ns) for project_xml in all_project_xml: - (id, name, description, content_permissions, parent_id) = cls._parse_element(project_xml) + (id, name, description, content_permissions, parent_id, owner_id) = cls._parse_element(project_xml) project_item = cls(name) - project_item._set_values(id, name, description, content_permissions, parent_id) + project_item._set_values(id, name, description, content_permissions, parent_id, owner_id) all_project_items.append(project_item) return all_project_items @@ -124,5 +134,8 @@ def _parse_element(project_xml): description = project_xml.get('description', None) content_permissions = project_xml.get('contentPermissions', None) parent_id = project_xml.get('parentProjectId', None) + owner_id = None + for owner in project_xml: + owner_id = owner.get('id', None) - return id, name, description, content_permissions, parent_id + return id, name, description, content_permissions, parent_id, owner_id diff --git a/test/assets/project_get.xml b/test/assets/project_get.xml index 777412b30..7898c8c13 100644 --- a/test/assets/project_get.xml +++ b/test/assets/project_get.xml @@ -2,8 +2,8 @@ - - - + + + diff --git a/test/test_project.py b/test/test_project.py index 5e9869c6e..045f0a43e 100644 --- a/test/test_project.py +++ b/test/test_project.py @@ -39,16 +39,19 @@ def test_get(self): all_projects[0].description) self.assertEqual('ManagedByOwner', all_projects[0].content_permissions) self.assertEqual(None, all_projects[0].parent_id) + self.assertEqual('dd2239f6-ddf1-4107-981a-4cf94e415794', all_projects[0].owner_id) self.assertEqual('1d0304cd-3796-429f-b815-7258370b9b74', all_projects[1].id) self.assertEqual('Tableau', all_projects[1].name) self.assertEqual('ManagedByOwner', all_projects[1].content_permissions) self.assertEqual(None, all_projects[1].parent_id) + self.assertEqual('2a47bbf8-8900-4ebb-b0a4-2723bd7c46c3', all_projects[1].owner_id) self.assertEqual('4cc52973-5e3a-4d1f-a4fb-5b5f73796edf', all_projects[2].id) self.assertEqual('Tableau > Child 1', all_projects[2].name) self.assertEqual('ManagedByOwner', all_projects[2].content_permissions) self.assertEqual('1d0304cd-3796-429f-b815-7258370b9b74', all_projects[2].parent_id) + self.assertEqual('dd2239f6-ddf1-4107-981a-4cf94e415794', all_projects[2].owner_id) def test_get_before_signin(self): self.server._auth_token = None @@ -156,7 +159,7 @@ def test_populate_workbooks(self): m.get(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/default-permissions/workbooks', text=response_xml) single_project = TSC.ProjectItem('test', '1d0304cd-3796-429f-b815-7258370b9b74') - single_project.owner_id = 'dd2239f6-ddf1-4107-981a-4cf94e415794' + single_project._owner_id = 'dd2239f6-ddf1-4107-981a-4cf94e415794' single_project._id = '9dbd2263-16b5-46e1-9c43-a76bb8ab65fb' self.server.projects.populate_workbook_default_permissions(single_project) @@ -227,7 +230,7 @@ def test_delete_workbook_default_permission(self): single_group._id = 'c8f2773a-c83a-11e8-8c8f-33e6d787b506' single_project = TSC.ProjectItem('test', '1d0304cd-3796-429f-b815-7258370b9b74') - single_project.owner_id = 'dd2239f6-ddf1-4107-981a-4cf94e415794' + single_project._owner_id = 'dd2239f6-ddf1-4107-981a-4cf94e415794' single_project._id = '9dbd2263-16b5-46e1-9c43-a76bb8ab65fb' self.server.projects.populate_workbook_default_permissions(single_project) diff --git a/test/test_project_model.py b/test/test_project_model.py index 56e6c3d11..55cf20b26 100644 --- a/test/test_project_model.py +++ b/test/test_project_model.py @@ -22,3 +22,8 @@ def test_parent_id(self): project = TSC.ProjectItem("proj") project.parent_id = "foo" self.assertEqual(project.parent_id, "foo") + + def test_owner_id(self): + project = TSC.ProjectItem("proj") + with self.assertRaises(NotImplementedError): + project.owner_id = "new_owner"