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