diff --git a/tableauserverclient/server/request_options.py b/tableauserverclient/server/request_options.py index 45a4f6df..70c85d14 100644 --- a/tableauserverclient/server/request_options.py +++ b/tableauserverclient/server/request_options.py @@ -387,7 +387,14 @@ def parameter(self, name: str, value: str) -> Self: Self The current object """ - self.view_parameters.append((name, value)) + prefix = "vf_Parameters." + if name.startswith(prefix): + proper_name = name + elif name.startswith("Parameters."): + proper_name = f"vf_{name}" + else: + proper_name = f"{prefix}{name}" + self.view_parameters.append((proper_name, value)) return self def _append_view_filters(self, params) -> None: diff --git a/test/test_request_option.py b/test/test_request_option.py index dbf6dc99..d0ba5c77 100644 --- a/test/test_request_option.py +++ b/test/test_request_option.py @@ -321,16 +321,27 @@ def test_filtering_parameters(self) -> None: opts = TSC.PDFRequestOptions() opts.parameter("name1@", "value1") opts.parameter("name2$", "value2") + opts.parameter("Parameters.name3", "value3") + opts.parameter("vf_Parameters.name4", "value4") opts.page_type = TSC.PDFRequestOptions.PageType.Tabloid + # While Tableau Server side IS case sensitive with the query string, + # requiring the prefix to be "vf_Parameters", requests does not end + # up preserving the case sensitivity with the Response.Request + # object. It also shows up lowercased in the requests_mock request + # history. resp = self.server.workbooks.get_request(url, request_object=opts) query_params = parse_qs(resp.request.query) - self.assertIn("name1@", query_params) - self.assertIn("value1", query_params["name1@"]) - self.assertIn("name2$", query_params) - self.assertIn("value2", query_params["name2$"]) - self.assertIn("type", query_params) - self.assertIn("tabloid", query_params["type"]) + assert "vf_parameters.name1@" in query_params + assert "value1" in query_params["vf_parameters.name1@"] + assert "vf_parameters.name2$" in query_params + assert "value2" in query_params["vf_parameters.name2$"] + assert "vf_parameters.name3" in query_params + assert "value3" in query_params["vf_parameters.name3"] + assert "vf_parameters.name4" in query_params + assert "value4" in query_params["vf_parameters.name4"] + assert "type" in query_params + assert "tabloid" in query_params["type"] def test_queryset_endpoint_pagesize_all(self) -> None: for page_size in (1, 10, 100, 1000):