mllm-streamlit/lib/extension.py

103 lines
2.7 KiB
Python

import re
import time
import streamlit as st
from streamlit_js_eval import streamlit_js_eval
ss = st.session_state
# Allows us to get a Streamlit cookie safely without added fuss:
def get_cookie(key):
if "cookies" in ss:
if key in ss.cookies.keys():
value = ss.cookies[key]
if value is None or len(value) < 1:
del ss.cookies[key]
return None
return ss.cookies[key]
cookies = st.context.cookies
if "cookies" not in st.session_state:
ss.cookies = {}
if key in cookies.keys():
ss.cookies[key] = cookies[key]
return cookies[key]
return None
# Set a cookie in-page using JavaScript without the "rerun" BS:
def set_cookie(key, value):
print(f"set_cookie({key}, {value}) called...")
if value is None:
value = ""
javascript_string = f"""
var cookies = parent.document.cookie;
parent.document.cookie = `{key}={value};`;
console.log(`parent.document.cookie = ${{parent.document.cookie}}`)
"""
streamlit_js_eval(js_expressions=javascript_string)
time.sleep(1)
def page_redirect(url=""):
js = f"""
var link = parent.document.createElement("a");
parent.document.body.appendChild(link);
link.href = "{url}";
if (link.href === "")
link.href = window.location.href;
link.click();
"""
streamlit_js_eval(js_expressions=js)
def perform_redirect(pg_category, pg_name):
if pg_category not in ss.PAGE_REGISTRY_MAP.keys(): return
if pg_name not in ss.PAGE_REGISTRY_MAP[pg_category].keys(): return
pg = ss.PAGE_REGISTRY_MAP[pg_category][pg_name]
st.switch_page(pg)
def handle_redirect():
if "redirect_page_category" in st.session_state:
if "redirect_page_name" in st.session_state:
pg_category = ss.redirect_page_category
pg_name = ss.redirect_page_name
del st.session_state.redirect_page_category
del st.session_state.redirect_page_name
perform_redirect(pg_category, pg_name)
def redirect(pg_category, pg_name):
print(f"Redirecting to page {pg_category} {pg_name}")
st.session_state.redirect_page_category = pg_category
st.session_state.redirect_page_name = pg_name
st.rerun()
def hide_deploy_button():
st.markdown("""
<style>
.stAppDeployButton { display: none; }
</style>
""", unsafe_allow_html=True)
def shrink_sidebar():
js = """
setTimeout(function() {
const sidebar = document.querySelector(".stSidebar");
sidebar.style.width = "244px";
}, 2500);
"""
streamlit_js_eval(js_expressions=js)