James McCool
commited on
Commit
·
39841d9
1
Parent(s):
06c79a5
Add contest file export functionality in app.py
Browse files- Introduced a new function, export_contest_file, to handle the export of contest data to the database, ensuring data integrity by checking for existing entries.
- Implemented chunked data insertion to optimize database performance and added error handling for robust data processing.
- Updated the user interface to include a button for exporting contest files, enhancing user interaction and data management capabilities.
app.py
CHANGED
|
@@ -54,6 +54,39 @@ def grab_contest_player_info(db, sport, type, contest_date, contest_name, contes
|
|
| 54 |
|
| 55 |
return player_info, info_maps
|
| 56 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
db = init_conn()
|
| 58 |
|
| 59 |
## import global functions
|
|
@@ -140,7 +173,12 @@ with tab1:
|
|
| 140 |
st.session_state['Contest'] = st.session_state['Contest'].dropna(how='all')
|
| 141 |
st.session_state['Contest'] = st.session_state['Contest'].reset_index(drop=True)
|
| 142 |
if st.session_state['Contest'] is not None:
|
| 143 |
-
st.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
st.dataframe(st.session_state['Contest'].head(100))
|
| 145 |
|
| 146 |
if 'Contest_file' in st.session_state:
|
|
|
|
| 54 |
|
| 55 |
return player_info, info_maps
|
| 56 |
|
| 57 |
+
def export_contest_file(db, sport, type, contest_date, contest_id, contest_data):
|
| 58 |
+
if type == 'Classic':
|
| 59 |
+
db_type = 'reg'
|
| 60 |
+
elif type == 'Showdown':
|
| 61 |
+
db_type = 'showdown'
|
| 62 |
+
collection = db[f'{sport}_{db_type}_contest_data']
|
| 63 |
+
try:
|
| 64 |
+
cursor = collection.find()
|
| 65 |
+
contest_import = pd.DataFrame(list(cursor)).drop('_id', axis=1)
|
| 66 |
+
except:
|
| 67 |
+
contest_import = pd.DataFrame(columns = contest_data.columns)
|
| 68 |
+
|
| 69 |
+
if contest_id in contest_import['Contest ID'].values:
|
| 70 |
+
st.info("Data for this contest already exists, no need to upload, but we appreciate the effort!")
|
| 71 |
+
return
|
| 72 |
+
|
| 73 |
+
contest_data['Contest Date'] = contest_date
|
| 74 |
+
contest_data['Contest ID'] = contest_id
|
| 75 |
+
contest_import = pd.concat([contest_import, contest_data], ignore_index=True)
|
| 76 |
+
|
| 77 |
+
chunk_size = 10000
|
| 78 |
+
collection.drop()
|
| 79 |
+
for i in range(0, len(contest_import), chunk_size):
|
| 80 |
+
for _ in range(5):
|
| 81 |
+
try:
|
| 82 |
+
df_chunk = contest_import.iloc[i:i + chunk_size]
|
| 83 |
+
collection.insert_many(df_chunk.to_dict('records'), ordered=False)
|
| 84 |
+
break
|
| 85 |
+
except Exception as e:
|
| 86 |
+
print(f"Retry due to error: {e}")
|
| 87 |
+
|
| 88 |
+
return
|
| 89 |
+
|
| 90 |
db = init_conn()
|
| 91 |
|
| 92 |
## import global functions
|
|
|
|
| 173 |
st.session_state['Contest'] = st.session_state['Contest'].dropna(how='all')
|
| 174 |
st.session_state['Contest'] = st.session_state['Contest'].reset_index(drop=True)
|
| 175 |
if st.session_state['Contest'] is not None:
|
| 176 |
+
success_col, blank_col, upload_col = st.columns([2, 1, 1])
|
| 177 |
+
with success_col:
|
| 178 |
+
st.success('Contest file loaded successfully!')
|
| 179 |
+
with upload_col:
|
| 180 |
+
if st.button('Send file to Database?', key='export_contest_file'):
|
| 181 |
+
export_contest_file(db, sport_select, type_var, date_select, contest_id_map[contest_name_var], st.session_state['Contest_file'])
|
| 182 |
st.dataframe(st.session_state['Contest'].head(100))
|
| 183 |
|
| 184 |
if 'Contest_file' in st.session_state:
|