Skip to content

Commit 691ba7f

Browse files
committed
feat: add eq comparison for PermissionsRule
1 parent 6dcabb2 commit 691ba7f

2 files changed

Lines changed: 57 additions & 0 deletions

File tree

tableauserverclient/models/permissions_item.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,16 @@ def __init__(self, grantee: ResourceReference, capabilities: Dict[str, str]) ->
5353
def __repr__(self):
5454
return "<PermissionsRule grantee={}, capabilities={}>".format(self.grantee, self.capabilities)
5555

56+
def __eq__(self, other: "PermissionsRule") -> bool:
57+
return self.grantee == other.grantee and self.capabilities == other.capabilities
58+
5659
def __and__(self, other: "PermissionsRule") -> "PermissionsRule":
5760
if self.grantee != other.grantee:
5861
raise ValueError("Cannot AND two permissions rules with different grantees")
62+
63+
if self.capabilities == other.capabilities:
64+
return self
65+
5966
capabilities = set((*self.capabilities.keys(), *other.capabilities.keys()))
6067
new_capabilities = {}
6168
for capability in capabilities:
@@ -72,6 +79,10 @@ def __and__(self, other: "PermissionsRule") -> "PermissionsRule":
7279
def __or__(self, other: "PermissionsRule") -> "PermissionsRule":
7380
if self.grantee != other.grantee:
7481
raise ValueError("Cannot OR two permissions rules with different grantees")
82+
83+
if self.capabilities == other.capabilities:
84+
return self
85+
7586
capabilities = set((*self.capabilities.keys(), *other.capabilities.keys()))
7687
new_capabilities = {}
7788
for capability in capabilities:

test/test_permissionsrule.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,49 @@ def test_or(self):
5858
self.assertEqual(composite.capabilities.get(TSC.Permission.Capability.Delete), TSC.Permission.Mode.Allow)
5959
self.assertEqual(composite.capabilities.get(TSC.Permission.Capability.ViewComments), TSC.Permission.Mode.Allow)
6060
self.assertEqual(composite.capabilities.get(TSC.Permission.Capability.ExportXml), TSC.Permission.Mode.Deny)
61+
62+
def test_eq_false(self):
63+
grantee = ResourceReference("a", "user")
64+
rule1 = TSC.PermissionsRule(
65+
grantee,
66+
{
67+
TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
68+
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Deny,
69+
TSC.Permission.Capability.ViewComments: TSC.Permission.Mode.Allow,
70+
TSC.Permission.Capability.ExportXml: TSC.Permission.Mode.Deny,
71+
},
72+
)
73+
rule2 = TSC.PermissionsRule(
74+
grantee,
75+
{
76+
TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
77+
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Allow,
78+
TSC.Permission.Capability.ExportXml: TSC.Permission.Mode.Deny,
79+
},
80+
)
81+
82+
self.assertNotEqual(rule1, rule2)
83+
84+
def test_eq_true(self):
85+
grantee = ResourceReference("a", "user")
86+
rule1 = TSC.PermissionsRule(
87+
grantee,
88+
{
89+
TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
90+
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Deny,
91+
TSC.Permission.Capability.ViewComments: TSC.Permission.Mode.Allow,
92+
TSC.Permission.Capability.ExportXml: TSC.Permission.Mode.Deny,
93+
},
94+
)
95+
rule2 = TSC.PermissionsRule(
96+
grantee,
97+
{
98+
TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
99+
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Deny,
100+
TSC.Permission.Capability.ViewComments: TSC.Permission.Mode.Allow,
101+
TSC.Permission.Capability.ExportXml: TSC.Permission.Mode.Deny,
102+
},
103+
)
104+
self.assertEqual(rule1, rule2)
105+
106+

0 commit comments

Comments
 (0)