awacke1 commited on
Commit
e25e742
·
verified ·
1 Parent(s): f6fc946

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -31
app.py CHANGED
@@ -1,5 +1,5 @@
1
  import streamlit as st
2
- from azure.cosmos import CosmosClient, PartitionKey
3
  import os
4
  import pandas as pd
5
 
@@ -17,8 +17,10 @@ def insert_record(record):
17
  try:
18
  response = container.create_item(body=record)
19
  return True, response
 
 
20
  except Exception as e:
21
- return False, str(e)
22
 
23
  def call_stored_procedure(record):
24
  try:
@@ -28,25 +30,35 @@ def call_stored_procedure(record):
28
  partition_key=record['id']
29
  )
30
  return True, response
 
 
 
31
  except Exception as e:
32
- error_message = f"Error type: {type(e).__name__}\nError message: {str(e)}"
33
- if hasattr(e, 'sub_status'):
34
- error_message += f"\nSub-status: {e.sub_status}"
35
- if hasattr(e, 'response'):
36
- error_message += f"\nResponse: {e.response}"
37
  return False, error_message
38
 
39
  def fetch_all_records():
40
- query = "SELECT * FROM c"
41
- items = list(container.query_items(query=query, enable_cross_partition_query=True))
42
- return pd.DataFrame(items)
 
 
 
 
 
 
 
43
 
44
  def delete_record(name, id):
45
  try:
46
  container.delete_item(item=id, partition_key=id)
47
  return True, f"Successfully deleted record with name: {name} and id: {id}"
 
 
 
 
48
  except Exception as e:
49
- return False, f"Error deleting record: {str(e)}"
50
 
51
  # Streamlit app
52
  st.title("🌟 Cosmos DB Record Management")
@@ -71,31 +83,46 @@ if not st.session_state.logged_in:
71
  st.error("Invalid key. Please check your environment variables.")
72
  else:
73
  # Initialize Cosmos DB client
74
- client = CosmosClient(ENDPOINT, credential=st.session_state.primary_key)
75
- database = client.get_database_client(DATABASE_NAME)
76
- container = database.get_container_client(CONTAINER_NAME)
 
 
 
 
 
 
 
77
 
78
  # Fetch and display all records
79
  st.subheader("📊 All Records")
80
  df = fetch_all_records()
81
 
82
- # Add a checkbox column to the dataframe
83
- for index, row in df.iterrows():
84
- key = f"select_{row['id']}"
85
- if st.checkbox("Select", key=key):
86
- if row.to_dict() not in st.session_state.selected_records:
87
- st.session_state.selected_records.append(row.to_dict())
88
- else:
89
- st.session_state.selected_records = [r for r in st.session_state.selected_records if r['id'] != row['id']]
90
-
91
- st.write(f"ID: {row['id']}, Name: {row['name']}")
92
- if st.button(f"Delete {row['name']}", key=f"delete_{row['id']}"):
93
- success, message = delete_record(row['name'], row['id'])
94
- if success:
95
- st.success(message)
96
- else:
97
- st.error(message)
98
- st.rerun()
 
 
 
 
 
 
 
 
99
 
100
  # Display selected records
101
  st.subheader("Selected Records")
 
1
  import streamlit as st
2
+ from azure.cosmos import CosmosClient, PartitionKey, exceptions
3
  import os
4
  import pandas as pd
5
 
 
17
  try:
18
  response = container.create_item(body=record)
19
  return True, response
20
+ except exceptions.CosmosHttpResponseError as e:
21
+ return False, f"HTTP error occurred: {str(e)}. Status code: {e.status_code}"
22
  except Exception as e:
23
+ return False, f"An unexpected error occurred: {str(e)}"
24
 
25
  def call_stored_procedure(record):
26
  try:
 
30
  partition_key=record['id']
31
  )
32
  return True, response
33
+ except exceptions.CosmosHttpResponseError as e:
34
+ error_message = f"HTTP error occurred: {str(e)}. Status code: {e.status_code}"
35
+ return False, error_message
36
  except Exception as e:
37
+ error_message = f"An unexpected error occurred: {str(e)}"
 
 
 
 
38
  return False, error_message
39
 
40
  def fetch_all_records():
41
+ try:
42
+ query = "SELECT * FROM c"
43
+ items = list(container.query_items(query=query, enable_cross_partition_query=True))
44
+ return pd.DataFrame(items)
45
+ except exceptions.CosmosHttpResponseError as e:
46
+ st.error(f"HTTP error occurred while fetching records: {str(e)}. Status code: {e.status_code}")
47
+ return pd.DataFrame()
48
+ except Exception as e:
49
+ st.error(f"An unexpected error occurred while fetching records: {str(e)}")
50
+ return pd.DataFrame()
51
 
52
  def delete_record(name, id):
53
  try:
54
  container.delete_item(item=id, partition_key=id)
55
  return True, f"Successfully deleted record with name: {name} and id: {id}"
56
+ except exceptions.CosmosResourceNotFoundError:
57
+ return False, f"Record with id {id} not found. It may have been already deleted."
58
+ except exceptions.CosmosHttpResponseError as e:
59
+ return False, f"HTTP error occurred: {str(e)}. Status code: {e.status_code}"
60
  except Exception as e:
61
+ return False, f"An unexpected error occurred: {str(e)}"
62
 
63
  # Streamlit app
64
  st.title("🌟 Cosmos DB Record Management")
 
83
  st.error("Invalid key. Please check your environment variables.")
84
  else:
85
  # Initialize Cosmos DB client
86
+ try:
87
+ client = CosmosClient(ENDPOINT, credential=st.session_state.primary_key)
88
+ database = client.get_database_client(DATABASE_NAME)
89
+ container = database.get_container_client(CONTAINER_NAME)
90
+ except exceptions.CosmosHttpResponseError as e:
91
+ st.error(f"Failed to connect to Cosmos DB. HTTP error: {str(e)}. Status code: {e.status_code}")
92
+ st.stop()
93
+ except Exception as e:
94
+ st.error(f"An unexpected error occurred while connecting to Cosmos DB: {str(e)}")
95
+ st.stop()
96
 
97
  # Fetch and display all records
98
  st.subheader("📊 All Records")
99
  df = fetch_all_records()
100
 
101
+ if df.empty:
102
+ st.write("No records found in the database.")
103
+ else:
104
+ for index, row in df.iterrows():
105
+ col1, col2, col3 = st.columns([3, 1, 1])
106
+
107
+ with col1:
108
+ st.write(f"ID: {row['id']}, Name: {row['name']}")
109
+
110
+ with col2:
111
+ key = f"select_{row['id']}"
112
+ if st.checkbox("Select", key=key, value=row.to_dict() in st.session_state.selected_records):
113
+ if row.to_dict() not in st.session_state.selected_records:
114
+ st.session_state.selected_records.append(row.to_dict())
115
+ else:
116
+ st.session_state.selected_records = [r for r in st.session_state.selected_records if r['id'] != row['id']]
117
+
118
+ with col3:
119
+ if st.button(f"Delete", key=f"delete_{row['id']}"):
120
+ success, message = delete_record(row['name'], row['id'])
121
+ if success:
122
+ st.success(message)
123
+ st.rerun()
124
+ else:
125
+ st.error(message)
126
 
127
  # Display selected records
128
  st.subheader("Selected Records")