AmmarFahmy
adding all files
105b369
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