bluenevus commited on
Commit
2fccc3f
·
1 Parent(s): 148203e

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +27 -9
app.py CHANGED
@@ -184,7 +184,6 @@ def process_document(action, selected_filename=None, chat_input=None):
184
  t = Thread(target=thread_shred)
185
  t.start()
186
  t.join()
187
- # Add the shredded docx to uploaded_documents as a new doc
188
  if result_holder["docx_bytes"] and result_holder["docx_name"]:
189
  docx_name = result_holder["docx_name"]
190
  try:
@@ -335,6 +334,18 @@ def get_generated_doc_list(docdict):
335
  )
336
  return dbc.ListGroup(doc_list, flush=True)
337
 
 
 
 
 
 
 
 
 
 
 
 
 
338
  app.layout = dbc.Container([
339
  dcc.Store(id='shred-store', data={'text': None, 'docx_bytes': None, 'docx_name': None}),
340
  dcc.Store(id='proposal-store', data={'text': None, 'docx_bytes': None, 'docx_name': None}),
@@ -495,12 +506,22 @@ def master_callback(
495
  ctx = callback_context
496
  triggered_id = ctx.triggered[0]['prop_id'].split('.')[0] if ctx.triggered else None
497
 
 
 
 
 
 
 
498
  upload_triggered = False
499
 
500
  shred_store = {'text': None, 'docx_bytes': None, 'docx_name': None}
501
  proposal_store = {'text': None, 'docx_bytes': None, 'docx_name': None}
502
 
503
- # Handle uploads and deletes
 
 
 
 
504
  if triggered_id == 'upload-document' and rfp_content is not None and rfp_filename:
505
  content_type, content_string = rfp_content.split(',')
506
  decoded = base64.b64decode(content_string)
@@ -533,7 +554,7 @@ def master_callback(
533
  logging.error(f"Failed to decode uploaded proposal: {proposal_filename}")
534
  upload_triggered = True
535
 
536
- if triggered_id and isinstance(ctx.inputs_list[4], list):
537
  for i, n_click in enumerate(rfp_delete_clicks):
538
  if n_click:
539
  btn_id = ctx.inputs_list[4][i]['id']
@@ -552,7 +573,7 @@ def master_callback(
552
  upload_triggered = True
553
  break
554
 
555
- if triggered_id and isinstance(ctx.inputs_list[8], list):
556
  for i, n_click in enumerate(proposal_delete_clicks):
557
  if n_click:
558
  btn_id = ctx.inputs_list[8][i]['id']
@@ -571,7 +592,7 @@ def master_callback(
571
  upload_triggered = True
572
  break
573
 
574
- if triggered_id and isinstance(ctx.inputs_list[10], list):
575
  for i, n_click in enumerate(generated_delete_clicks):
576
  if n_click:
577
  btn_id = ctx.inputs_list[10][i]['id']
@@ -584,7 +605,7 @@ def master_callback(
584
  upload_triggered = True
585
  break
586
 
587
- if triggered_id and isinstance(ctx.inputs_list[12], list):
588
  for i, n_click in enumerate(shredded_delete_clicks):
589
  if n_click:
590
  btn_id = ctx.inputs_list[12][i]['id']
@@ -595,7 +616,6 @@ def master_callback(
595
  upload_triggered = True
596
  break
597
 
598
- # Always recalculate options/values after any operation
599
  doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
600
  doc_value = selected_doc if selected_doc in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
601
  shredded_doc_list_items = get_shredded_doc_list(shredded_documents)
@@ -616,7 +636,6 @@ def master_callback(
616
  logging.info(f"Shredded docx saved: {shredded_docx_name}")
617
  if shredded_docx_name not in uploaded_documents:
618
  uploaded_documents[shredded_docx_name] = shredded_text
619
- # Recompute options/values after updating
620
  doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
621
  doc_value = shredded_docx_name if shredded_docx_name in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
622
  uploaded_doc_list = get_uploaded_doc_list(uploaded_documents)
@@ -684,7 +703,6 @@ def master_callback(
684
  generated_doc_list, generated_doc_options, generated_doc_value
685
  )
686
 
687
- # Always return 10 outputs
688
  doc_value = doc_value if doc_value in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
689
  generated_doc_value = generated_doc_value if generated_doc_value in generated_documents else (next(iter(generated_documents), None) if generated_documents else None)
690
  return (
 
184
  t = Thread(target=thread_shred)
185
  t.start()
186
  t.join()
 
187
  if result_holder["docx_bytes"] and result_holder["docx_name"]:
188
  docx_name = result_holder["docx_name"]
189
  try:
 
334
  )
335
  return dbc.ListGroup(doc_list, flush=True)
336
 
337
+ def get_ctx_input_list_item(ctx, idx, default):
338
+ try:
339
+ return ctx.inputs_list[idx]
340
+ except Exception:
341
+ return default
342
+
343
+ def get_ctx_input_n_clicks(ctx, idx):
344
+ try:
345
+ return ctx.inputs_list[idx]
346
+ except Exception:
347
+ return []
348
+
349
  app.layout = dbc.Container([
350
  dcc.Store(id='shred-store', data={'text': None, 'docx_bytes': None, 'docx_name': None}),
351
  dcc.Store(id='proposal-store', data={'text': None, 'docx_bytes': None, 'docx_name': None}),
 
506
  ctx = callback_context
507
  triggered_id = ctx.triggered[0]['prop_id'].split('.')[0] if ctx.triggered else None
508
 
509
+ def safe_get_n_clicks(ctx, idx):
510
+ try:
511
+ return ctx.inputs_list[idx]
512
+ except Exception:
513
+ return []
514
+
515
  upload_triggered = False
516
 
517
  shred_store = {'text': None, 'docx_bytes': None, 'docx_name': None}
518
  proposal_store = {'text': None, 'docx_bytes': None, 'docx_name': None}
519
 
520
+ rfp_delete_clicks = safe_get_n_clicks(ctx, 4)
521
+ proposal_delete_clicks = safe_get_n_clicks(ctx, 8)
522
+ generated_delete_clicks = safe_get_n_clicks(ctx, 10)
523
+ shredded_delete_clicks = safe_get_n_clicks(ctx, 12)
524
+
525
  if triggered_id == 'upload-document' and rfp_content is not None and rfp_filename:
526
  content_type, content_string = rfp_content.split(',')
527
  decoded = base64.b64decode(content_string)
 
554
  logging.error(f"Failed to decode uploaded proposal: {proposal_filename}")
555
  upload_triggered = True
556
 
557
+ if triggered_id and isinstance(rfp_delete_clicks, list):
558
  for i, n_click in enumerate(rfp_delete_clicks):
559
  if n_click:
560
  btn_id = ctx.inputs_list[4][i]['id']
 
573
  upload_triggered = True
574
  break
575
 
576
+ if triggered_id and isinstance(proposal_delete_clicks, list):
577
  for i, n_click in enumerate(proposal_delete_clicks):
578
  if n_click:
579
  btn_id = ctx.inputs_list[8][i]['id']
 
592
  upload_triggered = True
593
  break
594
 
595
+ if triggered_id and isinstance(generated_delete_clicks, list):
596
  for i, n_click in enumerate(generated_delete_clicks):
597
  if n_click:
598
  btn_id = ctx.inputs_list[10][i]['id']
 
605
  upload_triggered = True
606
  break
607
 
608
+ if triggered_id and isinstance(shredded_delete_clicks, list):
609
  for i, n_click in enumerate(shredded_delete_clicks):
610
  if n_click:
611
  btn_id = ctx.inputs_list[12][i]['id']
 
616
  upload_triggered = True
617
  break
618
 
 
619
  doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
620
  doc_value = selected_doc if selected_doc in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
621
  shredded_doc_list_items = get_shredded_doc_list(shredded_documents)
 
636
  logging.info(f"Shredded docx saved: {shredded_docx_name}")
637
  if shredded_docx_name not in uploaded_documents:
638
  uploaded_documents[shredded_docx_name] = shredded_text
 
639
  doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
640
  doc_value = shredded_docx_name if shredded_docx_name in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
641
  uploaded_doc_list = get_uploaded_doc_list(uploaded_documents)
 
703
  generated_doc_list, generated_doc_options, generated_doc_value
704
  )
705
 
 
706
  doc_value = doc_value if doc_value in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
707
  generated_doc_value = generated_doc_value if generated_doc_value in generated_documents else (next(iter(generated_documents), None) if generated_documents else None)
708
  return (