diff --git a/tableauserverclient/server/endpoint/views_endpoint.py b/tableauserverclient/server/endpoint/views_endpoint.py index 9d1c8b00f..162c04105 100644 --- a/tableauserverclient/server/endpoint/views_endpoint.py +++ b/tableauserverclient/server/endpoint/views_endpoint.py @@ -371,6 +371,29 @@ def update(self, view_item: ViewItem) -> ViewItem: # Returning view item to stay consistent with datasource/view update functions return view_item + @api(version="3.27") + def delete(self, view: ViewItem | str) -> None: + """ + Deletes a view in a workbook. If you delete the only view in a workbook, + the workbook is deleted. Can be used to remove hidden views when + republishing or migrating to a different environment. + + REST API: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#delete_view + + Parameters + ---------- + view: ViewItem | str + The ViewItem or the luid for the view to be deleted. + + Returns + ------- + None + """ + id_ = getattr(view, "id", view) + self.delete_request(f"{self.baseurl}/{id_}") + logger.info(f"View({id_}) deleted.") + return None + @api(version="1.0") def add_tags(self, item: Union[ViewItem, str], tags: Union[Iterable[str], str]) -> set[str]: """ diff --git a/test/test_view.py b/test/test_view.py index e032ed569..b16f47c72 100644 --- a/test/test_view.py +++ b/test/test_view.py @@ -520,3 +520,20 @@ def test_view_get_all_fields(server: TSC.Server) -> None: assert isinstance(views[2].location, TSC.LocationItem) assert views[2].location.id == "669ca36b-492e-4ccf-bca1-3614fe6a9d7a" assert views[2].location.type == "Project" + + +def make_view() -> TSC.ViewItem: + view = TSC.ViewItem() + view._id = "1234" + return view + + +@pytest.mark.parametrize("view", [make_view, "1234"]) +def test_delete_view(server: TSC.Server, view: TSC.ViewItem | str) -> None: + server.version = "3.27" + id_ = getattr(view, "id", view) + with requests_mock.mock() as m: + m.delete(f"{server.views.baseurl}/{id_}") + server.views.delete(view) + assert m.called + assert m.call_count == 1