Spaces:
Runtime error
Runtime error
from typing import Optional | |
from os import getenv, environ | |
try: | |
import streamlit as st | |
except ImportError: | |
raise ImportError("`streamlit` library not installed. Please install using `pip install streamlit`") | |
def get_username_sidebar() -> Optional[str]: | |
"""Sidebar component to get username""" | |
# Get username from user if not in session state | |
if "username" not in st.session_state: | |
username_input_container = st.sidebar.empty() | |
username = username_input_container.text_input(":technologist: Enter username") | |
if username != "": | |
st.session_state["username"] = username | |
username_input_container.empty() | |
# Get username from session state | |
username = st.session_state.get("username") # type: ignore | |
return username | |
def reload_button_sidebar(text: str = "Reload Session", **kwargs) -> None: | |
"""Sidebar component to show reload button""" | |
if st.sidebar.button(text, **kwargs): | |
st.session_state.clear() | |
st.rerun() | |
def check_password(password_env_var: str = "APP_PASSWORD") -> bool: | |
"""Component to check if a password entered by the user is correct. | |
To use this component, set the environment variable `APP_PASSWORD`. | |
Args: | |
password_env_var (str, optional): The environment variable to use for the password. Defaults to "APP_PASSWORD". | |
Returns: | |
bool: `True` if the user had the correct password. | |
""" | |
app_password = getenv(password_env_var) | |
if app_password is None: | |
return True | |
def check_first_run_password(): | |
"""Checks whether a password entered on the first run is correct.""" | |
if "first_run_password" in st.session_state: | |
password_to_check = st.session_state["first_run_password"] | |
if password_to_check == app_password: | |
st.session_state["password_correct"] = True | |
# don't store password | |
del st.session_state["first_run_password"] | |
else: | |
st.session_state["password_correct"] = False | |
def check_updated_password(): | |
"""Checks whether an updated password is correct.""" | |
if "updated_password" in st.session_state: | |
password_to_check = st.session_state["updated_password"] | |
if password_to_check == app_password: | |
st.session_state["password_correct"] = True | |
# don't store password | |
del st.session_state["updated_password"] | |
else: | |
st.session_state["password_correct"] = False | |
# First run, show input for password. | |
if "password_correct" not in st.session_state: | |
st.text_input( | |
"Password", | |
type="password", | |
on_change=check_first_run_password, | |
key="first_run_password", | |
) | |
return False | |
# Password incorrect, show input for updated password + error. | |
elif not st.session_state["password_correct"]: | |
st.text_input( | |
"Password", | |
type="password", | |
on_change=check_updated_password, | |
key="updated_password", | |
) | |
st.error("π Password incorrect") | |
return False | |
# Password correct. | |
else: | |
return True | |
def get_openai_key_sidebar() -> Optional[str]: | |
"""Sidebar component to get OpenAI API key""" | |
# Get OpenAI API key from environment variable | |
openai_key: Optional[str] = getenv("OPENAI_API_KEY") | |
# If not found, get it from user input | |
if openai_key is None or openai_key == "" or openai_key == "sk-***": | |
api_key = st.sidebar.text_input("OpenAI API key", placeholder="sk-***", key="api_key") | |
if api_key != "sk-***" or api_key != "" or api_key is not None: | |
openai_key = api_key | |
# Store it in session state and environment variable | |
if openai_key is not None and openai_key != "": | |
st.session_state["OPENAI_API_KEY"] = openai_key | |
environ["OPENAI_API_KEY"] = openai_key | |
return openai_key | |