Spaces:
Paused
Paused
Update app.py via AI Editor
Browse files
app.py
CHANGED
@@ -179,6 +179,7 @@ def update_selected_doc_type(n_clicks_list, btn_ids):
|
|
179 |
selected_type = btn_ids[idx[-1]]['index']
|
180 |
else:
|
181 |
selected_type = "Shred"
|
|
|
182 |
return selected_type
|
183 |
|
184 |
@app.callback(
|
@@ -229,6 +230,8 @@ def update_output(list_of_contents, list_of_names, existing_files):
|
|
229 |
]))
|
230 |
if existing_files is None:
|
231 |
existing_files = []
|
|
|
|
|
232 |
shredded_document = None
|
233 |
logging.info("Documents uploaded and file list updated.")
|
234 |
return existing_files + new_files
|
@@ -245,11 +248,33 @@ def remove_file(n_clicks, existing_files):
|
|
245 |
ctx = dash.callback_context
|
246 |
if not ctx.triggered:
|
247 |
raise dash.exceptions.PreventUpdate
|
248 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
uploaded_files.pop(removed_file, None)
|
250 |
shredded_document = None
|
251 |
logging.info(f"Removed file: {removed_file}")
|
252 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
|
254 |
@app.callback(
|
255 |
Output('document-preview', 'children'),
|
@@ -286,6 +311,7 @@ def generate_any_doc(n_clicks_list, btn_ids, radio_values, upload_contents, uplo
|
|
286 |
current_document = generated
|
287 |
shredded_document = generated
|
288 |
preview = spreadsheet_preview(generated, doc_type)
|
|
|
289 |
return preview, "Shred generated"
|
290 |
except Exception as e:
|
291 |
logging.error(f"Error generating document: {str(e)}")
|
@@ -325,21 +351,25 @@ def generate_any_doc(n_clicks_list, btn_ids, radio_values, upload_contents, uplo
|
|
325 |
pink_review_document = generated
|
326 |
current_document = generated
|
327 |
preview = spreadsheet_preview(generated, doc_type)
|
|
|
328 |
return preview, f"{doc_type} generated"
|
329 |
elif doc_type in ["Red Review", "Gold Review", "Virtual Board", "LOE"]:
|
330 |
generated = generate_document(doc_type, [doc_content, shredded_document])
|
331 |
current_document = generated
|
332 |
preview = spreadsheet_preview(generated, doc_type)
|
|
|
333 |
return preview, f"{doc_type} generated"
|
334 |
elif doc_type in ["Pink", "Red", "Gold"]:
|
335 |
generated = generate_document(doc_type, [doc_content])
|
336 |
current_document = generated
|
337 |
preview = dcc.Markdown(generated)
|
|
|
338 |
return preview, f"{doc_type} generated"
|
339 |
else:
|
340 |
generated = generate_document(doc_type, [doc_content])
|
341 |
current_document = generated
|
342 |
preview = dcc.Markdown(generated)
|
|
|
343 |
return preview, f"{doc_type} generated"
|
344 |
except Exception as e:
|
345 |
logging.error(f"Error generating document: {str(e)}")
|
|
|
179 |
selected_type = btn_ids[idx[-1]]['index']
|
180 |
else:
|
181 |
selected_type = "Shred"
|
182 |
+
logging.info(f"Doc type selected: {selected_type}")
|
183 |
return selected_type
|
184 |
|
185 |
@app.callback(
|
|
|
230 |
]))
|
231 |
if existing_files is None:
|
232 |
existing_files = []
|
233 |
+
elif not isinstance(existing_files, list):
|
234 |
+
existing_files = [existing_files]
|
235 |
shredded_document = None
|
236 |
logging.info("Documents uploaded and file list updated.")
|
237 |
return existing_files + new_files
|
|
|
248 |
ctx = dash.callback_context
|
249 |
if not ctx.triggered:
|
250 |
raise dash.exceptions.PreventUpdate
|
251 |
+
# Only proceed if a remove button was actually clicked
|
252 |
+
triggered_id = ctx.triggered[0]['prop_id'].split('.')[0]
|
253 |
+
if not triggered_id.startswith("{\"type\":\"remove-file\""):
|
254 |
+
raise dash.exceptions.PreventUpdate
|
255 |
+
try:
|
256 |
+
# Parse the file name from the triggered id
|
257 |
+
import json
|
258 |
+
triggered_dict = json.loads(triggered_id)
|
259 |
+
removed_file = triggered_dict['index']
|
260 |
+
except Exception as e:
|
261 |
+
logging.error(f"Could not parse removed file from callback context: {e}")
|
262 |
+
raise dash.exceptions.PreventUpdate
|
263 |
uploaded_files.pop(removed_file, None)
|
264 |
shredded_document = None
|
265 |
logging.info(f"Removed file: {removed_file}")
|
266 |
+
# Filter out the removed file from the list
|
267 |
+
filtered_files = []
|
268 |
+
if existing_files:
|
269 |
+
for file in existing_files:
|
270 |
+
# Defensive: file['props']['children'][1]['props']['children'] is the filename
|
271 |
+
try:
|
272 |
+
file_name = file['props']['children'][1]['props']['children']
|
273 |
+
if file_name != removed_file:
|
274 |
+
filtered_files.append(file)
|
275 |
+
except Exception as e:
|
276 |
+
filtered_files.append(file)
|
277 |
+
return filtered_files
|
278 |
|
279 |
@app.callback(
|
280 |
Output('document-preview', 'children'),
|
|
|
311 |
current_document = generated
|
312 |
shredded_document = generated
|
313 |
preview = spreadsheet_preview(generated, doc_type)
|
314 |
+
logging.info("Shred document generated.")
|
315 |
return preview, "Shred generated"
|
316 |
except Exception as e:
|
317 |
logging.error(f"Error generating document: {str(e)}")
|
|
|
351 |
pink_review_document = generated
|
352 |
current_document = generated
|
353 |
preview = spreadsheet_preview(generated, doc_type)
|
354 |
+
logging.info("Pink Review document generated.")
|
355 |
return preview, f"{doc_type} generated"
|
356 |
elif doc_type in ["Red Review", "Gold Review", "Virtual Board", "LOE"]:
|
357 |
generated = generate_document(doc_type, [doc_content, shredded_document])
|
358 |
current_document = generated
|
359 |
preview = spreadsheet_preview(generated, doc_type)
|
360 |
+
logging.info(f"{doc_type} document generated.")
|
361 |
return preview, f"{doc_type} generated"
|
362 |
elif doc_type in ["Pink", "Red", "Gold"]:
|
363 |
generated = generate_document(doc_type, [doc_content])
|
364 |
current_document = generated
|
365 |
preview = dcc.Markdown(generated)
|
366 |
+
logging.info(f"{doc_type} document generated.")
|
367 |
return preview, f"{doc_type} generated"
|
368 |
else:
|
369 |
generated = generate_document(doc_type, [doc_content])
|
370 |
current_document = generated
|
371 |
preview = dcc.Markdown(generated)
|
372 |
+
logging.info(f"{doc_type} document generated.")
|
373 |
return preview, f"{doc_type} generated"
|
374 |
except Exception as e:
|
375 |
logging.error(f"Error generating document: {str(e)}")
|