From eb2df3f4fd1f1283666f5a0ba7cebac75a841690 Mon Sep 17 00:00:00 2001 From: Jordan Woods <13803242+jorwoods@users.noreply.github.com> Date: Mon, 29 Dec 2025 08:41:10 -0600 Subject: [PATCH 1/2] fix: add workbook and view setter for custom view Closes #1729 Add setter methods for workbook and view properties. --- tableauserverclient/models/custom_view_item.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tableauserverclient/models/custom_view_item.py b/tableauserverclient/models/custom_view_item.py index 5cafe469c..92acb0e9b 100644 --- a/tableauserverclient/models/custom_view_item.py +++ b/tableauserverclient/models/custom_view_item.py @@ -158,10 +158,18 @@ def owner(self, value: UserItem): def workbook(self) -> Optional[WorkbookItem]: return self._workbook + @workbook.setter + def workbook(self, value: WorkbookItem) -> None: + self._workbook = value + @property def view(self) -> Optional[ViewItem]: return self._view + @view.setter + def view(self, value: ViewItem) -> None: + self._view = value + @classmethod def from_response(cls, resp, ns, workbook_id="") -> Optional["CustomViewItem"]: item = cls.list_from_response(resp, ns, workbook_id) From 183e98582868bc267e00073d5894e6f4dcb230f3 Mon Sep 17 00:00:00 2001 From: Jordan Woods <13803242+jorwoods@users.noreply.github.com> Date: Tue, 6 Jan 2026 06:10:00 -0600 Subject: [PATCH 2/2] chore: use workbook setter in tests --- test/test_custom_view.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/test_custom_view.py b/test/test_custom_view.py index 98dd9b6a4..b2117358a 100644 --- a/test/test_custom_view.py +++ b/test/test_custom_view.py @@ -174,8 +174,8 @@ def test_publish_filepath(server: TSC.Server) -> None: cv = TSC.CustomViewItem(name="test") cv._owner = TSC.UserItem() cv._owner._id = "dd2239f6-ddf1-4107-981a-4cf94e415794" - cv._workbook = TSC.WorkbookItem() - cv._workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" + cv.workbook = TSC.WorkbookItem() + cv.workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" with requests_mock.mock() as m: m.post(server.custom_views.expurl, status_code=201, text=GET_XML.read_text()) view = server.custom_views.publish(cv, CUSTOM_VIEW_DOWNLOAD) @@ -190,8 +190,8 @@ def test_publish_file_str(server: TSC.Server) -> None: cv = TSC.CustomViewItem(name="test") cv._owner = TSC.UserItem() cv._owner._id = "dd2239f6-ddf1-4107-981a-4cf94e415794" - cv._workbook = TSC.WorkbookItem() - cv._workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" + cv.workbook = TSC.WorkbookItem() + cv.workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" with requests_mock.mock() as m: m.post(server.custom_views.expurl, status_code=201, text=GET_XML.read_text()) view = server.custom_views.publish(cv, str(CUSTOM_VIEW_DOWNLOAD)) @@ -206,8 +206,8 @@ def test_publish_file_io(server: TSC.Server) -> None: cv = TSC.CustomViewItem(name="test") cv._owner = TSC.UserItem() cv._owner._id = "dd2239f6-ddf1-4107-981a-4cf94e415794" - cv._workbook = TSC.WorkbookItem() - cv._workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" + cv.workbook = TSC.WorkbookItem() + cv.workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" data = io.BytesIO(CUSTOM_VIEW_DOWNLOAD.read_bytes()) with requests_mock.mock() as m: m.post(server.custom_views.expurl, status_code=201, text=GET_XML.read_text()) @@ -222,8 +222,8 @@ def test_publish_file_io(server: TSC.Server) -> None: def test_publish_missing_owner_id(server: TSC.Server) -> None: cv = TSC.CustomViewItem(name="test") cv._owner = TSC.UserItem() - cv._workbook = TSC.WorkbookItem() - cv._workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" + cv.workbook = TSC.WorkbookItem() + cv.workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" with requests_mock.mock() as m: m.post(server.custom_views.expurl, status_code=201, text=GET_XML.read_text()) with pytest.raises(ValueError): @@ -234,7 +234,7 @@ def test_publish_missing_wb_id(server: TSC.Server) -> None: cv = TSC.CustomViewItem(name="test") cv._owner = TSC.UserItem() cv._owner._id = "dd2239f6-ddf1-4107-981a-4cf94e415794" - cv._workbook = TSC.WorkbookItem() + cv.workbook = TSC.WorkbookItem() with requests_mock.mock() as m: m.post(server.custom_views.expurl, status_code=201, text=GET_XML.read_text()) with pytest.raises(ValueError): @@ -245,8 +245,8 @@ def test_large_publish(server: TSC.Server): cv = TSC.CustomViewItem(name="test") cv._owner = TSC.UserItem() cv._owner._id = "dd2239f6-ddf1-4107-981a-4cf94e415794" - cv._workbook = TSC.WorkbookItem() - cv._workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" + cv.workbook = TSC.WorkbookItem() + cv.workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" with ExitStack() as stack: temp_dir = stack.enter_context(TemporaryDirectory()) file_path = Path(temp_dir) / "test_file"