Skip to content

Commit 31e656f

Browse files
jacalataclaude
andcommitted
Make update_tags consistent on databases and tables
Neither DatabaseItem nor TableItem tracks tags, and the Query Database and Query Table responses do not include a tags element for tables, so update_tags cannot work as it does for workbooks and datasources. Both methods now share one explicit NotImplementedError that points to add_tags and delete_tags, and tables.update_tags carries the same @api(version="3.9") gate as the other tag methods. Refs #735 Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent a78e46e commit 31e656f

4 files changed

Lines changed: 47 additions & 4 deletions

File tree

‎tableauserverclient/server/endpoint/databases_endpoint.py‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020
from tableauserverclient.server.request_options import RequestOptions
2121

2222

23+
_UPDATE_TAGS_MESSAGE = (
24+
"update_tags is not supported for databases: the item does not track its tags. "
25+
"Use add_tags and delete_tags with the item or its ID instead."
26+
)
27+
28+
2329
class Databases(Endpoint, TaggingMixin):
2430
def __init__(self, parent_srv):
2531
super().__init__(parent_srv)
@@ -247,5 +253,5 @@ def delete_tags(self, item: DatabaseItem | str, tags: Iterable[str]) -> None:
247253
super().delete_tags(item, tags)
248254

249255
@api(version="3.9")
250-
def update_tags(self, item: DatabaseItem) -> None:
251-
raise NotImplementedError("Update tags is not supported for databases.")
256+
def update_tags(self, item: DatabaseItem) -> None: # type: ignore[override]
257+
raise NotImplementedError(_UPDATE_TAGS_MESSAGE)

‎tableauserverclient/server/endpoint/tables_endpoint.py‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@
1919
from tableauserverclient.models import DQWItem, PermissionsRule
2020

2121

22+
_UPDATE_TAGS_MESSAGE = (
23+
"update_tags is not supported for tables: the item does not track its tags. "
24+
"Use add_tags and delete_tags with the item or its ID instead."
25+
)
26+
27+
2228
class Tables(Endpoint, TaggingMixin[TableItem]):
2329
def __init__(self, parent_srv):
2430
super().__init__(parent_srv)
@@ -259,5 +265,6 @@ def add_tags(self, item: TableItem | str, tags: Iterable[str] | str) -> set[str]
259265
def delete_tags(self, item: TableItem | str, tags: Iterable[str] | str) -> None:
260266
return super().delete_tags(item, tags)
261267

262-
def update_tags(self, item: TableItem) -> None: # type: ignore
263-
raise NotImplementedError("Update tags is not implemented for TableItem")
268+
@api(version="3.9")
269+
def update_tags(self, item: TableItem) -> None: # type: ignore[override]
270+
raise NotImplementedError(_UPDATE_TAGS_MESSAGE)

‎test/test_database.py‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,18 @@ def test_update_req_sends_content_permissions() -> None:
183183
item = TSC.DatabaseItem("test", content_permissions=TSC.DatabaseItem.ContentPermissions.ManagedByOwner)
184184
attrib = ET.fromstring(RequestFactory.Database.update_req(item)).findall("database")[0].attrib
185185
assert attrib == {"contentPermissions": "ManagedByOwner"}
186+
187+
188+
def test_update_tags_not_supported(server) -> None:
189+
server.version = "3.9"
190+
item = TSC.DatabaseItem("test")
191+
item._id = "10224773-ecee-42ac-b822-d786b0b8e4d9"
192+
with pytest.raises(NotImplementedError, match="add_tags and delete_tags"):
193+
server.databases.update_tags(item)
194+
195+
196+
def test_update_tags_checks_version(server) -> None:
197+
server.version = "3.5"
198+
item = TSC.DatabaseItem("test")
199+
with pytest.raises(TSC.server.exceptions.EndpointUnavailableError):
200+
server.databases.update_tags(item)

‎test/test_table.py‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,18 @@ def test_update_req_empty_strings_clear_fields() -> None:
9090
item.description = ""
9191
attrib = ET.fromstring(RequestFactory.Table.update_req(item)).findall("table")[0].attrib
9292
assert attrib == {"certificationNote": "", "description": ""}
93+
94+
95+
def test_update_tags_not_supported(server) -> None:
96+
server.version = "3.9"
97+
item = TSC.TableItem("test")
98+
item._id = "10224773-ecee-42ac-b822-d786b0b8e4d9"
99+
with pytest.raises(NotImplementedError, match="add_tags and delete_tags"):
100+
server.tables.update_tags(item)
101+
102+
103+
def test_update_tags_checks_version(server) -> None:
104+
server.version = "3.5"
105+
item = TSC.TableItem("test")
106+
with pytest.raises(TSC.server.exceptions.EndpointUnavailableError):
107+
server.tables.update_tags(item)

0 commit comments

Comments
 (0)