bluenevus commited on
Commit
d13ac8b
·
1 Parent(s): 46cb755

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +65 -50
app.py CHANGED
@@ -383,12 +383,10 @@ def unified_callback(
383
  slides_content
384
  )
385
 
386
- if hasattr(ctx.triggered[0], 'get'):
387
- button_id = ctx.triggered[0].get('prop_id', '').split('.')[0]
388
- triggered_id_dict = ctx.triggered[0].get('id', None)
389
- else:
390
- button_id = ctx.triggered[0]['prop_id'].split('.')[0]
391
- triggered_id_dict = ctx.triggered[0]['id'] if 'id' in ctx.triggered[0] else None
392
 
393
  session = get_or_create_session_data(session_id)
394
  slide_idx = current_slide_idx if current_slide_idx is not None else None
@@ -449,22 +447,69 @@ def unified_callback(
449
  with session['lock']:
450
  log_str = '\n'.join(session['log_messages'][:100])
451
 
452
- # Main triggers
453
- if button_id == 'upload-file':
454
- if upload_contents and upload_filename:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
455
  try:
456
- header, content_string = upload_contents.split(',')
457
- file_bytes = base64.b64decode(content_string)
458
- file_path = save_to_session_temp_file(session_id, upload_filename, file_bytes)
459
- session['files_box'] = list_session_files(session_id)
460
- session['log_messages'].insert(0, f"{time.strftime('%H:%M:%S')} - Uploaded file '{upload_filename}' saved to '{file_path}' for session '{session_id}'.")
461
- logger.info(f"File '{upload_filename}' registered in session file box for '{session_id}', path: {file_path}")
462
- except Exception as e:
463
- session['log_messages'].insert(0, f"{time.strftime('%H:%M:%S')} - Error uploading file: {str(e)}")
464
- log_str = '\n'.join(session['log_messages'][:100])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
465
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
466
 
467
- elif button_id == 'generate-content-button':
468
  decoded_file_text = None
469
  uploaded_files = [f for f in session['files_box'] if f['type'] == 'uploaded']
470
  if uploaded_files:
@@ -506,7 +551,7 @@ def unified_callback(
506
  return build_files_box(session), f"An error occurred: {str(e)}", log_str, slide_idx, None, slides_content
507
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
508
 
509
- elif button_id == 'generate-ppt-button':
510
  if not slides_content or not session_id:
511
  raise PreventUpdate
512
  pptx_bytes = None
@@ -530,36 +575,6 @@ def unified_callback(
530
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
531
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
532
 
533
- # Handle pattern-matching download/delete, robustly extract the dict, never parse as JSON string
534
- elif triggered_id_dict is not None and isinstance(triggered_id_dict, dict):
535
- if triggered_id_dict.get('type') == 'file-download':
536
- filename = triggered_id_dict.get('filename')
537
- file_entry = next((f for f in session['files_box'] if f['name'] == filename), None)
538
- if file_entry:
539
- file_path = file_entry['path']
540
- file_name = file_entry['name']
541
- file_bytes = read_session_temp_file(file_path)
542
- add_log(f"Download link generated for file '{file_name}' at '{file_path}'", session_id)
543
- logger.info(f"Download triggered for file '{file_name}' at '{file_path}' session '{session_id}'")
544
- log_str = '\n'.join(session['log_messages'][:100])
545
- return build_files_box(session), slides_content, log_str, slide_idx, dcc.send_bytes(file_bytes, file_name), slides_content
546
- elif triggered_id_dict.get('type') == 'file-delete':
547
- filename = triggered_id_dict.get('filename')
548
- file_entry = next((f for f in session['files_box'] if f['name'] == filename), None)
549
- if file_entry:
550
- try:
551
- os.remove(file_entry['path'])
552
- add_log(f"Deleted file '{file_entry['name']}' from '{file_entry['path']}'", session_id)
553
- logger.info(f"Deleted file '{file_entry['name']}' at '{file_entry['path']}' for session '{session_id}'")
554
- except Exception as ex:
555
- add_log(f"Failed to delete file '{file_entry['name']}' from '{file_entry['path']}': {str(ex)}", session_id)
556
- session['files_box'] = list_session_files(session_id)
557
- session['log_messages'].insert(0, f"{time.strftime('%H:%M:%S')} - File '{file_entry['name']}' deleted.")
558
- log_str = '\n'.join(session['log_messages'][:100])
559
- return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
560
- else:
561
- raise PreventUpdate
562
-
563
  else:
564
  session['files_box'] = list_session_files(session_id)
565
  session['current_slide_md'] = load_current_slide_md_from_disk(session_id)
 
383
  slides_content
384
  )
385
 
386
+ # Determine what triggered the callback
387
+ triggered = ctx.triggered[0]
388
+ prop_id = triggered['prop_id']
389
+ triggered_id = triggered.get('id', None)
 
 
390
 
391
  session = get_or_create_session_data(session_id)
392
  slide_idx = current_slide_idx if current_slide_idx is not None else None
 
447
  with session['lock']:
448
  log_str = '\n'.join(session['log_messages'][:100])
449
 
450
+ # Detect if delete triggered
451
+ delete_triggered = False
452
+ delete_filename = None
453
+ if 'file-delete' in prop_id:
454
+ if isinstance(delete_ids, list):
455
+ for n, n_clicks in enumerate(file_deletes):
456
+ if n_clicks and n_clicks > 0 and isinstance(delete_ids[n], dict):
457
+ delete_triggered = True
458
+ delete_filename = delete_ids[n].get('filename')
459
+ break
460
+ # Detect if download triggered
461
+ download_triggered = False
462
+ download_filename = None
463
+ if 'file-download' in prop_id:
464
+ if isinstance(download_ids, list):
465
+ for n, n_clicks in enumerate(file_downloads):
466
+ if n_clicks and n_clicks > 0 and isinstance(download_ids[n], dict):
467
+ download_triggered = True
468
+ download_filename = download_ids[n].get('filename')
469
+ break
470
+
471
+ # Handle file deletion
472
+ if delete_triggered and delete_filename:
473
+ file_entry = next((f for f in session['files_box'] if f['name'] == delete_filename), None)
474
+ if file_entry:
475
  try:
476
+ os.remove(file_entry['path'])
477
+ add_log(f"Deleted file '{file_entry['name']}' from '{file_entry['path']}'", session_id)
478
+ logger.info(f"Deleted file '{file_entry['name']}' at '{file_entry['path']}' for session '{session_id}'")
479
+ except Exception as ex:
480
+ add_log(f"Failed to delete file '{file_entry['name']}' from '{file_entry['path']}': {str(ex)}", session_id)
481
+ session['files_box'] = list_session_files(session_id)
482
+ session['log_messages'].insert(0, f"{time.strftime('%H:%M:%S')} - File '{file_entry['name']}' deleted.")
483
+ log_str = '\n'.join(session['log_messages'][:100])
484
+ return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
485
+
486
+ # Handle file download
487
+ if download_triggered and download_filename:
488
+ file_entry = next((f for f in session['files_box'] if f['name'] == download_filename), None)
489
+ if file_entry:
490
+ file_path = file_entry['path']
491
+ file_name = file_entry['name']
492
+ file_bytes = read_session_temp_file(file_path)
493
+ add_log(f"Download link generated for file '{file_name}' at '{file_path}'", session_id)
494
+ logger.info(f"Download triggered for file '{file_name}' at '{file_path}' session '{session_id}'")
495
+ log_str = '\n'.join(session['log_messages'][:100])
496
+ return build_files_box(session), slides_content, log_str, slide_idx, dcc.send_bytes(file_bytes, file_name), slides_content
497
+
498
+ # Handle upload
499
+ if prop_id.startswith('upload-file') and upload_contents and upload_filename:
500
+ try:
501
+ header, content_string = upload_contents.split(',')
502
+ file_bytes = base64.b64decode(content_string)
503
+ file_path = save_to_session_temp_file(session_id, upload_filename, file_bytes)
504
+ session['files_box'] = list_session_files(session_id)
505
+ session['log_messages'].insert(0, f"{time.strftime('%H:%M:%S')} - Uploaded file '{upload_filename}' saved to '{file_path}' for session '{session_id}'.")
506
+ logger.info(f"File '{upload_filename}' registered in session file box for '{session_id}', path: {file_path}")
507
+ except Exception as e:
508
+ session['log_messages'].insert(0, f"{time.strftime('%H:%M:%S')} - Error uploading file: {str(e)}")
509
+ log_str = '\n'.join(session['log_messages'][:100])
510
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
511
 
512
+ elif prop_id.startswith('generate-content-button'):
513
  decoded_file_text = None
514
  uploaded_files = [f for f in session['files_box'] if f['type'] == 'uploaded']
515
  if uploaded_files:
 
551
  return build_files_box(session), f"An error occurred: {str(e)}", log_str, slide_idx, None, slides_content
552
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
553
 
554
+ elif prop_id.startswith('generate-ppt-button'):
555
  if not slides_content or not session_id:
556
  raise PreventUpdate
557
  pptx_bytes = None
 
575
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
576
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
577
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
578
  else:
579
  session['files_box'] = list_session_files(session_id)
580
  session['current_slide_md'] = load_current_slide_md_from_disk(session_id)