lenawilli commited on
Commit
a7eb37d
·
verified ·
1 Parent(s): 9797fd3

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. 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("Unknown")
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
- if "queue" not in st.session_state:
127
- random.shuffle(movie_titles)
128
- st.session_state.queue = movie_titles.copy()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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!")