Skip to content

Commit b68588c

Browse files
jacalataclaude
andcommitted
Use (item, rule) argument order in databases.delete_table_default_permissions
Every other permissions method takes the item first and the rule second, but delete_table_default_permissions took (rule, item). Switch to (item, rule). Callers using the old order keep working: swapped argument types are detected, swapped back, and a DeprecationWarning pointing at the caller is emitted. Refs #735 Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 9614576 commit b68588c

2 files changed

Lines changed: 60 additions & 1 deletion

File tree

‎tableauserverclient/server/endpoint/databases_endpoint.py‎

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import warnings
23
from typing import TYPE_CHECKING
34
from collections.abc import Iterable
45

@@ -193,7 +194,32 @@ def update_table_default_permissions(
193194
return self._default_permissions.update_default_permissions(item, rules, Resource.Table)
194195

195196
@api(version="3.5")
196-
def delete_table_default_permissions(self, rule: PermissionsRule, item: DatabaseItem) -> None:
197+
def delete_table_default_permissions(self, item: DatabaseItem, rule: PermissionsRule) -> None:
198+
"""
199+
Deletes the specified default table permission rule from the database.
200+
201+
REST API: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#delete_default_permission
202+
203+
Parameters
204+
----------
205+
item : DatabaseItem
206+
The database item to delete default table permissions from.
207+
208+
rule : PermissionsRule
209+
The permissions rule to delete from the database.
210+
211+
Returns
212+
-------
213+
None
214+
"""
215+
if isinstance(item, PermissionsRule) and isinstance(rule, DatabaseItem):
216+
warnings.warn(
217+
"delete_table_default_permissions(rule, item) is deprecated; pass (item, rule) like the other "
218+
"permissions methods.",
219+
DeprecationWarning,
220+
stacklevel=3,
221+
)
222+
item, rule = rule, item
197223
self._default_permissions.delete_default_permission(item, rule, Resource.Table)
198224

199225
@api(version="3.5")

‎test/test_database.py‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import warnings
12
from pathlib import Path
23

34
import pytest
@@ -117,3 +118,35 @@ def test_populate_tables_not_supported(server):
117118
database._id = "23591f2c-4802-4d6a-9e28-574a8ea9bc4c"
118119
with pytest.raises(NotImplementedError, match="Metadata API"):
119120
server.databases.populate_tables(database)
121+
122+
123+
def _delete_table_default_permission_setup(server, m):
124+
database = TSC.DatabaseItem("test")
125+
database._id = "0448d2ed-590d-4fa0-b272-a2a8a24555b5"
126+
rule = TSC.PermissionsRule(
127+
grantee=TSC.GroupItem.as_reference("5e5e1978-71fa-11e4-87dd-7382f5c437af"),
128+
capabilities={TSC.Permission.Capability.Read: TSC.Permission.Mode.Allow},
129+
)
130+
url = (
131+
f"{server.databases.baseurl}/{database.id}/default-permissions/tables/groups/"
132+
"5e5e1978-71fa-11e4-87dd-7382f5c437af/Read/Allow"
133+
)
134+
m.delete(url, status_code=204)
135+
return database, rule
136+
137+
138+
def test_delete_table_default_permissions(server):
139+
with requests_mock.mock() as m, warnings.catch_warnings():
140+
warnings.simplefilter("error")
141+
database, rule = _delete_table_default_permission_setup(server, m)
142+
server.databases.delete_table_default_permissions(database, rule)
143+
assert m.call_count == 1
144+
145+
146+
def test_delete_table_default_permissions_swapped_arguments_warns(server):
147+
with requests_mock.mock() as m:
148+
database, rule = _delete_table_default_permission_setup(server, m)
149+
with pytest.warns(DeprecationWarning, match="deprecated") as record:
150+
server.databases.delete_table_default_permissions(rule, database)
151+
assert m.call_count == 1
152+
assert record[0].filename == __file__

0 commit comments

Comments
 (0)