Skip to content

Commit 6f525ff

Browse files
authored
fix: handle parameters for view filters (#1633)
* fix: black ci errors * chore: pytestify request_option * fix: encoding error * fix: handle parameters for view filters Closes #1632 Parameters need to be prefixed with "vf_Parameters." in order to be properly registered as setting a parameter value. This PR adds that prefix where it was missing, but leaves parameter names that already included the prefix unmodified. * docs: case sensitivity in the test's query string * chore: pytest style asserts * fix: black ci errors --------- Co-authored-by: Jordan Woods <[email protected]>
1 parent 24cf1ad commit 6f525ff

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

tableauserverclient/server/request_options.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,14 @@ def parameter(self, name: str, value: str) -> Self:
387387
Self
388388
The current object
389389
"""
390-
self.view_parameters.append((name, value))
390+
prefix = "vf_Parameters."
391+
if name.startswith(prefix):
392+
proper_name = name
393+
elif name.startswith("Parameters."):
394+
proper_name = f"vf_{name}"
395+
else:
396+
proper_name = f"{prefix}{name}"
397+
self.view_parameters.append((proper_name, value))
391398
return self
392399

393400
def _append_view_filters(self, params) -> None:

test/test_request_option.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -339,14 +339,25 @@ def test_filtering_parameters(server: TSC.Server) -> None:
339339
opts = TSC.PDFRequestOptions()
340340
opts.parameter("name1@", "value1")
341341
opts.parameter("name2$", "value2")
342+
opts.parameter("Parameters.name3", "value3")
343+
opts.parameter("vf_Parameters.name4", "value4")
342344
opts.page_type = TSC.PDFRequestOptions.PageType.Tabloid
343345

346+
# While Tableau Server side IS case sensitive with the query string,
347+
# requiring the prefix to be "vf_Parameters", requests does not end
348+
# up preserving the case sensitivity with the Response.Request
349+
# object. It also shows up lowercased in the requests_mock request
350+
# history.
344351
resp = server.workbooks.get_request(url, request_object=opts)
345352
query_params = parse_qs(resp.request.query)
346-
assert "name1@" in query_params
347-
assert "value1" in query_params["name1@"]
348-
assert "name2$" in query_params
349-
assert "value2" in query_params["name2$"]
353+
assert "vf_parameters.name1@" in query_params
354+
assert "value1" in query_params["vf_parameters.name1@"]
355+
assert "vf_parameters.name2$" in query_params
356+
assert "value2" in query_params["vf_parameters.name2$"]
357+
assert "vf_parameters.name3" in query_params
358+
assert "value3" in query_params["vf_parameters.name3"]
359+
assert "vf_parameters.name4" in query_params
360+
assert "value4" in query_params["vf_parameters.name4"]
350361
assert "type" in query_params
351362
assert "tabloid" in query_params["type"]
352363

@@ -369,6 +380,9 @@ def test_queryset_endpoint_pagesize_filter(server: TSC.Server, page_size: int) -
369380
_ = list(queryset)
370381

371382

383+
44
384+
385+
372386
@pytest.mark.parametrize("page_size", [1, 10, 100, 1_000])
373387
def test_queryset_pagesize_filter(server: TSC.Server, page_size: int) -> None:
374388
with requests_mock.mock() as m:

0 commit comments

Comments
 (0)