bluenevus commited on
Commit
9f482fa
·
1 Parent(s): 071a216

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +33 -21
app.py CHANGED
@@ -360,8 +360,8 @@ def main_callback(upload_filename, upload_contents, delete_file_n, delete_pptx_n
360
  trigger = ctx.triggered[0]['prop_id'].split('.')[0]
361
 
362
  # Always start with current session state
363
- upload_file_contents = session_dict.get("uploaded_file")
364
- uploaded_filename_val = session_dict.get("uploaded_filename")
365
  document_text_val = session_dict.get("document_text", "")
366
  slides_content_val = session_dict.get("slides_markdown", "")
367
  log_output_children = '\n'.join(session_dict.get("log_messages", [])[:100])
@@ -373,6 +373,22 @@ def main_callback(upload_filename, upload_contents, delete_file_n, delete_pptx_n
373
  if loading_state is None:
374
  loading_state = {"show_loading": False}
375
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
376
  # Delete file logic
377
  if trigger == 'delete-file-btn':
378
  session_dict["uploaded_filename"] = None
@@ -387,17 +403,8 @@ def main_callback(upload_filename, upload_contents, delete_file_n, delete_pptx_n
387
  session_dict["ppt_ready"] = False
388
  add_log("PowerPoint deleted by user.")
389
 
390
- # File upload/update logic
391
- elif trigger in ['upload-file', 'upload-file.filename', 'upload-file.contents']:
392
- # Only update if a new file has been uploaded
393
- if upload_filename and upload_contents:
394
- session_dict["uploaded_filename"] = upload_filename
395
- session_dict["uploaded_file"] = upload_contents
396
- upload_file_contents = upload_contents
397
- uploaded_filename_val = upload_filename
398
-
399
- # Text content update
400
- elif trigger in ['document-text', 'slides-content']:
401
  session_dict["document_text"] = doc_text_input
402
  session_dict["slides_markdown"] = slides_input
403
  document_text_val = doc_text_input
@@ -410,7 +417,6 @@ def main_callback(upload_filename, upload_contents, delete_file_n, delete_pptx_n
410
  loading_children = html.Div("Generating slides, please wait...", className="text-center")
411
  to_send = ""
412
  file_text = ""
413
- # Always use current session state for file
414
  if session_dict.get("uploaded_file") and session_dict.get("uploaded_filename"):
415
  try:
416
  file_text = process_uploaded_file(session_dict["uploaded_filename"], session_dict["uploaded_file"])
@@ -418,11 +424,13 @@ def main_callback(upload_filename, upload_contents, delete_file_n, delete_pptx_n
418
  add_log(f"File error: {str(e)}")
419
  session_dict["slides_markdown"] = f"File error: {str(e)}"
420
  slides_content_val = f"File error: {str(e)}"
 
 
421
  return (get_uploaded_file_area(session_dict),
422
  get_pptx_download_area(session_dict),
423
  upload_file_contents, document_text_val, slides_content_val,
424
  '\n'.join(session_dict["log_messages"][:100]), download_data,
425
- session_init_data, "", {"show_loading": False})
426
  if doc_text_input:
427
  session_dict["document_text"] = doc_text_input
428
  if file_text and doc_text_input:
@@ -431,11 +439,13 @@ def main_callback(upload_filename, upload_contents, delete_file_n, delete_pptx_n
431
  to_send = file_text or doc_text_input
432
  if not to_send.strip():
433
  slides_content_val = "Please upload a file or enter text."
 
 
434
  return (get_uploaded_file_area(session_dict),
435
  get_pptx_download_area(session_dict),
436
  upload_file_contents, document_text_val, slides_content_val,
437
  '\n'.join(session_dict["log_messages"][:100]), download_data,
438
- session_init_data, "", {"show_loading": False})
439
  try:
440
  add_log("Starting slide generation...")
441
  slides_markdown = process_document(to_send)
@@ -480,13 +490,10 @@ def main_callback(upload_filename, upload_contents, delete_file_n, delete_pptx_n
480
  loading_children = ""
481
  loading_state = {"show_loading": False}
482
 
483
- # Interval/log update
484
  elif trigger == 'interval-component':
485
  log_output_children = '\n'.join(session_dict.get("log_messages", [])[:100])
486
-
487
- if not show_loading and isinstance(loading_state, dict):
488
- if not loading_state.get("show_loading", False):
489
- loading_children = ""
490
 
491
  # Always persist session state for these keys
492
  session_dict["uploaded_file"] = upload_file_contents
@@ -494,6 +501,11 @@ def main_callback(upload_filename, upload_contents, delete_file_n, delete_pptx_n
494
  session_dict["document_text"] = document_text_val
495
  session_dict["slides_markdown"] = slides_content_val
496
 
 
 
 
 
 
497
  return (get_uploaded_file_area(session_dict),
498
  get_pptx_download_area(session_dict),
499
  upload_file_contents, document_text_val, slides_content_val,
 
360
  trigger = ctx.triggered[0]['prop_id'].split('.')[0]
361
 
362
  # Always start with current session state
363
+ upload_file_contents = session_dict.get("uploaded_file", None)
364
+ uploaded_filename_val = session_dict.get("uploaded_filename", None)
365
  document_text_val = session_dict.get("document_text", "")
366
  slides_content_val = session_dict.get("slides_markdown", "")
367
  log_output_children = '\n'.join(session_dict.get("log_messages", [])[:100])
 
373
  if loading_state is None:
374
  loading_state = {"show_loading": False}
375
 
376
+ # If a new file is uploaded, update session; otherwise, persist current session's file
377
+ if trigger in ['upload-file', 'upload-file.filename', 'upload-file.contents']:
378
+ if upload_filename and upload_contents:
379
+ session_dict["uploaded_filename"] = upload_filename
380
+ session_dict["uploaded_file"] = upload_contents
381
+ upload_file_contents = upload_contents
382
+ uploaded_filename_val = upload_filename
383
+ else:
384
+ # Don't clear the session file if not a real upload
385
+ upload_file_contents = session_dict.get("uploaded_file", None)
386
+ uploaded_filename_val = session_dict.get("uploaded_filename", None)
387
+ else:
388
+ # Don't let interval or other triggers remove file from session
389
+ upload_file_contents = session_dict.get("uploaded_file", None)
390
+ uploaded_filename_val = session_dict.get("uploaded_filename", None)
391
+
392
  # Delete file logic
393
  if trigger == 'delete-file-btn':
394
  session_dict["uploaded_filename"] = None
 
403
  session_dict["ppt_ready"] = False
404
  add_log("PowerPoint deleted by user.")
405
 
406
+ # Text content update (manual text or slides markdown edits)
407
+ if trigger in ['document-text', 'slides-content']:
 
 
 
 
 
 
 
 
 
408
  session_dict["document_text"] = doc_text_input
409
  session_dict["slides_markdown"] = slides_input
410
  document_text_val = doc_text_input
 
417
  loading_children = html.Div("Generating slides, please wait...", className="text-center")
418
  to_send = ""
419
  file_text = ""
 
420
  if session_dict.get("uploaded_file") and session_dict.get("uploaded_filename"):
421
  try:
422
  file_text = process_uploaded_file(session_dict["uploaded_filename"], session_dict["uploaded_file"])
 
424
  add_log(f"File error: {str(e)}")
425
  session_dict["slides_markdown"] = f"File error: {str(e)}"
426
  slides_content_val = f"File error: {str(e)}"
427
+ loading_children = ""
428
+ loading_state = {"show_loading": False}
429
  return (get_uploaded_file_area(session_dict),
430
  get_pptx_download_area(session_dict),
431
  upload_file_contents, document_text_val, slides_content_val,
432
  '\n'.join(session_dict["log_messages"][:100]), download_data,
433
+ session_init_data, loading_children, loading_state)
434
  if doc_text_input:
435
  session_dict["document_text"] = doc_text_input
436
  if file_text and doc_text_input:
 
439
  to_send = file_text or doc_text_input
440
  if not to_send.strip():
441
  slides_content_val = "Please upload a file or enter text."
442
+ loading_children = ""
443
+ loading_state = {"show_loading": False}
444
  return (get_uploaded_file_area(session_dict),
445
  get_pptx_download_area(session_dict),
446
  upload_file_contents, document_text_val, slides_content_val,
447
  '\n'.join(session_dict["log_messages"][:100]), download_data,
448
+ session_init_data, loading_children, loading_state)
449
  try:
450
  add_log("Starting slide generation...")
451
  slides_markdown = process_document(to_send)
 
490
  loading_children = ""
491
  loading_state = {"show_loading": False}
492
 
493
+ # Only update the log output on interval, never touch file upload or loading on interval
494
  elif trigger == 'interval-component':
495
  log_output_children = '\n'.join(session_dict.get("log_messages", [])[:100])
496
+ # Do not touch loading_children or loading_state
 
 
 
497
 
498
  # Always persist session state for these keys
499
  session_dict["uploaded_file"] = upload_file_contents
 
501
  session_dict["document_text"] = document_text_val
502
  session_dict["slides_markdown"] = slides_content_val
503
 
504
+ # Only show dcc.Loading spinner when generating slides or pptx, not on interval or other triggers
505
+ if not show_loading and isinstance(loading_state, dict):
506
+ if not loading_state.get("show_loading", False):
507
+ loading_children = ""
508
+
509
  return (get_uploaded_file_area(session_dict),
510
  get_pptx_download_area(session_dict),
511
  upload_file_contents, document_text_val, slides_content_val,