From 263862113eeb6c890e6a6a75441dd4957db1c49a Mon Sep 17 00:00:00 2001 From: Brian Cantoni Date: Thu, 15 Oct 2026 15:48:08 -0700 Subject: [PATCH 1/2] test: eliminate pytest warnings --- test/test_datasource.py | 2 ++ test/test_site.py | 4 +++- test/test_workbook.py | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/test/test_datasource.py b/test/test_datasource.py index 824142c11..861aba430 100644 --- a/test/test_datasource.py +++ b/test/test_datasource.py @@ -987,6 +987,8 @@ def test_synchronous_publish_timeout_error(server) -> None: def test_async_publish_timeout_error(server) -> None: + server.version = "3.0" + with requests_mock.mock() as m: m.register_uri("POST", server.datasources.baseurl, status_code=504) diff --git a/test/test_site.py b/test/test_site.py index 3e15330ff..e85429738 100644 --- a/test/test_site.py +++ b/test/test_site.py @@ -205,6 +205,7 @@ def test_update_missing_id(server: TSC.Server) -> None: server.sites.update(single_site) +@pytest.mark.filterwarnings("ignore:FlowsEnabled has been removed") def test_update_subscription_email_and_footer_preserve_case() -> None: # Regression for #1849: RequestFactory used to .lower() customSubscriptionEmail # and customSubscriptionFooter, silently mangling caller intent. Footer @@ -221,6 +222,7 @@ def test_update_subscription_email_and_footer_preserve_case() -> None: ) +@pytest.mark.filterwarnings("ignore:FlowsEnabled has been removed") def test_create_subscription_email_and_footer_preserve_case() -> None: # Same regression for the create-site path. site = TSC.SiteItem(name="X", content_url="x") @@ -348,7 +350,7 @@ def test_parsing_attr_capture(capture): @pytest.mark.filterwarnings("ignore:FlowsEnabled has been removed") -@pytest.mark.parametrize("req, capture", product(["create_req", "update_req"], [True, False, None])) +@pytest.mark.parametrize("req, capture", list(product(["create_req", "update_req"], [True, False, None]))) def test_encoding_attr_capture(req, capture): site = TSC.SiteItem( content_url="test", diff --git a/test/test_workbook.py b/test/test_workbook.py index c3188c4c8..c0965f121 100644 --- a/test/test_workbook.py +++ b/test/test_workbook.py @@ -938,6 +938,8 @@ def test_synchronous_publish_timeout_error(server: TSC.Server) -> None: def test_async_publish_timeout_error(server: TSC.Server) -> None: + server.version = "3.0" + with requests_mock.mock() as m: m.register_uri("POST", server.workbooks.baseurl, status_code=504) From 8f958363fe6d36aa05d417611c202c7c2a0b24f6 Mon Sep 17 00:00:00 2001 From: Brian Cantoni Date: Thu, 15 Oct 2026 16:06:26 -0700 Subject: [PATCH 2/2] docs: escape request filter examples --- tableauserverclient/server/request_options.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tableauserverclient/server/request_options.py b/tableauserverclient/server/request_options.py index da1c70826..14fb18c61 100644 --- a/tableauserverclient/server/request_options.py +++ b/tableauserverclient/server/request_options.py @@ -378,10 +378,10 @@ def vf(self, name: str, value: str) -> Self: in August 2026. Examples below give the wire form (what the server sees after URL decoding) and the data value it matches. To match a value containing a literal comma, wire form - ``Rock\, Paper\, Scissors`` matches data value ``Rock, Paper, + ``Rock\\, Paper\\, Scissors`` matches data value ``Rock, Paper, Scissors`` (without escaping, the comma starts an OR-list). To - match a literal backslash, double it: wire form ``C:\\temp\\file`` - matches data value ``C:\temp\file``. + match a literal backslash, double it: wire form ``C:\\\\temp\\\\file`` + matches data value ``C:\\temp\\file``. - **Empty value** (``vf_=``) is observed to override any workbook-embedded filter on that column, effectively widening it to all values. Not officially documented; behavior may change