bluenevus commited on
Commit
c1813c1
·
1 Parent(s): 234506b

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +69 -89
app.py CHANGED
@@ -472,7 +472,6 @@ def update_selected_doc_type(n_clicks_list, btn_ids):
472
  Input('selected-doc-type', 'data'),
473
  )
474
  def update_right_col(selected_type):
475
- # Load all doc stores from sqlite
476
  store_data = {}
477
  for store_key in ["shred","pink","pink_review","red","red_review","gold","gold_review","loe","virtual_board"]:
478
  doc_content, _ = get_uploaded_doc(store_key)
@@ -530,7 +529,6 @@ def handle_doc_upload(contents_lists, filenames_lists,
530
  if not triggered or not contents_lists:
531
  return [dash.no_update]*19 + [dash.no_update]
532
 
533
- # Map subtype to store index and doc_name index
534
  subtype_map = {
535
  "shred": (0, 0),
536
  "pink": (1, 1),
@@ -543,7 +541,6 @@ def handle_doc_upload(contents_lists, filenames_lists,
543
  "virtual_board": (8, 8)
544
  }
545
 
546
- # Find which upload triggered
547
  for i, (contents, filenames) in enumerate(zip(contents_lists, filenames_lists)):
548
  if contents and filenames:
549
  id_dict = callback_context.inputs_list[0][i]['id']
@@ -552,7 +549,6 @@ def handle_doc_upload(contents_lists, filenames_lists,
552
  if isinstance(contents, str):
553
  contents = [contents]
554
  filenames = [filenames]
555
- # Only take the last uploaded file for that slot
556
  content = contents[-1]
557
  name = filenames[-1]
558
  file_text = process_document(content, name)
@@ -560,7 +556,6 @@ def handle_doc_upload(contents_lists, filenames_lists,
560
  stores[idx] = file_text
561
  doc_names[doc_name_idx] = name
562
  if subtype == "shred":
563
- # For shred, build file list
564
  file_list = [
565
  dbc.Row([
566
  dbc.Col(
@@ -582,10 +577,12 @@ def handle_doc_upload(contents_lists, filenames_lists,
582
  [
583
  Output('document-preview', 'children'),
584
  Output('store-generated-doc', 'data'),
 
585
  Output('progress-dot-store', 'data')
586
  ],
587
  [
588
  Input({'type': 'btn-generate-doc', 'index': ALL}, 'n_clicks'),
 
589
  Input('selected-doc-type', 'data')
590
  ],
591
  [
@@ -602,14 +599,50 @@ def handle_doc_upload(contents_lists, filenames_lists,
602
  ],
603
  prevent_initial_call=True
604
  )
605
- def handle_preview_and_generate(n_clicks_list, selected_type,
606
- shred, pink, pink_review, red, red_review, gold, gold_review, loe, virtual_board, prev_generated):
607
  ctx = callback_context
608
  trigger = ctx.triggered[0]['prop_id'] if ctx.triggered else ""
609
- logging.info(f"Document preview/generate trigger: {trigger}")
610
 
611
- # If generate button pressed
612
- if any(n_clicks_list):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
613
  logging.info(f"Generating document for type: {selected_type}")
614
  inputs = {
615
  "shred": shred,
@@ -650,89 +683,36 @@ def handle_preview_and_generate(n_clicks_list, selected_type,
650
  else:
651
  preview = markdown_narrative_preview(generated_doc)
652
  logging.info("Document preview updated.")
653
- return preview, generated_doc, "progress"
654
- else:
655
- # Just preview from store or sqlite
656
- doc = get_generated_doc(selected_type)
657
- if not doc:
658
- # Fallback to uploaded doc for preview
659
- if selected_type == "Shred" and shred:
660
- return markdown_table_preview(shred), dash.no_update, dash.no_update
661
- elif selected_type in spreadsheet_types:
662
- doc_store = {
663
- "Pink Review": pink_review,
664
- "Red Review": red_review,
665
- "Gold Review": gold_review,
666
- "Virtual Board": virtual_board,
667
- "LOE": loe
668
- }
669
- doc = doc_store.get(selected_type, "")
670
- return markdown_table_preview(doc), dash.no_update, dash.no_update
671
- elif selected_type in narrative_types:
672
- doc_store = {
673
- "Pink": pink,
674
- "Red": red,
675
- "Gold": gold
676
- }
677
- doc = doc_store.get(selected_type, "")
678
- return markdown_narrative_preview(doc), dash.no_update, dash.no_update
679
- return html.Div("No document loaded."), dash.no_update, dash.no_update
680
- if selected_type in spreadsheet_types:
681
- return markdown_table_preview(doc), doc, dash.no_update
682
- else:
683
- return markdown_narrative_preview(doc), doc, dash.no_update
684
 
685
- @app.callback(
686
- Output("download-document", "data"),
687
- Output('progress-dot-store', 'data'),
688
- Input("btn-download", "n_clicks"),
689
- State('selected-doc-type', 'data'),
690
- State('store-generated-doc', 'data'),
691
- State('store-shred', 'data'),
692
- State('store-pink', 'data'),
693
- State('store-pink-review', 'data'),
694
- State('store-red', 'data'),
695
- State('store-red-review', 'data'),
696
- State('store-gold', 'data'),
697
- State('store-gold-review', 'data'),
698
- State('store-loe', 'data'),
699
- State('store-virtual-board', 'data'),
700
- prevent_initial_call=True
701
- )
702
- def download_document(n_clicks, selected_type, generated_doc, shred, pink, pink_review, red, red_review, gold, gold_review, loe, virtual_board):
703
- doc = generated_doc
704
- if not doc:
705
- doc = get_generated_doc(selected_type)
706
- if not doc:
707
- if selected_type == "Shred":
708
- doc = shred
709
- elif selected_type == "Pink":
710
- doc = pink
711
- elif selected_type == "Pink Review":
712
- doc = pink_review
713
- elif selected_type == "Red":
714
- doc = red
715
- elif selected_type == "Red Review":
716
- doc = red_review
717
- elif selected_type == "Gold":
718
- doc = gold
719
- elif selected_type == "Gold Review":
720
- doc = gold_review
721
- elif selected_type == "LOE":
722
- doc = loe
723
- elif selected_type == "Virtual Board":
724
- doc = virtual_board
725
  if not doc:
726
- logging.warning("No generated document to download.")
727
- return dash.no_update, dash.no_update
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
728
  if selected_type in spreadsheet_types:
729
- xlsx_io = markdown_tables_to_xlsx(doc)
730
- logging.info("Spreadsheet document prepared for download.")
731
- return dcc.send_bytes(xlsx_io.getvalue(), filename=f"{selected_type}_output.xlsx"), "progress"
732
  else:
733
- content = doc.encode('utf-8')
734
- logging.info("Narrative document prepared for download.")
735
- return dcc.send_bytes(content, filename=f"{selected_type}_output.md"), "progress"
736
 
737
  @app.callback(
738
  Output("main-progress-dot-output", "children"),
 
472
  Input('selected-doc-type', 'data'),
473
  )
474
  def update_right_col(selected_type):
 
475
  store_data = {}
476
  for store_key in ["shred","pink","pink_review","red","red_review","gold","gold_review","loe","virtual_board"]:
477
  doc_content, _ = get_uploaded_doc(store_key)
 
529
  if not triggered or not contents_lists:
530
  return [dash.no_update]*19 + [dash.no_update]
531
 
 
532
  subtype_map = {
533
  "shred": (0, 0),
534
  "pink": (1, 1),
 
541
  "virtual_board": (8, 8)
542
  }
543
 
 
544
  for i, (contents, filenames) in enumerate(zip(contents_lists, filenames_lists)):
545
  if contents and filenames:
546
  id_dict = callback_context.inputs_list[0][i]['id']
 
549
  if isinstance(contents, str):
550
  contents = [contents]
551
  filenames = [filenames]
 
552
  content = contents[-1]
553
  name = filenames[-1]
554
  file_text = process_document(content, name)
 
556
  stores[idx] = file_text
557
  doc_names[doc_name_idx] = name
558
  if subtype == "shred":
 
559
  file_list = [
560
  dbc.Row([
561
  dbc.Col(
 
577
  [
578
  Output('document-preview', 'children'),
579
  Output('store-generated-doc', 'data'),
580
+ Output('download-document', 'data'),
581
  Output('progress-dot-store', 'data')
582
  ],
583
  [
584
  Input({'type': 'btn-generate-doc', 'index': ALL}, 'n_clicks'),
585
+ Input("btn-download", "n_clicks"),
586
  Input('selected-doc-type', 'data')
587
  ],
588
  [
 
599
  ],
600
  prevent_initial_call=True
601
  )
602
+ def handle_preview_generate_download(n_clicks_generate_list, n_clicks_download, selected_type,
603
+ shred, pink, pink_review, red, red_review, gold, gold_review, loe, virtual_board, prev_generated):
604
  ctx = callback_context
605
  trigger = ctx.triggered[0]['prop_id'] if ctx.triggered else ""
606
+ logging.info(f"Unified preview/generate/download trigger: {trigger}")
607
 
608
+ # Download logic
609
+ if "btn-download" in trigger:
610
+ doc = prev_generated
611
+ if not doc:
612
+ doc = get_generated_doc(selected_type)
613
+ if not doc:
614
+ if selected_type == "Shred":
615
+ doc = shred
616
+ elif selected_type == "Pink":
617
+ doc = pink
618
+ elif selected_type == "Pink Review":
619
+ doc = pink_review
620
+ elif selected_type == "Red":
621
+ doc = red
622
+ elif selected_type == "Red Review":
623
+ doc = red_review
624
+ elif selected_type == "Gold":
625
+ doc = gold
626
+ elif selected_type == "Gold Review":
627
+ doc = gold_review
628
+ elif selected_type == "LOE":
629
+ doc = loe
630
+ elif selected_type == "Virtual Board":
631
+ doc = virtual_board
632
+ if not doc:
633
+ logging.warning("No generated document to download.")
634
+ return dash.no_update, dash.no_update, dash.no_update, dash.no_update
635
+ if selected_type in spreadsheet_types:
636
+ xlsx_io = markdown_tables_to_xlsx(doc)
637
+ logging.info("Spreadsheet document prepared for download.")
638
+ return dash.no_update, dash.no_update, dcc.send_bytes(xlsx_io.getvalue(), filename=f"{selected_type}_output.xlsx"), "progress"
639
+ else:
640
+ content = doc.encode('utf-8')
641
+ logging.info("Narrative document prepared for download.")
642
+ return dash.no_update, dash.no_update, dcc.send_bytes(content, filename=f"{selected_type}_output.md"), "progress"
643
+
644
+ # Generate logic
645
+ if any(n_clicks_generate_list):
646
  logging.info(f"Generating document for type: {selected_type}")
647
  inputs = {
648
  "shred": shred,
 
683
  else:
684
  preview = markdown_narrative_preview(generated_doc)
685
  logging.info("Document preview updated.")
686
+ return preview, generated_doc, dash.no_update, "progress"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687
 
688
+ # Preview logic (selected type changed)
689
+ doc = get_generated_doc(selected_type)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
690
  if not doc:
691
+ if selected_type == "Shred" and shred:
692
+ return markdown_table_preview(shred), dash.no_update, dash.no_update, dash.no_update
693
+ elif selected_type in spreadsheet_types:
694
+ doc_store = {
695
+ "Pink Review": pink_review,
696
+ "Red Review": red_review,
697
+ "Gold Review": gold_review,
698
+ "Virtual Board": virtual_board,
699
+ "LOE": loe
700
+ }
701
+ doc = doc_store.get(selected_type, "")
702
+ return markdown_table_preview(doc), dash.no_update, dash.no_update, dash.no_update
703
+ elif selected_type in narrative_types:
704
+ doc_store = {
705
+ "Pink": pink,
706
+ "Red": red,
707
+ "Gold": gold
708
+ }
709
+ doc = doc_store.get(selected_type, "")
710
+ return markdown_narrative_preview(doc), dash.no_update, dash.no_update, dash.no_update
711
+ return html.Div("No document loaded."), dash.no_update, dash.no_update, dash.no_update
712
  if selected_type in spreadsheet_types:
713
+ return markdown_table_preview(doc), doc, dash.no_update, dash.no_update
 
 
714
  else:
715
+ return markdown_narrative_preview(doc), doc, dash.no_update, dash.no_update
 
 
716
 
717
  @app.callback(
718
  Output("main-progress-dot-output", "children"),