From 7712c0c4e2fe25194153f21c6b5c79acf6d3bca0 Mon Sep 17 00:00:00 2001 From: Jac Fitzgerald Date: Fri, 25 Sep 2026 14:33:28 -0700 Subject: [PATCH] fix: don't emit empty on workbook update when unset WorkbookItem.data_acceleration_config defaults to a dict of all-None values, so update_req's truthiness check on the dict was always True and emitted an empty on every workbooks.update() call regardless of whether the caller set anything. Check for an actual value in the dict instead. Fixes #1884 Co-Authored-By: Claude Sonnet 5 --- tableauserverclient/server/request_factory.py | 7 +++++-- test/test_workbook.py | 13 +++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/tableauserverclient/server/request_factory.py b/tableauserverclient/server/request_factory.py index 3301b3b89..1e5b66019 100644 --- a/tableauserverclient/server/request_factory.py +++ b/tableauserverclient/server/request_factory.py @@ -1077,8 +1077,11 @@ def update_req(self, workbook_item, parent_srv: "Server | None" = None): views_element = ET.SubElement(workbook_element, "views") for view in workbook_item.views: _add_view_element(views_element, view.id) - if workbook_item.data_acceleration_config: - data_acceleration_config = workbook_item.data_acceleration_config + data_acceleration_config = workbook_item.data_acceleration_config + if data_acceleration_config and ( + data_acceleration_config.get("acceleration_enabled") is not None + or data_acceleration_config.get("accelerate_now") is not None + ): data_acceleration_element = ET.SubElement(workbook_element, "dataAccelerationConfig") if data_acceleration_config["acceleration_enabled"] is not None: data_acceleration_element.attrib["accelerationEnabled"] = str( diff --git a/test/test_workbook.py b/test/test_workbook.py index 7f4d80041..51fe1ea45 100644 --- a/test/test_workbook.py +++ b/test/test_workbook.py @@ -242,6 +242,19 @@ def test_update(server: TSC.Server) -> None: assert not single_workbook.data_acceleration_config["accelerate_now"] +def test_update_excludes_data_acceleration_config_when_unset(server: TSC.Server) -> None: + """dataAccelerationConfig should be omitted from the update request XML when never set.""" + response_xml = UPDATE_XML.read_text() + with requests_mock.mock() as m: + m.put(server.workbooks.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml) + single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True) + single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2" + server.workbooks.update(single_workbook) + request_body = m.request_history[0].body + xml_root = fromstring(request_body) + assert xml_root.find(".//dataAccelerationConfig") is None + + def test_update_description_in_request_xml(server: TSC.Server) -> None: """description should be included in the update request XML when server >= 3.21.""" server.version = "3.21"