Skip to content

Commit d26417d

Browse files
authored
Upgrade to non-experimental query api (#10)
Fixes #6.
1 parent cee3b80 commit d26417d

File tree

6 files changed

+19
-28
lines changed

6 files changed

+19
-28
lines changed

.github/workflows/pre-merge.yaml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ jobs:
1818
python-py-version: "py38"
1919
- python-version: "3.10"
2020
python-py-version: "py310"
21-
container: ghcr.io/${{ github.repository }}:${{ matrix.python-py-version }}-poetry-bullseye
21+
container:
22+
image: ghcr.io/${{ github.repository }}:${{ matrix.python-py-version }}-poetry-bullseye
2223
credentials:
2324
username: ${{ github.actor }}
2425
password: ${{ secrets.GITHUB_TOKEN }}
@@ -48,11 +49,6 @@ jobs:
4849
# Project is installed separately to avoid always invalidating the cache
4950
- name: Poetry - Install Project
5051
run: poetry install --no-interaction
51-
- name: Tox - Tests [py38]
52-
# fast this time around since the last step did the installation, venv.bash will only check here
53-
run: |
54-
source ./venv.bash
55-
tox -e py38
5652

5753
- name: Tox - Tests
5854
run: poetry run tox --workdir ${{ env.VENV_DIR }} -e ${{ matrix.python-py-version }}

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "streamlit_parameters"
3-
version = "0.2.0"
3+
version = "0.1.5"
44
description = "Streamlit parameter management for page configuration"
55
authors = ["Daniel Stonier"]
66
maintainers = ["Daniel Stonier <[email protected]>"]

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
install_requires = [
7-
'streamlit>=1.12,<2'
7+
'streamlit>=1.30,<2'
88
]
99

1010
tests_require = ['pytest', 'pytest-mock', 'tox']

streamlit_parameters/demos/parameters.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import datetime
1616
import functools
1717
import sys
18-
import typing
1918

2019
import streamlit
2120
import streamlit.web.cli
@@ -214,8 +213,7 @@ def main():
214213
streamlit.write("## Debugging")
215214

216215
streamlit.write("#### Query String")
217-
query_string: typing.Dict[str, str] = streamlit.experimental_get_query_params()
218-
streamlit.write(query_string)
216+
streamlit.write(streamlit.query_params)
219217

220218
streamlit.write("#### Parameters")
221219
streamlit.write(parameters.as_dict())

streamlit_parameters/parameters.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ def set_url_fields():
486486
for key, parameter in streamlit.session_state._parameters.items():
487487
if Parameters.is_set_all() or parameter.touched:
488488
values[key] = parameter.to_str(parameter.value)
489-
streamlit.experimental_set_query_params(**values)
489+
streamlit.query_params.from_dict(values)
490490

491491
@staticmethod
492492
def _already_registered(key: str) -> bool:
@@ -507,7 +507,4 @@ def _fetch_url_field(key: str) -> str:
507507
Raises:
508508
KeyError: if the field does not exist
509509
"""
510-
# TODO: raise error if multiple values in the query_string exist
511-
return streamlit.experimental_get_query_params()[key][
512-
0
513-
] # always a list, get the first
510+
return streamlit.query_params[key]

tests/test_parameters.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ def mock_session_state(mocker):
1919
def mock_query_params(mocker):
2020
"""Add a pytest fixture that returns a function that mocks query params."""
2121
def func(key: str, value: str):
22-
get_query_params = mocker.patch(
23-
sut + ".streamlit.experimental_get_query_params"
22+
mocker.patch.dict(
23+
sut + ".streamlit.query_params",
24+
{key: value}
2425
)
25-
get_query_params.return_value = {key: [value]}
2626

2727
return func
2828

@@ -176,9 +176,9 @@ def test_register_string_parameter(
176176
assert parameter.default == "G'day!"
177177
assert parameter.value == "Hello"
178178
assert repr(parameter) == "Parameter(default=G'day!,value=Hello,touched=True)"
179-
set_query_params = mocker.patch(sut + ".streamlit.experimental_set_query_params")
179+
set_query_params = mocker.patch(sut + ".streamlit.runtime.state.query_params_proxy.QueryParamsProxy.from_dict")
180180
Parameters.set_url_fields()
181-
set_query_params.assert_called_with(foo="Hello")
181+
set_query_params.assert_called_with({"foo": "Hello"})
182182

183183

184184
def test_register_string_parameter_not_in_url(
@@ -223,14 +223,14 @@ def test_register_string_list_parameter(
223223
repr(parameter)
224224
== "Parameter(default=['flying', 'spaghetti', 'monster'],value=['flying', 'spaghetti', 'monster'],touched=True)"
225225
)
226-
set_query_params = mocker.patch(sut + ".streamlit.experimental_set_query_params")
226+
set_query_params = mocker.patch(sut + ".streamlit.runtime.state.query_params_proxy.QueryParamsProxy.from_dict")
227227
Parameters.set_url_fields()
228-
set_query_params.assert_called_with(foo="['flying', 'spaghetti', 'monster']")
228+
set_query_params.assert_called_with({"foo": "['flying', 'spaghetti', 'monster']"})
229229

230230
# Now update value and make sure new value properly serialized in query params
231231
parameters.foo.update(new_value=["Hello", "world"])
232232
Parameters.set_url_fields()
233-
set_query_params.assert_called_with(foo="['Hello', 'world']")
233+
set_query_params.assert_called_with({"foo": "['Hello', 'world']"})
234234

235235

236236
def test_register_string_list_parameter_not_in_url(
@@ -278,9 +278,9 @@ def test_register_date_parameter(
278278
parameter = st.session_state._parameters["foo"]
279279
assert parameter.default == datetime.date(2021, 11, 1)
280280
assert parameter.value == datetime.date(2021, 11, 1)
281-
set_query_params = mocker.patch(sut + ".streamlit.experimental_set_query_params")
281+
set_query_params = mocker.patch(sut + ".streamlit.runtime.state.query_params_proxy.QueryParamsProxy.from_dict")
282282
Parameters.set_url_fields()
283-
set_query_params.assert_called_with(foo="2021-11-01")
283+
set_query_params.assert_called_with({"foo": "2021-11-01"})
284284

285285

286286
def test_register_date_parameter_not_in_url(
@@ -307,10 +307,10 @@ def test_register_date_range_parameter(
307307
assert parameter.value == (datetime.date(2021, 11, 1), datetime.date(2021, 11, 3))
308308

309309
# Now update value and make sure new value properly serialized in query params
310-
set_query_params = mocker.patch(sut + ".streamlit.experimental_set_query_params")
310+
set_query_params = mocker.patch(sut + ".streamlit.runtime.state.query_params_proxy.QueryParamsProxy.from_dict")
311311
parameters.foo.update(new_value=(datetime.date(2023, 11, 1), datetime.date(2023, 11, 3)))
312312
Parameters.set_url_fields()
313-
set_query_params.assert_called_with(foo='(2023-11-01,2023-11-03)')
313+
set_query_params.assert_called_with({"foo": '(2023-11-01,2023-11-03)'})
314314

315315

316316
def test_as_dict(

0 commit comments

Comments
 (0)