Spaces:
Running
Running
Deploy (see actual commits on https://github.com/mlcommons/croissant).
Browse files- app.py +5 -4
- core/query_params.py +42 -6
- requirements.txt +2 -1
app.py
CHANGED
|
@@ -6,7 +6,9 @@ from components.flex import st_flex
|
|
| 6 |
from core.constants import OAUTH_CLIENT_ID
|
| 7 |
from core.constants import OAUTH_STATE
|
| 8 |
from core.constants import REDIRECT_URI
|
|
|
|
| 9 |
from core.query_params import get_project_timestamp
|
|
|
|
| 10 |
from core.state import CurrentProject
|
| 11 |
from core.state import get_user
|
| 12 |
from core.state import User
|
|
@@ -21,8 +23,7 @@ init_state()
|
|
| 21 |
user = get_user()
|
| 22 |
|
| 23 |
if OAUTH_CLIENT_ID and not user:
|
| 24 |
-
|
| 25 |
-
state = query_params.get_all("state")
|
| 26 |
if state and state[0] == OAUTH_STATE:
|
| 27 |
code = query_params["code"]
|
| 28 |
if not code:
|
|
@@ -34,7 +35,7 @@ if OAUTH_CLIENT_ID and not user:
|
|
| 34 |
except:
|
| 35 |
raise
|
| 36 |
finally:
|
| 37 |
-
|
| 38 |
else:
|
| 39 |
redirect_uri = urllib.parse.quote(REDIRECT_URI, safe="")
|
| 40 |
client_id = urllib.parse.quote(OAUTH_CLIENT_ID, safe="")
|
|
@@ -48,7 +49,7 @@ if OAUTH_CLIENT_ID and not user:
|
|
| 48 |
|
| 49 |
def _back_to_menu():
|
| 50 |
"""Sends the user back to the menu."""
|
| 51 |
-
|
| 52 |
init_state(force=True)
|
| 53 |
|
| 54 |
|
|
|
|
| 6 |
from core.constants import OAUTH_CLIENT_ID
|
| 7 |
from core.constants import OAUTH_STATE
|
| 8 |
from core.constants import REDIRECT_URI
|
| 9 |
+
from core.query_params import clear_query_params
|
| 10 |
from core.query_params import get_project_timestamp
|
| 11 |
+
from core.query_params import get_state
|
| 12 |
from core.state import CurrentProject
|
| 13 |
from core.state import get_user
|
| 14 |
from core.state import User
|
|
|
|
| 23 |
user = get_user()
|
| 24 |
|
| 25 |
if OAUTH_CLIENT_ID and not user:
|
| 26 |
+
state = get_state("state")
|
|
|
|
| 27 |
if state and state[0] == OAUTH_STATE:
|
| 28 |
code = query_params["code"]
|
| 29 |
if not code:
|
|
|
|
| 35 |
except:
|
| 36 |
raise
|
| 37 |
finally:
|
| 38 |
+
clear_query_params()
|
| 39 |
else:
|
| 40 |
redirect_uri = urllib.parse.quote(REDIRECT_URI, safe="")
|
| 41 |
client_id = urllib.parse.quote(OAUTH_CLIENT_ID, safe="")
|
|
|
|
| 49 |
|
| 50 |
def _back_to_menu():
|
| 51 |
"""Sends the user back to the menu."""
|
| 52 |
+
clear_query_params()
|
| 53 |
init_state(force=True)
|
| 54 |
|
| 55 |
|
core/query_params.py
CHANGED
|
@@ -15,20 +15,44 @@ class QueryParams:
|
|
| 15 |
OPEN_RECORD_SET = "recordSet"
|
| 16 |
|
| 17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
def _get_query_param(name: str) -> str | None:
|
| 19 |
"""Gets query param with the name `name`."""
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
if isinstance(param, list) and len(param) > 0:
|
| 22 |
return param[0]
|
| 23 |
return None
|
| 24 |
|
| 25 |
|
| 26 |
def _set_query_param(param: str, new_value: str) -> str | None:
|
| 27 |
-
|
| 28 |
-
if
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
| 33 |
|
| 34 |
def is_record_set_expanded(record_set: RecordSet) -> bool:
|
|
@@ -46,5 +70,17 @@ def get_project_timestamp() -> str | None:
|
|
| 46 |
return _get_query_param(QueryParams.OPEN_PROJECT)
|
| 47 |
|
| 48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
def set_project(project: CurrentProject):
|
| 50 |
_set_query_param(QueryParams.OPEN_PROJECT, project.path.name)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
OPEN_RECORD_SET = "recordSet"
|
| 16 |
|
| 17 |
|
| 18 |
+
def _has_query_params() -> bool:
|
| 19 |
+
"""Returns whether `query_params` is available, which depends on the streamlit
|
| 20 |
+
version. If not, st.experimental_get_query_params() and
|
| 21 |
+
st.experimental_set_query_params() should be used."""
|
| 22 |
+
return hasattr(st, "query_params")
|
| 23 |
+
|
| 24 |
+
|
| 25 |
def _get_query_param(name: str) -> str | None:
|
| 26 |
"""Gets query param with the name `name`."""
|
| 27 |
+
if _has_query_params():
|
| 28 |
+
param = st.query_params.get_all(name)
|
| 29 |
+
else:
|
| 30 |
+
params = st.experimental_get_query_params()
|
| 31 |
+
if not name in params:
|
| 32 |
+
return None
|
| 33 |
+
param = params[name]
|
| 34 |
+
|
| 35 |
if isinstance(param, list) and len(param) > 0:
|
| 36 |
return param[0]
|
| 37 |
return None
|
| 38 |
|
| 39 |
|
| 40 |
def _set_query_param(param: str, new_value: str) -> str | None:
|
| 41 |
+
"""Sets query param with the name `name` to `new_value`."""
|
| 42 |
+
if _has_query_params():
|
| 43 |
+
params = st.query_params
|
| 44 |
+
if params.get_all(param) == [new_value]:
|
| 45 |
+
# The value already exists in the query params.
|
| 46 |
+
return
|
| 47 |
+
params[param] = new_value
|
| 48 |
+
else:
|
| 49 |
+
params = st.experimental_get_query_params()
|
| 50 |
+
if params.get(param) == [new_value]:
|
| 51 |
+
# The value already exists in the query params.
|
| 52 |
+
return
|
| 53 |
+
new_params = {k: v for k, v in params.items() if k != param}
|
| 54 |
+
new_params[param] = new_value
|
| 55 |
+
st.experimental_set_query_params(**new_params)
|
| 56 |
|
| 57 |
|
| 58 |
def is_record_set_expanded(record_set: RecordSet) -> bool:
|
|
|
|
| 70 |
return _get_query_param(QueryParams.OPEN_PROJECT)
|
| 71 |
|
| 72 |
|
| 73 |
+
def get_state() -> str | None:
|
| 74 |
+
return _get_query_param("state")
|
| 75 |
+
|
| 76 |
+
|
| 77 |
def set_project(project: CurrentProject):
|
| 78 |
_set_query_param(QueryParams.OPEN_PROJECT, project.path.name)
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
def clear_query_params():
|
| 82 |
+
"""Clears query params."""
|
| 83 |
+
if _has_query_params():
|
| 84 |
+
st.query_params.clear()
|
| 85 |
+
else:
|
| 86 |
+
st.experimental_set_query_params()
|
requirements.txt
CHANGED
|
@@ -6,5 +6,6 @@ pytest
|
|
| 6 |
python-magic
|
| 7 |
rdflib
|
| 8 |
requests
|
| 9 |
-
streamlit
|
| 10 |
streamlit-nested-layout
|
|
|
|
|
|
| 6 |
python-magic
|
| 7 |
rdflib
|
| 8 |
requests
|
| 9 |
+
streamlit
|
| 10 |
streamlit-nested-layout
|
| 11 |
+
twisted
|