ru_characters_explorer / src /streamlit_app.py
loim's picture
docker
f78fd27
raw
history blame
1.96 kB
import streamlit as st
from streamlit_local_storage import LocalStorage
from database import init_supabase
from utils import apply_filters, apply_sort
from locales import load_locale, lang_codes
from data_loader import load_data, get_unique_mood, get_unique_tags
from ui_components import render_sidebar, render_main_content, load_css
DEFAULT_LANG = "en"
# Настройки страницы
st.set_page_config(layout="wide", page_icon="🧙", page_title="Fantasy Characters Explorer")
localS = LocalStorage()
# Загрузка данных
database = init_supabase()
df = load_data()
st.session_state.lang = localS.getItem("lang")
all_langs = lang_codes()
if st.session_state.lang not in all_langs:
st.session_state.lang = (st.context.locale.split("-", 1)[0] if st.context.locale else DEFAULT_LANG)
localS.setItem("lang", st.session_state.lang)
locale = load_locale(st.session_state.lang)
if 'rated' not in st.session_state:
st.session_state.rated = localS.getItem("rated")
if st.session_state.rated is None:
st.session_state.rated = []
# Загрузка стилей
st.markdown(f"<style>{load_css()}</style>", unsafe_allow_html=True)
# Получение уникальных значений для фильтров
moods = [locale['filter_all']] + get_unique_mood(df)
all_tags = get_unique_tags(df)
# Рендеринг сайдбара с фильтрами
selected_filters = render_sidebar(localS, locale, all_langs, moods, all_tags)
# Применение фильтров
filtered_df = apply_filters(
locale,
df=df,
search_query=selected_filters['search_query'],
absurdity_range=selected_filters['absurdity_range'],
selected_mood=selected_filters['selected_mood'],
selected_tags=selected_filters['selected_tags']
)
sorted_df = apply_sort(locale, filtered_df, selected_filters['sort_option'])
# Основной контент
render_main_content(locale, database, localS, sorted_df)