awacke1 commited on
Commit
9e4b029
Β·
verified Β·
1 Parent(s): 8b58c3c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -39
app.py CHANGED
@@ -116,7 +116,6 @@ def preprocess_text(text):
116
  return text.strip()
117
 
118
  def sanitize_json_text(text):
119
- # Remove control characters but keep newlines intact
120
  text = re.sub(r'[\x00-\x08\x0B\x0C\x0E-\x1F]', '', text)
121
  return text.strip()
122
 
@@ -156,7 +155,7 @@ def delete_record(container, record):
156
  try:
157
  doc_id = record["id"]
158
  partition_key_value = record.get("pk", doc_id)
159
- st.write(f"Deleting {doc_id} with partition key {partition_key_value}") # Debug log
160
  container.delete_item(item=doc_id, partition_key=partition_key_value)
161
  return True, f"Record {doc_id} deleted. πŸ—‘οΈ"
162
  except exceptions.CosmosResourceNotFoundError:
@@ -347,14 +346,16 @@ def update_file_management_section():
347
  # =============================================================================
348
  # ───────────── UI FUNCTIONS ─────────────
349
  # =============================================================================
350
- def edit_all_documents(container):
351
- st.markdown("### πŸ“‘ All Documents")
352
  documents = get_documents(container)
 
 
 
353
  if not documents:
354
- st.info("No documents in this container.")
355
  return
356
 
357
- # Initialize saved_docs if not present
358
  if 'saved_docs' not in st.session_state:
359
  st.session_state.saved_docs = {}
360
 
@@ -365,7 +366,6 @@ def edit_all_documents(container):
365
  header = f"{doc.get('name', 'Unnamed')} - {formatted_ts}"
366
  with st.expander(header):
367
  doc_key = f"editor_{doc['id']}"
368
- # Use saved_docs for initial value if available, else original doc
369
  initial_value = st.session_state.saved_docs.get(doc['id'], json.dumps(doc, indent=2))
370
  edited_content = st.text_area("Edit JSON", value=initial_value, height=300, key=doc_key)
371
  col_save, col_delete = st.columns(2)
@@ -382,7 +382,7 @@ def edit_all_documents(container):
382
  if success:
383
  st.success(f"Saved {doc['id']}")
384
  st.session_state.saved_docs[doc['id']] = json.dumps(updated_doc, indent=2)
385
- st.rerun() # Refresh UI to reflect saved state
386
  else:
387
  st.error(message)
388
  except json.JSONDecodeError as e:
@@ -472,39 +472,29 @@ def new_links_record(container):
472
  else:
473
  st.error(f"Error creating links record: {message}")
474
 
475
- def vector_keyword_search(keyword, container):
476
- try:
477
- query = f"SELECT * FROM c WHERE CONTAINS(c.content, '{keyword}')"
478
- results = list(container.query_items(query=query, enable_cross_partition_query=True))
479
- return results
480
- except Exception as e:
481
- st.error(f"Search error: {str(e)}")
482
- return []
483
-
484
- def display_search_results(keyword, container):
485
- results = vector_keyword_search(keyword, container)
486
- st.markdown("### πŸ” Search Results")
487
- for res in results:
488
- doc_id = res.get("id", "")
489
- with st.expander(f"Result {doc_id}"):
490
- edited = st.text_area("Edit Document", value=json.dumps(res, indent=2), key=f"search_{doc_id}")
491
- if st.button(f"πŸ’Ύ Save changes", key=f"save_search_{doc_id}"):
492
- try:
493
- updated_doc = json.loads(edited)
494
- success, message = update_record(container, updated_doc)
495
- if success:
496
- st.success(f"Updated {doc_id}!")
497
- st.rerun()
498
- else:
499
- st.error(message)
500
- except Exception as e:
501
- st.error(f"Error saving: {str(e)}")
502
 
503
  def search_documents_ui(container):
504
  with st.sidebar.form("search_form"):
505
  keyword = st.text_input("Search Keyword", key="search_keyword")
506
- if st.form_submit_button("πŸ” Search") and keyword:
507
- display_search_results(keyword, container)
 
 
 
 
 
 
 
 
 
 
508
 
509
  def validate_and_preprocess_image(file_data, target_size=(576, 1024)):
510
  try:
@@ -633,6 +623,8 @@ def main():
633
  st.session_state.selected_database = selected_db
634
  st.session_state.selected_container = None
635
  st.session_state.current_container = None
 
 
636
  st.rerun()
637
 
638
  # Containers Section
@@ -653,6 +645,8 @@ def main():
653
  if selected_container != st.session_state.get("selected_container"):
654
  st.session_state.selected_container = selected_container
655
  st.session_state.current_container = database.get_container_client(selected_container)
 
 
656
  st.rerun()
657
 
658
  # Actions Section
@@ -677,9 +671,10 @@ def main():
677
  new_links_record(st.session_state.current_container)
678
  search_documents_ui(st.session_state.current_container)
679
 
680
- # Central Area: Editable Documents
681
  if st.session_state.current_container:
682
- edit_all_documents(st.session_state.current_container)
 
683
  else:
684
  st.info("Select a database and container to view and edit documents.")
685
 
@@ -694,6 +689,8 @@ def main():
694
  st.session_state.selected_database = None
695
  st.session_state.selected_container = None
696
  st.session_state.current_container = None
 
 
697
  st.rerun()
698
 
699
  if __name__ == "__main__":
 
116
  return text.strip()
117
 
118
  def sanitize_json_text(text):
 
119
  text = re.sub(r'[\x00-\x08\x0B\x0C\x0E-\x1F]', '', text)
120
  return text.strip()
121
 
 
155
  try:
156
  doc_id = record["id"]
157
  partition_key_value = record.get("pk", doc_id)
158
+ st.write(f"Deleting {doc_id} with partition key {partition_key_value}")
159
  container.delete_item(item=doc_id, partition_key=partition_key_value)
160
  return True, f"Record {doc_id} deleted. πŸ—‘οΈ"
161
  except exceptions.CosmosResourceNotFoundError:
 
346
  # =============================================================================
347
  # ───────────── UI FUNCTIONS ─────────────
348
  # =============================================================================
349
+ def edit_all_documents(container, search_keyword=None):
350
+ st.markdown("### πŸ“‘ All Documents" + (f" (Filtered: '{search_keyword}')" if search_keyword else ""))
351
  documents = get_documents(container)
352
+ if search_keyword:
353
+ # Filter documents by search keyword
354
+ documents = [doc for doc in documents if vector_keyword_search(search_keyword, doc)]
355
  if not documents:
356
+ st.info("No documents match the current filter." if search_keyword else "No documents in this container.")
357
  return
358
 
 
359
  if 'saved_docs' not in st.session_state:
360
  st.session_state.saved_docs = {}
361
 
 
366
  header = f"{doc.get('name', 'Unnamed')} - {formatted_ts}"
367
  with st.expander(header):
368
  doc_key = f"editor_{doc['id']}"
 
369
  initial_value = st.session_state.saved_docs.get(doc['id'], json.dumps(doc, indent=2))
370
  edited_content = st.text_area("Edit JSON", value=initial_value, height=300, key=doc_key)
371
  col_save, col_delete = st.columns(2)
 
382
  if success:
383
  st.success(f"Saved {doc['id']}")
384
  st.session_state.saved_docs[doc['id']] = json.dumps(updated_doc, indent=2)
385
+ st.rerun()
386
  else:
387
  st.error(message)
388
  except json.JSONDecodeError as e:
 
472
  else:
473
  st.error(f"Error creating links record: {message}")
474
 
475
+ def vector_keyword_search(keyword, doc):
476
+ # Check if keyword exists in any string field of the document
477
+ keyword = keyword.lower()
478
+ for key, value in doc.items():
479
+ if isinstance(value, str) and keyword in value.lower():
480
+ return True
481
+ return False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
482
 
483
  def search_documents_ui(container):
484
  with st.sidebar.form("search_form"):
485
  keyword = st.text_input("Search Keyword", key="search_keyword")
486
+ col1, col2 = st.columns(2)
487
+ with col1:
488
+ search_submitted = st.form_submit_button("πŸ” Search")
489
+ with col2:
490
+ clear_submitted = st.form_submit_button("πŸ—‘οΈ Clear")
491
+ if search_submitted and keyword:
492
+ st.session_state.search_keyword = keyword
493
+ st.rerun()
494
+ if clear_submitted:
495
+ if 'search_keyword' in st.session_state:
496
+ del st.session_state.search_keyword
497
+ st.rerun()
498
 
499
  def validate_and_preprocess_image(file_data, target_size=(576, 1024)):
500
  try:
 
623
  st.session_state.selected_database = selected_db
624
  st.session_state.selected_container = None
625
  st.session_state.current_container = None
626
+ if 'search_keyword' in st.session_state:
627
+ del st.session_state.search_keyword
628
  st.rerun()
629
 
630
  # Containers Section
 
645
  if selected_container != st.session_state.get("selected_container"):
646
  st.session_state.selected_container = selected_container
647
  st.session_state.current_container = database.get_container_client(selected_container)
648
+ if 'search_keyword' in st.session_state:
649
+ del st.session_state.search_keyword
650
  st.rerun()
651
 
652
  # Actions Section
 
671
  new_links_record(st.session_state.current_container)
672
  search_documents_ui(st.session_state.current_container)
673
 
674
+ # Central Area: Editable Documents with Search Filter
675
  if st.session_state.current_container:
676
+ search_keyword = st.session_state.get('search_keyword', None)
677
+ edit_all_documents(st.session_state.current_container, search_keyword)
678
  else:
679
  st.info("Select a database and container to view and edit documents.")
680
 
 
689
  st.session_state.selected_database = None
690
  st.session_state.selected_container = None
691
  st.session_state.current_container = None
692
+ if 'search_keyword' in st.session_state:
693
+ del st.session_state.search_keyword
694
  st.rerun()
695
 
696
  if __name__ == "__main__":