bluenevus commited on
Commit
ae2164a
·
1 Parent(s): 35c7f92

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +31 -35
app.py CHANGED
@@ -352,15 +352,15 @@ def store_session_id(session_id):
352
  Input('upload-file', 'contents'),
353
  Input('generate-content-button', 'n_clicks'),
354
  Input('generate-ppt-button', 'n_clicks'),
355
- Input({'type': 'file-download', 'index': dash.ALL}, 'n_clicks'),
356
- Input({'type': 'file-delete', 'index': dash.ALL}, 'n_clicks'),
357
  Input('slides-content', 'value'),
358
- Input('session-id', 'data'), # This input is used to restore state on refresh
359
  State('upload-file', 'filename'),
360
  State('document-text', 'value'),
361
  State('current-slide-index', 'data'),
362
- State({'type': 'file-download', 'index': dash.ALL}, 'id'),
363
- State({'type': 'file-delete', 'index': dash.ALL}, 'id'),
364
  State('slides-content-store', 'data'),
365
  prevent_initial_call=False
366
  )
@@ -369,7 +369,6 @@ def unified_callback(
369
  upload_filename, document_text, current_slide_idx, download_ids, delete_ids, slides_content_store_data
370
  ):
371
  ctx = callback_context
372
- # On initial app load or refresh, handle state restoration
373
  if not ctx.triggered or not session_id:
374
  session = get_or_create_session_data(session_id)
375
  session['files_box'] = list_session_files(session_id)
@@ -401,14 +400,14 @@ def unified_callback(
401
 
402
  def build_files_box(session):
403
  files_box = []
404
- for idx, f in enumerate(session['files_box']):
405
  files_box.append(
406
  html.Div([
407
  html.Div(
408
  html.A(
409
  f['name'],
410
  href="#",
411
- id={'type': 'file-download', 'index': idx},
412
  n_clicks=0,
413
  style={
414
  'color': '#116F70',
@@ -430,12 +429,12 @@ def unified_callback(
430
  ),
431
  dbc.Button(
432
  "Delete",
433
- id={'type': 'file-delete', 'index': idx},
434
  size="sm",
435
  color="secondary",
436
  style={'marginLeft': '8px', 'marginBottom': '2px', 'flex': 'none'}
437
  )
438
- ], style={'display': 'flex', 'alignItems': 'center', 'marginBottom': '8px', 'width': '100%', 'gap': '0.2em'}, id={'type': 'file-row', 'index': idx})
439
  )
440
  if not files_box:
441
  return html.Div("No files uploaded or generated yet.", className="text-muted")
@@ -527,37 +526,34 @@ def unified_callback(
527
  elif button_id.startswith("{"):
528
  triggered_id = eval(button_id)
529
  if triggered_id['type'] == 'file-download':
530
- idx = triggered_id['index']
531
- with session['lock']:
532
- if 0 <= idx < len(session['files_box']):
533
- file_path = session['files_box'][idx]['path']
534
- file_name = session['files_box'][idx]['name']
535
- file_bytes = read_session_temp_file(file_path)
536
- add_log(f"Download link generated for file '{file_name}' at '{file_path}'", session_id)
537
- logger.info(f"Download triggered for file '{file_name}' at '{file_path}' session '{session_id}'")
538
- log_str = '\n'.join(session['log_messages'][:100])
539
- return build_files_box(session), slides_content, log_str, slide_idx, dcc.send_bytes(file_bytes, file_name), slides_content
540
  elif triggered_id['type'] == 'file-delete':
541
- idx = triggered_id['index']
542
- with session['lock']:
543
- if 0 <= idx < len(session['files_box']):
544
- deleted = session['files_box'].pop(idx)
545
- if os.path.exists(deleted['path']):
546
- try:
547
- os.remove(deleted['path'])
548
- add_log(f"Deleted file '{deleted['name']}' from '{deleted['path']}'", session_id)
549
- logger.info(f"Deleted file '{deleted['name']}' at '{deleted['path']}' for session '{session_id}'")
550
- except Exception as ex:
551
- add_log(f"Failed to delete file '{deleted['name']}' from '{deleted['path']}': {str(ex)}", session_id)
552
- session['files_box'] = list_session_files(session_id)
553
- session['log_messages'].insert(0, f"{time.strftime('%H:%M:%S')} - File '{deleted['name']}' deleted.")
554
- log_str = '\n'.join(session['log_messages'][:100])
555
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
556
  else:
557
  raise PreventUpdate
558
 
559
  else:
560
- # If unknown trigger, restore state (should not happen)
561
  session['files_box'] = list_session_files(session_id)
562
  session['current_slide_md'] = load_current_slide_md_from_disk(session_id)
563
  slides_content = session.get('current_slide_md', "")
 
352
  Input('upload-file', 'contents'),
353
  Input('generate-content-button', 'n_clicks'),
354
  Input('generate-ppt-button', 'n_clicks'),
355
+ Input({'type': 'file-download', 'filename': dash.ALL}, 'n_clicks'),
356
+ Input({'type': 'file-delete', 'filename': dash.ALL}, 'n_clicks'),
357
  Input('slides-content', 'value'),
358
+ Input('session-id', 'data'),
359
  State('upload-file', 'filename'),
360
  State('document-text', 'value'),
361
  State('current-slide-index', 'data'),
362
+ State({'type': 'file-download', 'filename': dash.ALL}, 'id'),
363
+ State({'type': 'file-delete', 'filename': dash.ALL}, 'id'),
364
  State('slides-content-store', 'data'),
365
  prevent_initial_call=False
366
  )
 
369
  upload_filename, document_text, current_slide_idx, download_ids, delete_ids, slides_content_store_data
370
  ):
371
  ctx = callback_context
 
372
  if not ctx.triggered or not session_id:
373
  session = get_or_create_session_data(session_id)
374
  session['files_box'] = list_session_files(session_id)
 
400
 
401
  def build_files_box(session):
402
  files_box = []
403
+ for f in session['files_box']:
404
  files_box.append(
405
  html.Div([
406
  html.Div(
407
  html.A(
408
  f['name'],
409
  href="#",
410
+ id={'type': 'file-download', 'filename': f['name']},
411
  n_clicks=0,
412
  style={
413
  'color': '#116F70',
 
429
  ),
430
  dbc.Button(
431
  "Delete",
432
+ id={'type': 'file-delete', 'filename': f['name']},
433
  size="sm",
434
  color="secondary",
435
  style={'marginLeft': '8px', 'marginBottom': '2px', 'flex': 'none'}
436
  )
437
+ ], style={'display': 'flex', 'alignItems': 'center', 'marginBottom': '8px', 'width': '100%', 'gap': '0.2em'}, id={'type': 'file-row', 'filename': f['name']})
438
  )
439
  if not files_box:
440
  return html.Div("No files uploaded or generated yet.", className="text-muted")
 
526
  elif button_id.startswith("{"):
527
  triggered_id = eval(button_id)
528
  if triggered_id['type'] == 'file-download':
529
+ filename = triggered_id['filename']
530
+ file_entry = next((f for f in session['files_box'] if f['name'] == filename), None)
531
+ if file_entry:
532
+ file_path = file_entry['path']
533
+ file_name = file_entry['name']
534
+ file_bytes = read_session_temp_file(file_path)
535
+ add_log(f"Download link generated for file '{file_name}' at '{file_path}'", session_id)
536
+ logger.info(f"Download triggered for file '{file_name}' at '{file_path}' session '{session_id}'")
537
+ log_str = '\n'.join(session['log_messages'][:100])
538
+ return build_files_box(session), slides_content, log_str, slide_idx, dcc.send_bytes(file_bytes, file_name), slides_content
539
  elif triggered_id['type'] == 'file-delete':
540
+ filename = triggered_id['filename']
541
+ file_entry = next((f for f in session['files_box'] if f['name'] == filename), None)
542
+ if file_entry:
543
+ try:
544
+ os.remove(file_entry['path'])
545
+ add_log(f"Deleted file '{file_entry['name']}' from '{file_entry['path']}'", session_id)
546
+ logger.info(f"Deleted file '{file_entry['name']}' at '{file_entry['path']}' for session '{session_id}'")
547
+ except Exception as ex:
548
+ add_log(f"Failed to delete file '{file_entry['name']}' from '{file_entry['path']}': {str(ex)}", session_id)
549
+ session['files_box'] = list_session_files(session_id)
550
+ session['log_messages'].insert(0, f"{time.strftime('%H:%M:%S')} - File '{file_entry['name']}' deleted.")
551
+ log_str = '\n'.join(session['log_messages'][:100])
 
 
552
  return build_files_box(session), slides_content, log_str, slide_idx, None, slides_content
553
  else:
554
  raise PreventUpdate
555
 
556
  else:
 
557
  session['files_box'] = list_session_files(session_id)
558
  session['current_slide_md'] = load_current_slide_md_from_disk(session_id)
559
  slides_content = session.get('current_slide_md', "")