awacke1 commited on
Commit
0b505f3
β€’
1 Parent(s): ceb589a

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +159 -0
app.py ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from azure.cosmos import CosmosClient, PartitionKey
3
+ import os
4
+ import pandas as pd
5
+
6
+ # Streamlit page configuration for wide mode
7
+ st.set_page_config(layout="wide")
8
+
9
+ # Cosmos DB configuration
10
+ ENDPOINT = "https://acae-afd.documents.azure.com:443/"
11
+ SUBSCRIPTION_ID = "003fba60-5b3f-48f4-ab36-3ed11bc40816"
12
+ DATABASE_NAME = os.environ.get("COSMOS_DATABASE_NAME")
13
+ CONTAINER_NAME = os.environ.get("COSMOS_CONTAINER_NAME")
14
+ Key = os.environ.get("Key")
15
+
16
+ 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:
25
+ response = container.scripts.execute_stored_procedure(
26
+ sproc="processPrompt",
27
+ params=[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_records(ids):
45
+ try:
46
+ for id in ids:
47
+ container.delete_item(item=id, partition_key=id)
48
+ return True, f"Successfully deleted {len(ids)} records"
49
+ except Exception as e:
50
+ return False, f"Error deleting records: {str(e)}"
51
+
52
+ # Streamlit app
53
+ st.title("🌟 Cosmos DB Record Management")
54
+
55
+ # Login section
56
+ if 'logged_in' not in st.session_state:
57
+ st.session_state.logged_in = False
58
+
59
+ if not st.session_state.logged_in:
60
+ st.subheader("πŸ” Login")
61
+ input_key = Key
62
+ if st.button("πŸš€ Login"):
63
+ if input_key:
64
+ st.session_state.primary_key = input_key
65
+ st.session_state.logged_in = True
66
+ st.rerun()
67
+ else:
68
+ st.error("Invalid key. Please check your environment variables.")
69
+ else:
70
+ # Initialize Cosmos DB client
71
+ client = CosmosClient(ENDPOINT, credential=st.session_state.primary_key)
72
+ database = client.get_database_client(DATABASE_NAME)
73
+ container = database.get_container_client(CONTAINER_NAME)
74
+
75
+ # Fetch all records
76
+ records_df = fetch_all_records()
77
+
78
+ # Sidebar for data editing
79
+ st.sidebar.title("Edit Records")
80
+ edited_df = st.sidebar.data_editor(records_df, num_rows="dynamic", key="sidebar_editor")
81
+
82
+ # Main Content Area
83
+ col1, col2 = st.columns(2)
84
+
85
+ with col1:
86
+ st.subheader("πŸ“ Enter Record Details")
87
+ id = st.text_input("ID")
88
+ name = st.text_input("Name")
89
+ document = st.text_area("Document")
90
+ evaluation_text = st.text_area("Evaluation Text")
91
+ evaluation_score = st.number_input("Evaluation Score", min_value=0, max_value=100, step=1)
92
+
93
+ if st.button("πŸ’Ύ Insert Record"):
94
+ record = {
95
+ "id": id,
96
+ "name": name,
97
+ "document": document,
98
+ "evaluationText": evaluation_text,
99
+ "evaluationScore": evaluation_score
100
+ }
101
+
102
+ success, response = insert_record(record)
103
+ if success:
104
+ st.success("βœ… Record inserted successfully!")
105
+ st.json(response)
106
+ else:
107
+ st.error(f"❌ Failed to insert record: {response}")
108
+
109
+ with col2:
110
+ st.subheader("πŸ”§ Call Stored Procedure")
111
+ if st.button("Call Procedure"):
112
+ record = {
113
+ "id": id,
114
+ "name": name,
115
+ "document": document,
116
+ "evaluationText": evaluation_text,
117
+ "evaluationScore": evaluation_score
118
+ }
119
+
120
+ success, response = call_stored_procedure(record)
121
+ if success:
122
+ st.success("βœ… Stored procedure executed successfully!")
123
+ st.json(response)
124
+ else:
125
+ st.error(f"❌ Failed to execute stored procedure: {response}")
126
+
127
+ st.subheader("πŸ“Š All Records")
128
+ st.dataframe(edited_df)
129
+
130
+ col3, col4 = st.columns(2)
131
+ with col3:
132
+ if st.button("πŸ—‘οΈ Delete Selected"):
133
+ selected_ids = edited_df[edited_df['select']]['id'].tolist() if 'select' in edited_df.columns else []
134
+ if selected_ids:
135
+ success, message = delete_records(selected_ids)
136
+ if success:
137
+ st.success(message)
138
+ else:
139
+ st.error(message)
140
+ st.rerun()
141
+ else:
142
+ st.warning("No records selected for deletion.")
143
+
144
+ with col4:
145
+ if st.download_button("πŸ“₯ Download Data", edited_df.to_csv(index=False), "cosmos_db_data.csv", "text/csv"):
146
+ st.success("Data downloaded successfully!")
147
+
148
+ # Logout button
149
+ if st.button("πŸšͺ Logout"):
150
+ st.session_state.logged_in = False
151
+ st.rerun()
152
+
153
+ # Display connection info
154
+ st.sidebar.markdown("---")
155
+ st.sidebar.subheader("πŸ”— Connection Information")
156
+ st.sidebar.text(f"Endpoint: {ENDPOINT}")
157
+ st.sidebar.text(f"Subscription ID: {SUBSCRIPTION_ID}")
158
+ st.sidebar.text(f"Database: {DATABASE_NAME}")
159
+ st.sidebar.text(f"Container: {CONTAINER_NAME}")