Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +24 -11
src/streamlit_app.py
CHANGED
|
@@ -5,14 +5,11 @@ import os
|
|
| 5 |
import json
|
| 6 |
from datetime import datetime
|
| 7 |
|
| 8 |
-
# Page config to use full width
|
| 9 |
st.set_page_config(layout="wide")
|
| 10 |
|
| 11 |
-
# Constants
|
| 12 |
MOVIES_PATH = os.path.join(os.path.dirname(__file__), "movies.csv")
|
| 13 |
RATINGS_JSON_PATH = "/tmp/ratings.json"
|
| 14 |
|
| 15 |
-
# Load or create ratings JSON
|
| 16 |
def load_ratings():
|
| 17 |
if os.path.exists(RATINGS_JSON_PATH):
|
| 18 |
with open(RATINGS_JSON_PATH, "r") as f:
|
|
@@ -26,11 +23,10 @@ def save_rating_to_json(entry):
|
|
| 26 |
with open(RATINGS_JSON_PATH, "w") as f:
|
| 27 |
json.dump(all_ratings, f, indent=2, default=str)
|
| 28 |
|
| 29 |
-
# Load movie data
|
| 30 |
@st.cache_data
|
| 31 |
def load_movies():
|
| 32 |
df = pd.read_csv(MOVIES_PATH)
|
| 33 |
-
df["year"] = df["title"].str.extract(r'\((\d{4})\)').fillna("
|
| 34 |
df["clean_title"] = df["title"].str.replace(r'\(\d{4}\)', '', regex=True).str.strip()
|
| 35 |
df["genres"] = df["genres"].fillna("Unknown")
|
| 36 |
return df
|
|
@@ -117,17 +113,34 @@ def render_star_rating(rating):
|
|
| 117 |
all_ratings_data = load_ratings()
|
| 118 |
|
| 119 |
if movie_id:
|
| 120 |
-
# Detail Page
|
| 121 |
-
... # Unverändert
|
| 122 |
|
| 123 |
elif page:
|
| 124 |
-
# 🎲 Random Movie Rating Flow
|
| 125 |
st.title("🎲 Rate Random Movies")
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 129 |
st.session_state.index = 0
|
| 130 |
st.session_state.rated = []
|
|
|
|
| 131 |
|
| 132 |
if st.session_state.index >= len(st.session_state.queue):
|
| 133 |
st.subheader("🎉 You've rated enough movies!")
|
|
|
|
| 5 |
import json
|
| 6 |
from datetime import datetime
|
| 7 |
|
|
|
|
| 8 |
st.set_page_config(layout="wide")
|
| 9 |
|
|
|
|
| 10 |
MOVIES_PATH = os.path.join(os.path.dirname(__file__), "movies.csv")
|
| 11 |
RATINGS_JSON_PATH = "/tmp/ratings.json"
|
| 12 |
|
|
|
|
| 13 |
def load_ratings():
|
| 14 |
if os.path.exists(RATINGS_JSON_PATH):
|
| 15 |
with open(RATINGS_JSON_PATH, "r") as f:
|
|
|
|
| 23 |
with open(RATINGS_JSON_PATH, "w") as f:
|
| 24 |
json.dump(all_ratings, f, indent=2, default=str)
|
| 25 |
|
|
|
|
| 26 |
@st.cache_data
|
| 27 |
def load_movies():
|
| 28 |
df = pd.read_csv(MOVIES_PATH)
|
| 29 |
+
df["year"] = df["title"].str.extract(r'\((\d{4})\)').fillna("0").astype(int)
|
| 30 |
df["clean_title"] = df["title"].str.replace(r'\(\d{4}\)', '', regex=True).str.strip()
|
| 31 |
df["genres"] = df["genres"].fillna("Unknown")
|
| 32 |
return df
|
|
|
|
| 113 |
all_ratings_data = load_ratings()
|
| 114 |
|
| 115 |
if movie_id:
|
| 116 |
+
... # Detail Page unverändert
|
|
|
|
| 117 |
|
| 118 |
elif page:
|
|
|
|
| 119 |
st.title("🎲 Rate Random Movies")
|
| 120 |
+
|
| 121 |
+
# Filter UI
|
| 122 |
+
genres_all = sorted(set("|".join(movie_df["genres"]).split("|")))
|
| 123 |
+
selected_genres = st.multiselect("Filter by genres", genres_all)
|
| 124 |
+
|
| 125 |
+
min_year = movie_df["year"].replace(0, pd.NA).dropna().min()
|
| 126 |
+
max_year = movie_df["year"].max()
|
| 127 |
+
selected_year_range = st.slider("Filter by release year", min_year, max_year, (min_year, max_year))
|
| 128 |
+
|
| 129 |
+
# Filter movie list
|
| 130 |
+
filtered_df = movie_df.copy()
|
| 131 |
+
if selected_genres:
|
| 132 |
+
genre_filter = filtered_df["genres"].apply(lambda g: any(gen in g for gen in selected_genres))
|
| 133 |
+
filtered_df = filtered_df[genre_filter]
|
| 134 |
+
filtered_df = filtered_df[(filtered_df["year"] >= selected_year_range[0]) & (filtered_df["year"] <= selected_year_range[1])]
|
| 135 |
+
|
| 136 |
+
filtered_titles = filtered_df["title"].tolist()
|
| 137 |
+
|
| 138 |
+
if "queue" not in st.session_state or st.session_state.get("filter_hash") != hash((tuple(selected_genres), selected_year_range)):
|
| 139 |
+
random.shuffle(filtered_titles)
|
| 140 |
+
st.session_state.queue = filtered_titles
|
| 141 |
st.session_state.index = 0
|
| 142 |
st.session_state.rated = []
|
| 143 |
+
st.session_state.filter_hash = hash((tuple(selected_genres), selected_year_range))
|
| 144 |
|
| 145 |
if st.session_state.index >= len(st.session_state.queue):
|
| 146 |
st.subheader("🎉 You've rated enough movies!")
|