limloop commited on
Commit
d7c3acb
·
1 Parent(s): 3a71b70

add random sort

Browse files
Files changed (5) hide show
  1. app.py +6 -4
  2. locales/en.json +1 -1
  3. locales/ru.json +1 -1
  4. ui_components.py +8 -1
  5. utils.py +12 -4
app.py CHANGED
@@ -1,6 +1,6 @@
1
  import streamlit as st
2
  from streamlit_cookies_controller import CookieController
3
- from utils import apply_filters
4
  from locales import load_locale, lang_codes
5
  from data_loader import load_data, get_unique_mood, get_unique_tags
6
  from ui_components import render_sidebar, render_main_content, load_css
@@ -41,9 +41,11 @@ filtered_df = apply_filters(
41
  search_query=selected_filters['search_query'],
42
  absurdity_range=selected_filters['absurdity_range'],
43
  selected_mood=selected_filters['selected_mood'],
44
- selected_tags=selected_filters['selected_tags'],
45
- sort_option=selected_filters['sort_option']
46
  )
47
 
 
 
 
48
  # Основной контент
49
- render_main_content(locale, filtered_df)
 
1
  import streamlit as st
2
  from streamlit_cookies_controller import CookieController
3
+ from utils import apply_filters, apply_sort
4
  from locales import load_locale, lang_codes
5
  from data_loader import load_data, get_unique_mood, get_unique_tags
6
  from ui_components import render_sidebar, render_main_content, load_css
 
41
  search_query=selected_filters['search_query'],
42
  absurdity_range=selected_filters['absurdity_range'],
43
  selected_mood=selected_filters['selected_mood'],
44
+ selected_tags=selected_filters['selected_tags']
 
45
  )
46
 
47
+ sorted_df = apply_sort(locale, filtered_df, selected_filters['sort_option'])
48
+
49
+
50
  # Основной контент
51
+ render_main_content(locale, sorted_df)
locales/en.json CHANGED
@@ -4,7 +4,7 @@
4
  "filter_title": "🔮 Filters",
5
  "filter_search": "🔍 Search by name/description",
6
  "filter_sort_title": "Sorting",
7
- "filter_sort": ["By name (A→Z)", "By name (Z→A)", "By absurdity (↑)", "By absurdity (↓)"],
8
  "filter_absurd": "Absurdity level",
9
  "filter_mood": "Mood",
10
  "filter_tags": "Tags",
 
4
  "filter_title": "🔮 Filters",
5
  "filter_search": "🔍 Search by name/description",
6
  "filter_sort_title": "Sorting",
7
+ "filter_sort": ["By name (A→Z)", "By name (Z→A)", "By absurdity (↑)", "By absurdity (↓)", "Random (🎲)"],
8
  "filter_absurd": "Absurdity level",
9
  "filter_mood": "Mood",
10
  "filter_tags": "Tags",
locales/ru.json CHANGED
@@ -4,7 +4,7 @@
4
  "filter_title": "🔮 Фильтры",
5
  "filter_search": "🔍 Поиск по имени/описанию",
6
  "filter_sort_title": "Сортировка",
7
- "filter_sort": ["По имени (А→Я)", "По имени (Я→А)", "По абсурдности (↑)", "По абсурдности (↓)"],
8
  "filter_absurd": "Уровень абсурдности",
9
  "filter_mood": "Настроение",
10
  "filter_tags": "Теги",
 
4
  "filter_title": "🔮 Фильтры",
5
  "filter_search": "🔍 Поиск по имени/описанию",
6
  "filter_sort_title": "Сортировка",
7
+ "filter_sort": ["По имени (А→Я)", "По имени (Я→А)", "По абсурдности (↑)", "По абсурдности (↓)", "Случайно (🎲)"],
8
  "filter_absurd": "Уровень абсурдности",
9
  "filter_mood": "Настроение",
10
  "filter_tags": "Теги",
ui_components.py CHANGED
@@ -1,4 +1,5 @@
1
  import streamlit as st
 
2
 
3
  @st.cache_resource
4
  def load_css():
@@ -20,6 +21,10 @@ def render_sidebar(cookie, locale, all_langs, moods, all_tags):
20
  if st.session_state.lang_select != st.session_state.lang:
21
  cookie.set("lang", st.session_state.lang_select, secure=True, same_site=None)
22
 
 
 
 
 
23
  st.selectbox(
24
  locale['filter_lang'],
25
  all_langs,
@@ -34,7 +39,9 @@ def render_sidebar(cookie, locale, all_langs, moods, all_tags):
34
  search_query = st.text_input(locale['filter_search'], "")
35
  sort_option = st.selectbox(
36
  locale['filter_sort_title'],
37
- locale['filter_sort']
 
 
38
  )
39
  absurdity_range = st.slider(locale['filter_absurd'], 0, 10, (0, 10))
40
  selected_mood = st.selectbox(locale['filter_mood'], moods)
 
1
  import streamlit as st
2
+ from datetime import datetime
3
 
4
  @st.cache_resource
5
  def load_css():
 
21
  if st.session_state.lang_select != st.session_state.lang:
22
  cookie.set("lang", st.session_state.lang_select, secure=True, same_site=None)
23
 
24
+ def on_sort_change():
25
+ if st.session_state.sort_select == locale['filter_sort'][4]:
26
+ st.session_state.user_random = int(datetime.now().timestamp())
27
+
28
  st.selectbox(
29
  locale['filter_lang'],
30
  all_langs,
 
39
  search_query = st.text_input(locale['filter_search'], "")
40
  sort_option = st.selectbox(
41
  locale['filter_sort_title'],
42
+ locale['filter_sort'],
43
+ on_change=on_sort_change,
44
+ key="sort_select"
45
  )
46
  absurdity_range = st.slider(locale['filter_absurd'], 0, 10, (0, 10))
47
  selected_mood = st.selectbox(locale['filter_mood'], moods)
utils.py CHANGED
@@ -12,7 +12,7 @@ def get_search_mask(df, search_query):
12
  )
13
 
14
  @st.cache_data
15
- def apply_filters(locale, df, search_query, absurdity_range, selected_mood, selected_tags, sort_option):
16
  """Применение фильтров и сортировки"""
17
  filtered_df = df[
18
  (df['absurdity'] >= absurdity_range[0]) &
@@ -28,13 +28,21 @@ def apply_filters(locale, df, search_query, absurdity_range, selected_mood, sele
28
  if search_query:
29
  mask = get_search_mask(df, search_query)
30
  filtered_df = filtered_df[mask]
31
-
 
 
 
32
  # Сортировка
33
  sort_columns = {
34
  locale['filter_sort'][0]: ("name", True),
35
  locale['filter_sort'][1]: ("name", False),
36
  locale['filter_sort'][2]: ("absurdity", True),
37
- locale['filter_sort'][3]: ("absurdity", False)
 
38
  }
39
  col, asc = sort_columns[sort_option]
40
- return filtered_df.sort_values(col, ascending=asc)
 
 
 
 
 
12
  )
13
 
14
  @st.cache_data
15
+ def apply_filters(locale, df, search_query, absurdity_range, selected_mood, selected_tags):
16
  """Применение фильтров и сортировки"""
17
  filtered_df = df[
18
  (df['absurdity'] >= absurdity_range[0]) &
 
28
  if search_query:
29
  mask = get_search_mask(df, search_query)
30
  filtered_df = filtered_df[mask]
31
+
32
+ return filtered_df
33
+
34
+ def apply_sort(locale, df, sort_option):
35
  # Сортировка
36
  sort_columns = {
37
  locale['filter_sort'][0]: ("name", True),
38
  locale['filter_sort'][1]: ("name", False),
39
  locale['filter_sort'][2]: ("absurdity", True),
40
+ locale['filter_sort'][3]: ("absurdity", False),
41
+ locale['filter_sort'][4]: ("random", None)
42
  }
43
  col, asc = sort_columns[sort_option]
44
+
45
+ if col == "random":
46
+ return df.sample(frac=1, random_state=st.session_state.user_random)
47
+ else:
48
+ return df.sort_values(col, ascending=asc)