File size: 1,846 Bytes
6e00079
bdbd74f
6e00079
 
 
 
7aaf509
 
 
 
 
 
6e00079
 
 
d7c3acb
6e00079
 
7aaf509
 
6e00079
 
7aaf509
 
6e00079
 
7aaf509
6e00079
 
 
 
d7c3acb
 
 
bdbd74f
d7c3acb
6e00079
 
7aaf509
 
 
d7c3acb
 
6e00079
 
d7c3acb
 
bdbd74f
d7c3acb
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import streamlit as st
from datetime import datetime

@st.cache_data
def get_search_mask(df, search_query):
    return (
        df['world'].str.contains(search_query, case=False, na=False) |
        df['name'].str.contains(search_query, case=False, na=False) |
        df['short_story'].str.contains(search_query, case=False, na=False) |
        df['description'].str.contains(search_query, case=False, na=False) |
        df['style'].str.contains(search_query, case=False, na=False) |
        df['first_message'].str.contains(search_query, case=False, na=False)
    )

@st.cache_data
def apply_filters(locale, df, search_query, absurdity_range, selected_mood, selected_tags):
    """Применение фильтров и сортировки"""
    filtered_df = df[
        (df['absurdity'] >= absurdity_range[0]) & 
        (df['absurdity'] <= absurdity_range[1])
    ]
    
    if selected_mood != locale['filter_all']:
        filtered_df = filtered_df[filtered_df['mood'] == selected_mood]
    
    if selected_tags:
        filtered_df = filtered_df[filtered_df['tags'].str.contains("|".join(selected_tags))]
    
    if search_query:
        mask = get_search_mask(df, search_query)
        filtered_df = filtered_df[mask]

    return filtered_df

@st.cache_data(ttl=120)
def apply_sort(locale, df, sort_option):
    # Сортировка
    sort_columns = {
        locale['filter_sort'][0]: ("name", True),
        locale['filter_sort'][1]: ("name", False),
        locale['filter_sort'][2]: ("absurdity", True),
        locale['filter_sort'][3]: ("absurdity", False),
        locale['filter_sort'][4]: ("random", None)
    }
    col, asc = sort_columns[sort_option]

    if col == "random":
        return df.sample(frac=1, random_state=int(datetime.now().timestamp()))
    else:
        return df.sort_values(col, ascending=asc)