Skip to content

Commit eb86ace

Browse files
committed
feat: delete_view
Starting in Server 2025.3, views can be deleted.
1 parent 68cc409 commit eb86ace

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

tableauserverclient/server/endpoint/views_endpoint.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,29 @@ def update(self, view_item: ViewItem) -> ViewItem:
371371
# Returning view item to stay consistent with datasource/view update functions
372372
return view_item
373373

374+
@api(version="3.27")
375+
def delete(self, view: ViewItem | str) -> None:
376+
"""
377+
Deletes a view in a workbook. If you delete the only view in a workbook,
378+
the workbook is deleted. Can be used to remove hidden views when
379+
republishing or migrating to a different environment.
380+
381+
REST API: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#delete_view
382+
383+
Parameters
384+
----------
385+
view: ViewItem | str
386+
The ViewItem or the luid for the view to be deleted.
387+
388+
Returns
389+
-------
390+
None
391+
"""
392+
id_ = getattr(view, "id", view)
393+
self.delete_request(f"{self.baseurl}/{id_}")
394+
logger.info(f"View({id_}) deleted.")
395+
return None
396+
374397
@api(version="1.0")
375398
def add_tags(self, item: Union[ViewItem, str], tags: Union[Iterable[str], str]) -> set[str]:
376399
"""

test/test_view.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,3 +520,19 @@ def test_view_get_all_fields(server: TSC.Server) -> None:
520520
assert isinstance(views[2].location, TSC.LocationItem)
521521
assert views[2].location.id == "669ca36b-492e-4ccf-bca1-3614fe6a9d7a"
522522
assert views[2].location.type == "Project"
523+
524+
def make_view() -> TSC.ViewItem:
525+
view = TSC.ViewItem()
526+
view._id = "1234"
527+
return view
528+
529+
@pytest.mark.parametrize("view", [make_view, "1234"])
530+
def test_delete_view(server: TSC.Server, view: TSC.ViewItem | str) -> None:
531+
server.version = "3.27"
532+
id_ = getattr(view, "id", view)
533+
with requests_mock.mock() as m:
534+
m.delete(f"{server.views.baseurl}/{id_}")
535+
server.views.delete(view)
536+
assert m.called
537+
assert m.call_count == 1
538+

0 commit comments

Comments
 (0)