bluenevus commited on
Commit
9acc52c
·
1 Parent(s): dabf044

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +24 -14
app.py CHANGED
@@ -269,6 +269,9 @@ def get_left_col_content():
269
 
270
  def get_right_col_content(selected_type, store_data):
271
  controls = []
 
 
 
272
  controls.append(dcc.Loading(
273
  id="loading-indicator",
274
  type="dot",
@@ -342,7 +345,6 @@ def get_right_col_content(selected_type, store_data):
342
  },
343
  multiple=False
344
  ),
345
- # Only the 'shred' one is present in layout, so don't add for others
346
  dbc.RadioItems(
347
  id={'type': 'radio-doc-source', 'subtype': src, 'index': selected_type},
348
  options=[
@@ -414,7 +416,10 @@ app.layout = dbc.Container([
414
  width=3
415
  ),
416
  dbc.Col(
417
- html.Div(id='right-col-content'),
 
 
 
418
  width=9
419
  )
420
  ])
@@ -525,7 +530,6 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
525
  preview = dash.no_update
526
  generated_doc = dash.no_update
527
  download_data = dash.no_update
528
- progress = dash.no_update
529
 
530
  ctx = callback_context
531
  trigger = ctx.triggered[0]['prop_id'] if ctx.triggered else ""
@@ -542,7 +546,8 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
542
  "virtual_board": 8
543
  }
544
 
545
- # Handle upload
 
546
  if "upload-doc-type" in trigger:
547
  for i, (contents, filenames) in enumerate(zip(contents_lists, filenames_lists)):
548
  if contents and filenames:
@@ -571,7 +576,6 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
571
  ], id={'type': 'file-row', 'index': name}, align="center", className="mb-1")
572
  ]
573
  uploaded_doc_name_shred = name
574
- progress = "progress"
575
  # Set preview for this upload
576
  if subtype == "shred":
577
  preview = markdown_table_preview(file_text)
@@ -583,7 +587,6 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
583
  download_data = dash.no_update
584
  return stores + [file_list, uploaded_doc_name_shred, preview, generated_doc, download_data, progress]
585
 
586
- # Handle Generate
587
  if any(n_clicks_generate_list):
588
  logging.info(f"Generating document for type: {selected_type}")
589
  inputs = {
@@ -620,15 +623,14 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
620
  t.join(timeout=60)
621
  generated_doc = result_holder.get('result', 'Error: No document generated.')
622
  set_generated_doc(selected_type, generated_doc)
 
623
  if selected_type in spreadsheet_types:
624
  preview = markdown_table_preview(generated_doc)
625
  else:
626
  preview = markdown_narrative_preview(generated_doc)
627
- progress = "progress"
628
  download_data = dash.no_update
629
  return stores + [file_list, uploaded_doc_name_shred, preview, generated_doc, download_data, progress]
630
 
631
- # Handle Download
632
  if "btn-download" in trigger:
633
  doc = prev_generated
634
  if not doc:
@@ -654,21 +656,18 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
654
  doc = stores[8]
655
  if not doc:
656
  logging.warning("No generated document to download.")
657
- return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, dash.no_update, dash.no_update]
658
  if selected_type in spreadsheet_types:
659
  xlsx_io = markdown_tables_to_xlsx(doc)
660
  logging.info("Spreadsheet document prepared for download.")
661
  download_data = dcc.send_bytes(xlsx_io.getvalue(), filename=f"{selected_type}_output.xlsx")
662
- progress = "progress"
663
  return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, download_data, progress]
664
  else:
665
  content = doc.encode('utf-8')
666
  logging.info("Narrative document prepared for download.")
667
  download_data = dcc.send_bytes(content, filename=f"{selected_type}_output.md")
668
- progress = "progress"
669
  return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, download_data, progress]
670
 
671
- # Handle Doc Type Change/Preview
672
  doc = get_generated_doc(selected_type)
673
  if not doc:
674
  if selected_type == "Shred" and stores[0]:
@@ -693,18 +692,29 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
693
  preview = markdown_narrative_preview(doc)
694
  else:
695
  preview = html.Div("No document loaded.")
696
- return stores + [file_list, uploaded_doc_name_shred, preview, dash.no_update, dash.no_update, dash.no_update]
697
  if selected_type in spreadsheet_types:
698
  preview = markdown_table_preview(doc)
699
  else:
700
  preview = markdown_narrative_preview(doc)
701
- return stores + [file_list, uploaded_doc_name_shred, preview, doc, dash.no_update, dash.no_update]
 
 
 
 
 
 
 
 
 
702
 
703
  @app.callback(
704
  Output("main-progress-dot-output", "children"),
705
  Input('progress-dot-store', 'data')
706
  )
707
  def update_main_progress_dot(progress):
 
 
708
  return ""
709
 
710
  if __name__ == '__main__':
 
269
 
270
  def get_right_col_content(selected_type, store_data):
271
  controls = []
272
+ controls.append(
273
+ html.Div(id='progress-dot-area', style={'textAlign': 'center', 'marginBottom': '8px'})
274
+ )
275
  controls.append(dcc.Loading(
276
  id="loading-indicator",
277
  type="dot",
 
345
  },
346
  multiple=False
347
  ),
 
348
  dbc.RadioItems(
349
  id={'type': 'radio-doc-source', 'subtype': src, 'index': selected_type},
350
  options=[
 
416
  width=3
417
  ),
418
  dbc.Col(
419
+ html.Div([
420
+ html.Div(id='progress-dot-area', style={'textAlign': 'center', 'marginBottom': '8px'}),
421
+ html.Div(id='right-col-content')
422
+ ]),
423
  width=9
424
  )
425
  ])
 
530
  preview = dash.no_update
531
  generated_doc = dash.no_update
532
  download_data = dash.no_update
 
533
 
534
  ctx = callback_context
535
  trigger = ctx.triggered[0]['prop_id'] if ctx.triggered else ""
 
546
  "virtual_board": 8
547
  }
548
 
549
+ # Show progress dot as soon as action is triggered
550
+ progress = "progress"
551
  if "upload-doc-type" in trigger:
552
  for i, (contents, filenames) in enumerate(zip(contents_lists, filenames_lists)):
553
  if contents and filenames:
 
576
  ], id={'type': 'file-row', 'index': name}, align="center", className="mb-1")
577
  ]
578
  uploaded_doc_name_shred = name
 
579
  # Set preview for this upload
580
  if subtype == "shred":
581
  preview = markdown_table_preview(file_text)
 
587
  download_data = dash.no_update
588
  return stores + [file_list, uploaded_doc_name_shred, preview, generated_doc, download_data, progress]
589
 
 
590
  if any(n_clicks_generate_list):
591
  logging.info(f"Generating document for type: {selected_type}")
592
  inputs = {
 
623
  t.join(timeout=60)
624
  generated_doc = result_holder.get('result', 'Error: No document generated.')
625
  set_generated_doc(selected_type, generated_doc)
626
+ # Always show preview after generation
627
  if selected_type in spreadsheet_types:
628
  preview = markdown_table_preview(generated_doc)
629
  else:
630
  preview = markdown_narrative_preview(generated_doc)
 
631
  download_data = dash.no_update
632
  return stores + [file_list, uploaded_doc_name_shred, preview, generated_doc, download_data, progress]
633
 
 
634
  if "btn-download" in trigger:
635
  doc = prev_generated
636
  if not doc:
 
656
  doc = stores[8]
657
  if not doc:
658
  logging.warning("No generated document to download.")
659
+ return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, dash.no_update, None]
660
  if selected_type in spreadsheet_types:
661
  xlsx_io = markdown_tables_to_xlsx(doc)
662
  logging.info("Spreadsheet document prepared for download.")
663
  download_data = dcc.send_bytes(xlsx_io.getvalue(), filename=f"{selected_type}_output.xlsx")
 
664
  return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, download_data, progress]
665
  else:
666
  content = doc.encode('utf-8')
667
  logging.info("Narrative document prepared for download.")
668
  download_data = dcc.send_bytes(content, filename=f"{selected_type}_output.md")
 
669
  return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, download_data, progress]
670
 
 
671
  doc = get_generated_doc(selected_type)
672
  if not doc:
673
  if selected_type == "Shred" and stores[0]:
 
692
  preview = markdown_narrative_preview(doc)
693
  else:
694
  preview = html.Div("No document loaded.")
695
+ return stores + [file_list, uploaded_doc_name_shred, preview, dash.no_update, dash.no_update, None]
696
  if selected_type in spreadsheet_types:
697
  preview = markdown_table_preview(doc)
698
  else:
699
  preview = markdown_narrative_preview(doc)
700
+ return stores + [file_list, uploaded_doc_name_shred, preview, doc, dash.no_update, None]
701
+
702
+ @app.callback(
703
+ Output("progress-dot-area", "children"),
704
+ Input('progress-dot-store', 'data')
705
+ )
706
+ def update_right_progress_dot(progress):
707
+ if progress == "progress":
708
+ return html.Div("...", id="progress-blinker", style={'fontSize': '2rem', 'letterSpacing': '0.5rem', 'animation': 'blink 1s infinite'})
709
+ return ""
710
 
711
  @app.callback(
712
  Output("main-progress-dot-output", "children"),
713
  Input('progress-dot-store', 'data')
714
  )
715
  def update_main_progress_dot(progress):
716
+ if progress == "progress":
717
+ return html.Div("...", style={'fontSize': '2rem', 'letterSpacing': '0.5rem', 'animation': 'blink 1s infinite'})
718
  return ""
719
 
720
  if __name__ == '__main__':