Skip to content

Commit 0efd735

Browse files
authored
Adding project permissions handling for databases, tables and virtual connections (#1482)
1 parent c6dabdd commit 0efd735

2 files changed

Lines changed: 66 additions & 14 deletions

File tree

tableauserverclient/models/project_item.py

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010

1111
class ProjectItem:
12+
ERROR_MSG = "Project item must be populated with permissions first."
13+
1214
class ContentPermissions:
1315
LockedToProject: str = "LockedToProject"
1416
ManagedByOwner: str = "ManagedByOwner"
@@ -43,6 +45,9 @@ def __init__(
4345
self._default_lens_permissions = None
4446
self._default_datarole_permissions = None
4547
self._default_metric_permissions = None
48+
self._default_virtualconnection_permissions = None
49+
self._default_database_permissions = None
50+
self._default_table_permissions = None
4651

4752
@property
4853
def content_permissions(self):
@@ -56,52 +61,63 @@ def content_permissions(self, value: Optional[str]) -> None:
5661
@property
5762
def permissions(self):
5863
if self._permissions is None:
59-
error = "Project item must be populated with permissions first."
60-
raise UnpopulatedPropertyError(error)
64+
raise UnpopulatedPropertyError(self.ERROR_MSG)
6165
return self._permissions()
6266

6367
@property
6468
def default_datasource_permissions(self):
6569
if self._default_datasource_permissions is None:
66-
error = "Project item must be populated with permissions first."
67-
raise UnpopulatedPropertyError(error)
70+
raise UnpopulatedPropertyError(self.ERROR_MSG)
6871
return self._default_datasource_permissions()
6972

7073
@property
7174
def default_workbook_permissions(self):
7275
if self._default_workbook_permissions is None:
73-
error = "Project item must be populated with permissions first."
74-
raise UnpopulatedPropertyError(error)
76+
raise UnpopulatedPropertyError(self.ERROR_MSG)
7577
return self._default_workbook_permissions()
7678

7779
@property
7880
def default_flow_permissions(self):
7981
if self._default_flow_permissions is None:
80-
error = "Project item must be populated with permissions first."
81-
raise UnpopulatedPropertyError(error)
82+
raise UnpopulatedPropertyError(self.ERROR_MSG)
8283
return self._default_flow_permissions()
8384

8485
@property
8586
def default_lens_permissions(self):
8687
if self._default_lens_permissions is None:
87-
error = "Project item must be populated with permissions first."
88-
raise UnpopulatedPropertyError(error)
88+
raise UnpopulatedPropertyError(self.ERROR_MSG)
8989
return self._default_lens_permissions()
9090

9191
@property
9292
def default_datarole_permissions(self):
9393
if self._default_datarole_permissions is None:
94-
error = "Project item must be populated with permissions first."
95-
raise UnpopulatedPropertyError(error)
94+
raise UnpopulatedPropertyError(self.ERROR_MSG)
9695
return self._default_datarole_permissions()
9796

9897
@property
9998
def default_metric_permissions(self):
10099
if self._default_metric_permissions is None:
101-
error = "Project item must be populated with permissions first."
102-
raise UnpopulatedPropertyError(error)
100+
raise UnpopulatedPropertyError(self.ERROR_MSG)
103101
return self._default_metric_permissions()
104102

103+
@property
104+
def default_virtualconnection_permissions(self):
105+
if self._default_virtualconnection_permissions is None:
106+
raise UnpopulatedPropertyError(self.ERROR_MSG)
107+
return self._default_virtualconnection_permissions()
108+
109+
@property
110+
def default_database_permissions(self):
111+
if self._default_database_permissions is None:
112+
raise UnpopulatedPropertyError(self.ERROR_MSG)
113+
return self._default_database_permissions()
114+
115+
@property
116+
def default_table_permissions(self):
117+
if self._default_table_permissions is None:
118+
raise UnpopulatedPropertyError(self.ERROR_MSG)
119+
return self._default_table_permissions()
120+
105121
@property
106122
def id(self) -> Optional[str]:
107123
return self._id

tableauserverclient/server/endpoint/projects_endpoint.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,18 @@ def populate_flow_default_permissions(self, item):
109109
def populate_lens_default_permissions(self, item):
110110
self._default_permissions.populate_default_permissions(item, Resource.Lens)
111111

112+
@api(version="3.23")
113+
def populate_virtualconnection_default_permissions(self, item):
114+
self._default_permissions.populate_default_permissions(item, Resource.VirtualConnection)
115+
116+
@api(version="3.23")
117+
def populate_database_default_permissions(self, item):
118+
self._default_permissions.populate_default_permissions(item, Resource.Database)
119+
120+
@api(version="3.23")
121+
def populate_table_default_permissions(self, item):
122+
self._default_permissions.populate_default_permissions(item, Resource.Table)
123+
112124
@api(version="2.1")
113125
def update_workbook_default_permissions(self, item, rules):
114126
return self._default_permissions.update_default_permissions(item, rules, Resource.Workbook)
@@ -133,6 +145,18 @@ def update_flow_default_permissions(self, item, rules):
133145
def update_lens_default_permissions(self, item, rules):
134146
return self._default_permissions.update_default_permissions(item, rules, Resource.Lens)
135147

148+
@api(version="3.23")
149+
def update_virtualconnection_default_permissions(self, item, rules):
150+
return self._default_permissions.update_default_permissions(item, rules, Resource.VirtualConnection)
151+
152+
@api(version="3.23")
153+
def update_database_default_permissions(self, item, rules):
154+
return self._default_permissions.update_default_permissions(item, rules, Resource.Database)
155+
156+
@api(version="3.23")
157+
def update_table_default_permissions(self, item, rules):
158+
return self._default_permissions.update_default_permissions(item, rules, Resource.Table)
159+
136160
@api(version="2.1")
137161
def delete_workbook_default_permissions(self, item, rule):
138162
self._default_permissions.delete_default_permission(item, rule, Resource.Workbook)
@@ -157,6 +181,18 @@ def delete_flow_default_permissions(self, item, rule):
157181
def delete_lens_default_permissions(self, item, rule):
158182
self._default_permissions.delete_default_permission(item, rule, Resource.Lens)
159183

184+
@api(version="3.23")
185+
def delete_virtualconnection_default_permissions(self, item, rule):
186+
self._default_permissions.delete_default_permission(item, rule, Resource.VirtualConnection)
187+
188+
@api(version="3.23")
189+
def delete_database_default_permissions(self, item, rule):
190+
self._default_permissions.delete_default_permission(item, rule, Resource.Database)
191+
192+
@api(version="3.23")
193+
def delete_table_default_permissions(self, item, rule):
194+
self._default_permissions.delete_default_permission(item, rule, Resource.Table)
195+
160196
def filter(self, *invalid, page_size: Optional[int] = None, **kwargs) -> QuerySet[ProjectItem]:
161197
"""
162198
Queries the Tableau Server for items using the specified filters. Page

0 commit comments

Comments
 (0)