VyLala commited on
Commit
f7fbadb
Β·
verified Β·
1 Parent(s): 40f440d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +75 -58
app.py CHANGED
@@ -20,42 +20,42 @@ with open("mtdna_tool_explainer_updated.html", "r", encoding="utf-8") as f:
20
  flow_chart = f.read()
21
 
22
  # This would go in a separate CSS file or a <style> block in your Gradio app
23
- css = """
24
- #nps-buttons-container .gr-radio-group {
25
- display: flex;
26
- flex-direction: row;
27
- justify-content: center;
28
- gap: 8px; /* Adjust spacing between buttons */
29
- }
30
- #nps-buttons-container .gr-radio-input {
31
- display: none; /* Hide the default radio circle */
32
- }
33
- #nps-buttons-container .gr-radio-label {
34
- display: flex;
35
- justify-content: center;
36
- align-items: center;
37
- width: 40px; /* Adjust button size */
38
- height: 40px;
39
- border-radius: 8px; /* Adjust border radius for rounded corners */
40
- background-color: #38a169; /* Example green color */
41
- color: white;
42
- font-weight: bold;
43
- cursor: pointer;
44
- transition: background-color 0.2s ease;
45
- }
46
- #nps-buttons-container .gr-radio-label:hover {
47
- background-color: #2f855a; /* Darker green on hover */
48
- }
49
- #nps-buttons-container input[type="radio"]:checked + .gr-radio-label {
50
- background-color: #1a4f35; /* Even darker green for the selected state */
51
- border: 2px solid white; /* Highlight the selected button */
52
- }
53
- #nps-left-label, #nps-right-label {
54
- width: 50%;
55
- font-size: 0.9em;
56
- color: #666;
57
- }
58
- """
59
 
60
  with gr.Blocks() as interface:
61
  # with gr.Tab("CURIOUS ABOUT THIS PRODUCT?"):
@@ -63,7 +63,15 @@ with gr.Blocks() as interface:
63
  with gr.Tab("🧬 Classifier"):
64
  gr.Markdown("# 🧬 mtDNA Location Classifier (MVP)")
65
  #inputMode = gr.Radio(choices=["Single Accession", "Batch Input"], value="Single Accession", label="Choose Input Mode")
66
- user_email = gr.Textbox(label="πŸ“§ Your email (used to track free quota)")
 
 
 
 
 
 
 
 
67
  usage_display = gr.Markdown("", visible=False)
68
 
69
  # with gr.Group() as single_input_group:
@@ -77,7 +85,7 @@ with gr.Blocks() as interface:
77
  # file_upload = gr.File(label="πŸ“ Or Upload CSV/Excel File", file_types=[".csv", ".xlsx"], interactive=True, elem_id="file-upload-box")
78
  raw_text = gr.Textbox(label="🧚 Input Accession Number(s) (single (KU131308) or comma-separated (e.g., MF362736.1,MF362738.1,KU131308,MW291678))")
79
  #resume_file = gr.File(label="πŸ—ƒοΈ Previously saved Excel output (optional)", file_types=[".xlsx"], interactive=True)
80
- gr.HTML("""<a href="https://docs.google.com/spreadsheets/d/1lKqPp17EfHsshJGZRWEpcNOZlGo3F5qU/edit?usp=sharing" download target="_blank">Download Example Excel Format</a>""")
81
  file_upload = gr.File(label="πŸ“ Or Upload CSV/Excel File", file_types=[".csv", ".xlsx"], interactive=True)
82
  processed_info = gr.Markdown(visible=False) # new placeholder for processed list
83
 
@@ -159,7 +167,10 @@ with gr.Blocks() as interface:
159
  # return gr.update(visible=True), gr.update(visible=False)
160
  # else:
161
  # return gr.update(visible=False), gr.update(visible=True)
162
-
 
 
 
163
  def classify_with_loading():
164
  return gr.update(value="⏳ Please wait... processing...",visible=True) # Show processing message
165
 
@@ -566,7 +577,7 @@ with gr.Blocks() as interface:
566
  warning = f"⚠️ Only processing first {limited_acc} accessions."
567
  else:
568
  warning = f"βœ… All {total} accessions will be processed."
569
- processed_info = warning + "\n" +f"Processed/Input accessions: {', '.join(accessions)}"
570
  ### NEW: Hide inputs, show processed_info at start
571
  yield (
572
  make_html_table(all_rows), # output_table
@@ -578,8 +589,8 @@ with gr.Blocks() as interface:
578
  gr.update(visible=False), # run_button,
579
  gr.update(visible=True), # show stop button
580
  gr.update(visible=True), # show reset button
581
- gr.update(visible=False), # hide raw_text
582
- gr.update(visible=False), # hide file_upload
583
  gr.update(value=processed_info, visible=True), # processed_info
584
  gr.update(visible=False) # hide NPS modal at start
585
  )
@@ -673,8 +684,8 @@ with gr.Blocks() as interface:
673
  gr.update(visible=False), # run_button
674
  gr.update(visible=False), # stop_button
675
  gr.update(visible=True), # reset_button
676
- gr.update(visible=False), # raw_text
677
- gr.update(visible=False), # file_upload
678
  gr.update(value=processed_info, visible=False), # processed_info
679
  gr.update(visible=True) # NPS modal now visible
680
  )
@@ -701,8 +712,8 @@ with gr.Blocks() as interface:
701
  gr.update(visible=False), # run_button
702
  gr.update(visible=True), # stop_button
703
  gr.update(visible=True), # reset_button
704
- gr.update(visible=False), # hide raw_text
705
- gr.update(visible=False), # hide file_upload
706
  gr.update(value=processed_info, visible=True), # processed_info
707
  gr.update(visible=False) # hide NPS modal at start
708
  )
@@ -739,8 +750,8 @@ with gr.Blocks() as interface:
739
  gr.update(visible=False), # run_button
740
  gr.update(visible=True), # stop_button
741
  gr.update(visible=True), # reset_button
742
- gr.update(visible=False), # raw_text
743
- gr.update(visible=False), # file_upload
744
  gr.update(value=processed_info, visible=True), # processed_info
745
  gr.update(visible=False) # hide NPS modal
746
  )
@@ -774,8 +785,8 @@ with gr.Blocks() as interface:
774
  gr.update(visible=False), # run_button
775
  gr.update(visible=False), # stop_button
776
  gr.update(visible=True), # reset_button
777
- gr.update(visible=False), # raw_text
778
- gr.update(visible=False), # file_upload
779
  gr.update(value="", visible=False), # processed_info
780
  gr.update(visible=True) # NPS modal now visible
781
  )
@@ -810,11 +821,11 @@ with gr.Blocks() as interface:
810
  "", # usage_display
811
  "⏳ Processing...", # status
812
  "\n".join(log_lines), # progress_box
813
- gr.update(visible=True), # run_button
814
  gr.update(visible=True), # stop_button
815
  gr.update(visible=True), # reset_button
816
- gr.update(visible=False), # hide raw_text
817
- gr.update(visible=False), # hide file_upload
818
  gr.update(value=processed_info, visible=True), # processed_info
819
  gr.update(visible=False) # hide NPS modal at start
820
  )
@@ -829,11 +840,11 @@ with gr.Blocks() as interface:
829
  "", # usage_display
830
  "⏳ Processing...", # status
831
  "\n".join(log_lines), # progress_box
832
- gr.update(visible=True), # run_button
833
  gr.update(visible=True), # stop_button
834
  gr.update(visible=True), # reset_button
835
- gr.update(visible=False), # hide raw_text
836
- gr.update(visible=False), # hide file_upload
837
  gr.update(value=processed_info, visible=True), # processed_info
838
  gr.update(visible=False) # hide NPS modal at start
839
  )
@@ -868,8 +879,8 @@ with gr.Blocks() as interface:
868
  gr.update(visible=False), # run_button
869
  gr.update(visible=False), # stop_button
870
  gr.update(visible=True), # reset_button
871
- gr.update(visible=False), # raw_text
872
- gr.update(visible=False), # file_upload
873
  gr.update(value=processed_info, visible=True), # processed_info
874
  gr.update(visible=True) # NPS modal now visible
875
  )
@@ -1104,6 +1115,12 @@ with gr.Blocks() as interface:
1104
  # queue=True, # βœ… ensure the queue is used
1105
  # #every=0.5
1106
  # )
 
 
 
 
 
 
1107
  run_button.click(
1108
  fn=threaded_batch_runner,
1109
  inputs=[file_upload, raw_text, user_email],
 
20
  flow_chart = f.read()
21
 
22
  # This would go in a separate CSS file or a <style> block in your Gradio app
23
+ css = """
24
+ #nps-buttons-container .gr-radio-group {
25
+ display: flex;
26
+ flex-direction: row;
27
+ justify-content: center;
28
+ gap: 8px; /* Adjust spacing between buttons */
29
+ }
30
+ #nps-buttons-container .gr-radio-input {
31
+ display: none; /* Hide the default radio circle */
32
+ }
33
+ #nps-buttons-container .gr-radio-label {
34
+ display: flex;
35
+ justify-content: center;
36
+ align-items: center;
37
+ width: 40px; /* Adjust button size */
38
+ height: 40px;
39
+ border-radius: 8px; /* Adjust border radius for rounded corners */
40
+ background-color: #38a169; /* Example green color */
41
+ color: white;
42
+ font-weight: bold;
43
+ cursor: pointer;
44
+ transition: background-color 0.2s ease;
45
+ }
46
+ #nps-buttons-container .gr-radio-label:hover {
47
+ background-color: #2f855a; /* Darker green on hover */
48
+ }
49
+ #nps-buttons-container input[type="radio"]:checked + .gr-radio-label {
50
+ background-color: #1a4f35; /* Even darker green for the selected state */
51
+ border: 2px solid white; /* Highlight the selected button */
52
+ }
53
+ #nps-left-label, #nps-right-label {
54
+ width: 50%;
55
+ font-size: 0.9em;
56
+ color: #666;
57
+ }
58
+ """
59
 
60
  with gr.Blocks() as interface:
61
  # with gr.Tab("CURIOUS ABOUT THIS PRODUCT?"):
 
63
  with gr.Tab("🧬 Classifier"):
64
  gr.Markdown("# 🧬 mtDNA Location Classifier (MVP)")
65
  #inputMode = gr.Radio(choices=["Single Accession", "Batch Input"], value="Single Accession", label="Choose Input Mode")
66
+ #user_email = gr.Textbox(label="πŸ“§ Your email (used to track free quota)")
67
+
68
+ sign_in_button = gr.Button("Sign in to Download")
69
+ user_email = gr.Textbox(
70
+ label="πŸ“§ Your email (used to track free quota)",
71
+ visible=False
72
+ )
73
+ # The output will be used to display a message to the user
74
+ output_message = gr.Textbox(visible=False, interactive=False)
75
  usage_display = gr.Markdown("", visible=False)
76
 
77
  # with gr.Group() as single_input_group:
 
85
  # file_upload = gr.File(label="πŸ“ Or Upload CSV/Excel File", file_types=[".csv", ".xlsx"], interactive=True, elem_id="file-upload-box")
86
  raw_text = gr.Textbox(label="🧚 Input Accession Number(s) (single (KU131308) or comma-separated (e.g., MF362736.1,MF362738.1,KU131308,MW291678))")
87
  #resume_file = gr.File(label="πŸ—ƒοΈ Previously saved Excel output (optional)", file_types=[".xlsx"], interactive=True)
88
+ gr.HTML("""<a href="https://docs.google.com/spreadsheets/d/1lKqPp17EfHsshJGZRWEpcNOZlGo3F5qU/edit?usp=sharing" download target="_blank">Example Excel Batch Input Format</a>""")
89
  file_upload = gr.File(label="πŸ“ Or Upload CSV/Excel File", file_types=[".csv", ".xlsx"], interactive=True)
90
  processed_info = gr.Markdown(visible=False) # new placeholder for processed list
91
 
 
167
  # return gr.update(visible=True), gr.update(visible=False)
168
  # else:
169
  # return gr.update(visible=False), gr.update(visible=True)
170
+ def show_email_textbox():
171
+ # Return a gr.update() to make the textbox visible and set the message
172
+ return gr.update(visible=True), gr.update(value="Give your email to download excel output and 20+ more free samples", visible=True)
173
+
174
  def classify_with_loading():
175
  return gr.update(value="⏳ Please wait... processing...",visible=True) # Show processing message
176
 
 
577
  warning = f"⚠️ Only processing first {limited_acc} accessions."
578
  else:
579
  warning = f"βœ… All {total} accessions will be processed."
580
+ processed_info = warning + "\n" +f"Processed accessions: {accessions[0]}...{accessions[-1]}"
581
  ### NEW: Hide inputs, show processed_info at start
582
  yield (
583
  make_html_table(all_rows), # output_table
 
589
  gr.update(visible=False), # run_button,
590
  gr.update(visible=True), # show stop button
591
  gr.update(visible=True), # show reset button
592
+ gr.update(visible=True), # hide raw_text
593
+ gr.update(visible=True), # hide file_upload
594
  gr.update(value=processed_info, visible=True), # processed_info
595
  gr.update(visible=False) # hide NPS modal at start
596
  )
 
684
  gr.update(visible=False), # run_button
685
  gr.update(visible=False), # stop_button
686
  gr.update(visible=True), # reset_button
687
+ gr.update(visible=True), # raw_text
688
+ gr.update(visible=True), # file_upload
689
  gr.update(value=processed_info, visible=False), # processed_info
690
  gr.update(visible=True) # NPS modal now visible
691
  )
 
712
  gr.update(visible=False), # run_button
713
  gr.update(visible=True), # stop_button
714
  gr.update(visible=True), # reset_button
715
+ gr.update(visible=True), # hide raw_text
716
+ gr.update(visible=True), # hide file_upload
717
  gr.update(value=processed_info, visible=True), # processed_info
718
  gr.update(visible=False) # hide NPS modal at start
719
  )
 
750
  gr.update(visible=False), # run_button
751
  gr.update(visible=True), # stop_button
752
  gr.update(visible=True), # reset_button
753
+ gr.update(visible=True), # raw_text
754
+ gr.update(visible=True), # file_upload
755
  gr.update(value=processed_info, visible=True), # processed_info
756
  gr.update(visible=False) # hide NPS modal
757
  )
 
785
  gr.update(visible=False), # run_button
786
  gr.update(visible=False), # stop_button
787
  gr.update(visible=True), # reset_button
788
+ gr.update(visible=True), # raw_text
789
+ gr.update(visible=True), # file_upload
790
  gr.update(value="", visible=False), # processed_info
791
  gr.update(visible=True) # NPS modal now visible
792
  )
 
821
  "", # usage_display
822
  "⏳ Processing...", # status
823
  "\n".join(log_lines), # progress_box
824
+ gr.update(visible=False), # run_button
825
  gr.update(visible=True), # stop_button
826
  gr.update(visible=True), # reset_button
827
+ gr.update(visible=True), # hide raw_text
828
+ gr.update(visible=True), # hide file_upload
829
  gr.update(value=processed_info, visible=True), # processed_info
830
  gr.update(visible=False) # hide NPS modal at start
831
  )
 
840
  "", # usage_display
841
  "⏳ Processing...", # status
842
  "\n".join(log_lines), # progress_box
843
+ gr.update(visible=False), # run_button
844
  gr.update(visible=True), # stop_button
845
  gr.update(visible=True), # reset_button
846
+ gr.update(visible=True), # hide raw_text
847
+ gr.update(visible=True), # hide file_upload
848
  gr.update(value=processed_info, visible=True), # processed_info
849
  gr.update(visible=False) # hide NPS modal at start
850
  )
 
879
  gr.update(visible=False), # run_button
880
  gr.update(visible=False), # stop_button
881
  gr.update(visible=True), # reset_button
882
+ gr.update(visible=True), # raw_text
883
+ gr.update(visible=True), # file_upload
884
  gr.update(value=processed_info, visible=True), # processed_info
885
  gr.update(visible=True) # NPS modal now visible
886
  )
 
1115
  # queue=True, # βœ… ensure the queue is used
1116
  # #every=0.5
1117
  # )
1118
+ # Link the button to the function
1119
+ sign_in_button.click(
1120
+ fn=show_email_textbox,
1121
+ outputs=[user_email, output_message] # The outputs are the components to be updated
1122
+ )
1123
+
1124
  run_button.click(
1125
  fn=threaded_batch_runner,
1126
  inputs=[file_upload, raw_text, user_email],