8000 Fixing set default permissions for virtual connections (#1535) · KulykDmytro/server-client-python@9379c40 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9379c40

Browse files
authored
Fixing set default permissions for virtual connections (tableau#1535)
* Fixing setting default permissions for virtual connections * Adding tests
1 parent bdfecfb commit 9379c40

File tree

4 files changed

+144
-1
lines changed

4 files changed

+144
-1
lines changed

tableauserverclient/models/project_item.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def _set_permissions(self, permissions):
174174
self._permissions = permissions
175175

176176
def _set_default_permissions(self, permissions, content_type):
177-
attr = f"_default_{content_type}_permissions"
177+
attr = f"_default_{content_type}_permissions".lower()
178178
setattr(
179179
self,
180180
attr,
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<tsResponse xmlns="http://tableau.com/api"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api https://help.tableau.com/samples/en-us/rest_api/ts-api_3_23.xsd">
4+
<permissions>
5+
<project id="90f09c23-440a-44ee-857c-5744a51d5b08" name="Project3">
6+
<owner id="26183d16-82f7-4fcf-b163-0e607bf292bc"/>
7+
</project>
8+
<granteeCapabilities>
9+
<group id="c8f2773a-c83a-11e8-8c8f-33e6d787b506"/>
10+
<capabilities>
11+
<capability name="Read" mode="Allow"/>
12+
<capability name="Connect" mode="Allow"/>
13+
<capability name="ChangeHierarchy" mode="Deny"/>
14+
<capability name="Delete" mode="Deny"/>
15+
<capability name="ChangePermissions" mode="Deny"/>
16+
</capabilities>
17+
</granteeCapabilities>
18+
</permissions>
19+
</tsResponse>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<tsResponse xmlns="http://tableau.com/api"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api https://help.tableau.com/samples/en-us/rest_api/ts-api_3_23.xsd">
4+
<permissions>
5+
<project id="90f09c23-440a-44ee-857c-5744a51d5b08" name="Project3">
6+
<owner id="26183d16-82f7-4fcf-b163-0e607bf292bc"/>
7+
</project>
8+
<granteeCapabilities>
9+
<group id="c8f2773a-c83a-11e8-8c8f-33e6d787b506"/>
10+
<capabilities>
11+
<capability mode="Deny" name="Read"/>
12+
<capability mode="Allow" name="Delete"/>
13+
<capability mode="Allow" name="ChangeHierarchy"/>
14+
</capabilities>
15+
</granteeCapabilities>
16+
</permissions>
17+
</tsResponse>

test/test_project.py

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
POPULATE_PERMISSIONS_XML = "project_populate_permissions.xml"
1717
POPULATE_WORKBOOK_DEFAULT_PERMISSIONS_XML = "project_populate_workbook_default_permissions.xml"
1818
UPDATE_DATASOURCE_DEFAULT_PERMISSIONS_XML = "project_update_datasource_default_permissions.xml"
19+
POPULATE_VIRTUALCONNECTION_DEFAULT_PERMISSIONS_XML = "project_populate_virtualconnection_default_permissions.xml"
20+
UPDATE_VIRTUALCONNECTION_DEFAULT_PERMISSIONS_XML = "project_update_virtualconnection_default_permissions.xml"
1921

2022

2123
class ProjectTests(unittest.TestCase):
@@ -303,3 +305,108 @@ def test_delete_workbook_default_permission(self) -> None:
303305
m.delete(f"{self.baseurl}/{endpoint}/Delete/Deny", status_code=204)
304306
m.delete(f"{self.baseurl}/{endpoint}/ChangePermissions/Allow", status_code=204)
305307
self.server.projects.delete_workbook_default_permissions(item=single_project, rule=rules)
308+
309+
def test_populate_virtualconnection_default_permissions(self):
310+
response_xml = read_xml_asset(POPULATE_VIRTUALCONNECTION_DEFAULT_PERMISSIONS_XML)
311+
312+
self.server.version = "3.23"
313+
base_url = self.server.projects.baseurl
314+
315+
with requests_mock.mock() as m:
316+
m.get(
317+
base_url + "/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/default-permissions/virtualConnections",
318+
text=response_xml,
319+
)
320+
project = TSC.ProjectItem("test", "1d0304cd-3796-429f-b815-7258370b9b74")
321+
project._id = "9dbd2263-16b5-46e1-9c43-a76bb8ab65fb"
322+
323+
self.server.projects.populate_virtualconnection_default_permissions(project)
324+
permissions = project.default_virtualconnection_permissions
325+
326+
rule = permissions.pop()
327+
328+
self.assertEqual("c8f2773a-c83a-11e8-8c8f-33e6d787b506", rule.grantee.id)
329+
self.assertEqual("group", rule.grantee.tag_name)
330+
self.assertDictEqual(
331+
rule.capabilities,
332+
{
333+
TSC.Permission.Capability.Read: TSC.Permission.Mode.Allow,
334+
TSC.Permission.Capability.Connect: TSC.Permission.Mode.Allow,
335+
TSC.Permission.Capability.ChangeHierarchy: TSC.Permission.Mode.Deny,
336+
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Deny,
337+
TSC.Permission.Capability.ChangePermissions: TSC.Permission.Mode.Deny,
338+
},
339+
)
340+
341+
def test_update_virtualconnection_default_permissions(self):
342+
response_xml = read_xml_asset(UPDATE_VIRTUALCONNECTION_DEFAULT_PERMISSIONS_XML)
343+
344+
self.server.version = "3.23"
345+
base_url = self.server.projects.baseurl
346+
347+
with requests_mock.mock() as m:
348+
m.put(
349+
base_url + "/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/default-permissions/virtualConnections",
350+
text=response_xml,
351+
)
352+
project = TSC.ProjectItem("test", "1d0304cd-3796-429f-b815-7258370b9b74")
353+
project._id = "9dbd2263-16b5-46e1-9c43-a76bb8ab65fb"
354+
355+
group = TSC.GroupItem("test-group")
356+
group._id = "c8f2773a-c83a-11e8-8c8f-33e6d787b506"
357+
358+
capabilities = {
359+
TSC.Permission.Capability.ChangeHierarchy: TSC.Permission.Mode.Allow,
360+
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Allow,
361+
TSC.Permission.Capability.Read: TSC.Permission.Mode.Deny,
362+
}
363+
364+
rules = [TSC.PermissionsRule(GroupItem.as_reference(group.id), capabilities)]
365+
new_rules = self.server.projects.update_virtualconnection_default_permissions(project, rules)
366+
367+
rule = new_rules.pop()
368+
369+
self.assertEqual(group.id, rule.grantee.id)
370+
self.assertEqual("group", rule.grantee.tag_name)
371+
self.assertDictEqual(
372+
rule.capabilities,
373+
{
374+
TSC.Permission.Capability.ChangeHierarchy: TSC.Permission.Mode.Allow,
375+
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Allow,
376+
TSC.Permission.Capability.Read: TSC.Permission.Mode.Deny,
377+
},
378+
)
379+
380+
def test_delete_virtualconnection_default_permimssions(self):
381+
response_xml = read_xml_asset(POPULATE_VIRTUALCONNECTION_DEFAULT_PERMISSIONS_XML)
382+
383+
self.server.version = "3.23"
384+
base_url = self.server.projects.baseurl
385+
386+
with requests_mock.mock() as m:
387+
m.get(
388+
base_url + "/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/default-permissions/virtualConnections",
389+
text=response_xml,
390+
)
391+
392+
project = TSC.ProjectItem("test", "1d0304cd-3796-429f-b815-7258370b9b74")
393+
project._id = "9dbd2263-16b5-46e1-9c43-a76bb8ab65fb"
394+
395+
group = TSC.GroupItem("test-group")
396+
group._id = "c8f2773a-c83a-11e8-8c8f-33e6d787b506"
397+
398+
self.server.projects.populate_virtualconnection_default_permissions(project)
399+
permissions = project.default_virtualconnection_permissions
400+
401+
del_caps = {
402+
TSC.Permission.Capability.ChangeHierarchy: TSC.Permission.Mode.Deny,
403+
TSC.Permission.Capability.Connect: TSC.Permission.Mode.Allow,
404+
}
405+
406+
rule = TSC.PermissionsRule(GroupItem.as_reference(group.id), del_caps)
407+
408+
endpoint = f"{project.id}/default-permissions/virtualConnections/groups/{group.id}"
409+
m.delete(f"{base_url}/{endpoint}/ChangeHierarchy/Deny", status_code=204)
410+
m.delete(f"{base_url}/{endpoint}/Connect/Allow", status_code=204)
411+
412+
self.server.projects.delete_virtualconnection_default_permissions(project, rule)

0 commit comments

Comments
 (0)
0