Skip to content

Commit

Permalink
feat: add eq comparison for PermissionsRule
Browse files Browse the repository at this point in the history
  • Loading branch information
jorwoods committed May 30, 2024
1 parent 6dcabb2 commit 691ba7f
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
11 changes: 11 additions & 0 deletions tableauserverclient/models/permissions_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,16 @@ def __init__(self, grantee: ResourceReference, capabilities: Dict[str, str]) ->
def __repr__(self):
return "<PermissionsRule grantee={}, capabilities={}>".format(self.grantee, self.capabilities)

def __eq__(self, other: "PermissionsRule") -> bool:
return self.grantee == other.grantee and self.capabilities == other.capabilities

def __and__(self, other: "PermissionsRule") -> "PermissionsRule":
if self.grantee != other.grantee:
raise ValueError("Cannot AND two permissions rules with different grantees")

if self.capabilities == other.capabilities:
return self

capabilities = set((*self.capabilities.keys(), *other.capabilities.keys()))
new_capabilities = {}
for capability in capabilities:
Expand All @@ -72,6 +79,10 @@ def __and__(self, other: "PermissionsRule") -> "PermissionsRule":
def __or__(self, other: "PermissionsRule") -> "PermissionsRule":
if self.grantee != other.grantee:
raise ValueError("Cannot OR two permissions rules with different grantees")

if self.capabilities == other.capabilities:
return self

capabilities = set((*self.capabilities.keys(), *other.capabilities.keys()))
new_capabilities = {}
for capability in capabilities:
Expand Down
46 changes: 46 additions & 0 deletions test/test_permissionsrule.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,49 @@ def test_or(self):
self.assertEqual(composite.capabilities.get(TSC.Permission.Capability.Delete), TSC.Permission.Mode.Allow)
self.assertEqual(composite.capabilities.get(TSC.Permission.Capability.ViewComments), TSC.Permission.Mode.Allow)
self.assertEqual(composite.capabilities.get(TSC.Permission.Capability.ExportXml), TSC.Permission.Mode.Deny)

def test_eq_false(self):
grantee = ResourceReference("a", "user")
rule1 = TSC.PermissionsRule(
grantee,
{
TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Deny,
TSC.Permission.Capability.ViewComments: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.ExportXml: TSC.Permission.Mode.Deny,
},
)
rule2 = TSC.PermissionsRule(
grantee,
{
TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.ExportXml: TSC.Permission.Mode.Deny,
},
)

self.assertNotEqual(rule1, rule2)

def test_eq_true(self):
grantee = ResourceReference("a", "user")
rule1 = TSC.PermissionsRule(
grantee,
{
TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Deny,
TSC.Permission.Capability.ViewComments: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.ExportXml: TSC.Permission.Mode.Deny,
},
)
rule2 = TSC.PermissionsRule(
grantee,
{
TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.Delete: TSC.Permission.Mode.Deny,
TSC.Permission.Capability.ViewComments: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.ExportXml: TSC.Permission.Mode.Deny,
},
)
self.assertEqual(rule1, rule2)


0 comments on commit 691ba7f

Please sign in to comment.