Skip to content

Commit bef088e

Browse files
committed
feat: delete_view
Starting in Server 2025.3, views can be deleted.
1 parent e8890d6 commit bef088e

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-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: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import unittest
33

4+
import pytest
45
import requests_mock
56

67
import tableauserverclient as TSC
@@ -516,3 +517,20 @@ def test_view_get_all_fields(self) -> None:
516517
assert isinstance(views[2].location, TSC.LocationItem)
517518
assert views[2].location.id == "669ca36b-492e-4ccf-bca1-3614fe6a9d7a"
518519
assert views[2].location.type == "Project"
520+
521+
522+
523+
def make_view() -> TSC.ViewItem:
524+
view = TSC.ViewItem()
525+
view._id = "1234"
526+
return view
527+
528+
@pytest.mark.parametrize("view", [make_view, "1234"])
529+
def test_delete_view(server: TSC.Server, view: TSC.ViewItem | str) -> None:
530+
server.version = "3.27"
531+
id_ = getattr(view, "id", view)
532+
with requests_mock.mock() as m:
533+
m.delete(f"{server.views.baseurl}/{id_}")
534+
server.views.delete(view)
535+
assert m.called
536+
assert m.call_count == 1

0 commit comments

Comments
 (0)