James McCool
commited on
Commit
·
a707b59
1
Parent(s):
2841628
Enhance caching and data handling in app.py for improved performance
Browse files- Added caching decorators to several functions to optimize data retrieval and processing, enhancing application performance.
- Introduced a new function to highlight specific rows in the dataframe based on conditions, improving data visualization for users.
- These changes aim to streamline data management and enhance user experience by ensuring efficient data handling and clearer presentation of information.
app.py
CHANGED
@@ -10,6 +10,7 @@ from datetime import datetime
|
|
10 |
|
11 |
# Just setting a note here to say that I should attempt to do some memory allocation savings and swap to numpy soon
|
12 |
|
|
|
13 |
def init_conn():
|
14 |
|
15 |
uri = st.secrets['mongo_uri']
|
@@ -17,7 +18,8 @@ def init_conn():
|
|
17 |
db = client['Contest_Information']
|
18 |
|
19 |
return db
|
20 |
-
|
|
|
21 |
def grab_contest_names(db, sport, type):
|
22 |
if type == 'Classic':
|
23 |
db_type = 'reg'
|
@@ -33,6 +35,7 @@ def grab_contest_names(db, sport, type):
|
|
33 |
|
34 |
return contest_names, curr_info
|
35 |
|
|
|
36 |
def grab_contest_player_info(db, sport, type, contest_date, contest_name, contest_id_map):
|
37 |
if type == 'Classic':
|
38 |
db_type = 'reg'
|
@@ -56,6 +59,7 @@ def grab_contest_player_info(db, sport, type, contest_date, contest_name, contes
|
|
56 |
|
57 |
return player_info, info_maps
|
58 |
|
|
|
59 |
def export_contest_file(db, sport, type, contest_date, contest_id, contest_data):
|
60 |
if type == 'Classic':
|
61 |
db_type = 'reg'
|
@@ -103,12 +107,20 @@ from global_func.create_stack_comparison import create_stack_comparison
|
|
103 |
from global_func.create_size_comparison import create_size_comparison
|
104 |
from global_func.create_general_comparison import create_general_comparison
|
105 |
|
|
|
106 |
def is_valid_input(file):
|
107 |
if isinstance(file, pd.DataFrame):
|
108 |
return not file.empty
|
109 |
else:
|
110 |
return file is not None # For Streamlit uploader objects
|
111 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
player_exposure_format = {'Exposure Overall': '{:.2%}', 'Exposure Top 1%': '{:.2%}', 'Exposure Top 5%': '{:.2%}', 'Exposure Top 10%': '{:.2%}', 'Exposure Top 20%': '{:.2%}'}
|
113 |
dupe_format = {'uniques%': '{:.2%}', 'under_5%': '{:.2%}', 'under_10%': '{:.2%}'}
|
114 |
|
@@ -496,6 +508,7 @@ with tab2:
|
|
496 |
end_idx = min((st.session_state.current_page) * rows_per_page, total_rows)
|
497 |
st.dataframe(
|
498 |
st.session_state['display_contest_info'].iloc[start_idx:end_idx].style
|
|
|
499 |
.background_gradient(axis=0)
|
500 |
.background_gradient(cmap='RdYlGn')
|
501 |
.format(precision=2),
|
|
|
10 |
|
11 |
# Just setting a note here to say that I should attempt to do some memory allocation savings and swap to numpy soon
|
12 |
|
13 |
+
@st.cache_resource
|
14 |
def init_conn():
|
15 |
|
16 |
uri = st.secrets['mongo_uri']
|
|
|
18 |
db = client['Contest_Information']
|
19 |
|
20 |
return db
|
21 |
+
|
22 |
+
@st.cache_data
|
23 |
def grab_contest_names(db, sport, type):
|
24 |
if type == 'Classic':
|
25 |
db_type = 'reg'
|
|
|
35 |
|
36 |
return contest_names, curr_info
|
37 |
|
38 |
+
@st.cache_data
|
39 |
def grab_contest_player_info(db, sport, type, contest_date, contest_name, contest_id_map):
|
40 |
if type == 'Classic':
|
41 |
db_type = 'reg'
|
|
|
59 |
|
60 |
return player_info, info_maps
|
61 |
|
62 |
+
@st.cache_data
|
63 |
def export_contest_file(db, sport, type, contest_date, contest_id, contest_data):
|
64 |
if type == 'Classic':
|
65 |
db_type = 'reg'
|
|
|
107 |
from global_func.create_size_comparison import create_size_comparison
|
108 |
from global_func.create_general_comparison import create_general_comparison
|
109 |
|
110 |
+
@st.cache_data
|
111 |
def is_valid_input(file):
|
112 |
if isinstance(file, pd.DataFrame):
|
113 |
return not file.empty
|
114 |
else:
|
115 |
return file is not None # For Streamlit uploader objects
|
116 |
|
117 |
+
@st.cache_data
|
118 |
+
def highlight_row_condition(row):
|
119 |
+
if row['BaseName'] == 'Backtesting_upload':
|
120 |
+
return ['background-color: lightgreen'] * len(row)
|
121 |
+
else:
|
122 |
+
return [''] * len(row)
|
123 |
+
|
124 |
player_exposure_format = {'Exposure Overall': '{:.2%}', 'Exposure Top 1%': '{:.2%}', 'Exposure Top 5%': '{:.2%}', 'Exposure Top 10%': '{:.2%}', 'Exposure Top 20%': '{:.2%}'}
|
125 |
dupe_format = {'uniques%': '{:.2%}', 'under_5%': '{:.2%}', 'under_10%': '{:.2%}'}
|
126 |
|
|
|
508 |
end_idx = min((st.session_state.current_page) * rows_per_page, total_rows)
|
509 |
st.dataframe(
|
510 |
st.session_state['display_contest_info'].iloc[start_idx:end_idx].style
|
511 |
+
.apply(highlight_row_condition, axis=1)
|
512 |
.background_gradient(axis=0)
|
513 |
.background_gradient(cmap='RdYlGn')
|
514 |
.format(precision=2),
|