Spaces:
Running
Running
File size: 7,700 Bytes
644ca8a 4d95901 57ebff8 bf5ebfe 8b66346 bf5ebfe 2faaefc bf5ebfe 644ca8a 4d95901 644ca8a 4d95901 644ca8a f05b0a0 3e41210 9dbc8f3 3e41210 9dbc8f3 3e41210 9dbc8f3 3e41210 9dbc8f3 3e41210 9dbc8f3 3e41210 f05b0a0 9dbc8f3 f05b0a0 2faaefc 8b66346 2faaefc 8b66346 2faaefc f05b0a0 2faaefc e73d5b7 2faaefc e73d5b7 2faaefc e73d5b7 2faaefc f474509 bf5ebfe 57ebff8 bf5ebfe 57ebff8 bf5ebfe 57ebff8 bf5ebfe 57ebff8 bf5ebfe |
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 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
import os
import streamlit as st
from azure.cosmos import CosmosClient, PartitionKey
from azure.storage.blob import BlobServiceClient
from azure.cosmos.exceptions import CosmosResourceNotFoundError
import requests
import glob
# Environment Variables
COSMOS_CONNECTION_STRING = os.getenv('COSMOS_CONNECTION_STRING')
BLOB_STORAGE_CONNECTION_STRING = os.getenv('BLOB_STORAGE_CONNECTION_STRING')
# Initialize Azure Cosmos DB Client
cosmos_client = CosmosClient.from_connection_string(COSMOS_CONNECTION_STRING)
# Initialize Azure Blob Storage Client
blob_service = BlobServiceClient.from_connection_string(BLOB_STORAGE_CONNECTION_STRING)
# Function to Retrieve and Display Cosmos DB Structure
def display_cosmos_db_structure():
st.subheader('Azure Cosmos DB Structure')
for db_properties in cosmos_client.list_databases():
db_name = db_properties['id']
st.markdown(f"#### Database: {db_name}")
database_client = cosmos_client.get_database_client(db_name)
for container_properties in database_client.list_containers():
container_name = container_properties['id']
st.markdown(f"- **Container**: {container_name}")
container_client = database_client.get_container_client(container_name)
items = list(container_client.read_all_items())
for item in items:
item_desc = f" - Item: `{item['id']}`"
if 'file_name' in item and item['file_name'].endswith('.png'):
st.markdown(item_desc)
st.image(item['file_name'])
else:
st.markdown(item_desc)
# Function to Add or Update an Item
def add_or_update_item(database_name, container_name, item_id, item_data):
container = cosmos_client.get_database_client(database_name).get_container_client(container_name)
try:
existing_item = container.read_item(item_id, partition_key=PartitionKey(item_id))
existing_item.update(item_data)
container.replace_item(item_id, existing_item)
except CosmosResourceNotFoundError:
container.create_item(item_data)
# Function to Add or Update an Item
def add_or_update_item(database_name, container_name, item_id, item_data):
container = cosmos_client.get_database_client(database_name).get_container_client(container_name)
try:
existing_item = container.read_item(item_id, partition_key=PartitionKey(item_id))
existing_item.update(item_data)
container.replace_item(item_id, existing_item)
except exceptions.CosmosResourceNotFoundError:
container.create_item(item_data)
# Button to Trigger Display of Cosmos DB Structure
if st.button('Show Cosmos DB Structure'):
display_cosmos_db_structure()
# Test Function to Insert PNG Images
def test_insert_png_images():
# Get the first database and container
db_properties = next(cosmos_client.list_databases(), None)
if db_properties:
db_name = db_properties['id']
database_client = cosmos_client.get_database_client(db_name)
container_properties = next(database_client.list_containers(), None)
if container_properties:
container_name = container_properties['id']
# Insert PNG files
png_files = glob.glob('*.png')
for file_name in png_files:
item_id = os.path.splitext(file_name)[0] # Use file name without extension as ID
item_data = {"id": item_id, "file_name": file_name}
add_or_update_item(database_client, container_name, item_id, item_data)
st.write(f"Inserted: {file_name}")
# Displaying Images
st.subheader("Displaying Images in Container")
items = list(database_client.get_container_client(container_name).read_all_items())
for item in items:
if 'file_name' in item and item['file_name'].endswith('.png'):
st.image(item['file_name'], caption=item['file_name'])
else:
st.error("No container found in the database.")
else:
st.error("No database found.")
# UI to Test Image Insertion Function
if st.button('Test Insert PNG Images'):
test_insert_png_images()
# Function to Add an Item
def add_item_to_container(database_name, container_name, item):
container = cosmos_client.get_database_client(database_name).get_container_client(container_name)
container.create_item(item)
# Function to Get All Item Keys from a Container
def get_all_item_keys(database_name, container_name):
container = cosmos_client.get_database_client(database_name).get_container_client(container_name)
items = list(container.query_items(
query="SELECT c.id FROM c",
enable_cross_partition_query=True))
return [item['id'] for item in items]
# Function to Retrieve and Display an Item
def display_item(database_name, container_name, item_id):
container = cosmos_client.get_database_client(database_name).get_container_client(container_name)
item = container.read_item(item_id, partition_key=PartitionKey(item_id))
st.markdown(f"- **Item ID**: {item_id}, **Content**: {json.dumps(item)}")
# Test Function to Add and Retrieve Image Prompts
def test_image_prompts(database_name, container_name):
# Sample data
image_prompts = [{"id": f"image_{i}", "prompt": f"Image prompt {i}", "image_url": f"http://example.com/image_{i}.jpg"} for i in range(10)]
# Add items
for item in image_prompts:
add_item_to_container(database_name, container_name, item)
# Retrieve and display items
item_keys = get_all_item_keys(database_name, container_name)
for key in item_keys:
display_item(database_name, container_name, key)
# UI to Test Image Prompts Function
if st.button('Test Image Prompts'):
test_database_name = st.text_input('Enter Test Database Name')
test_container_name = st.text_input('Enter Test Container Name')
if test_database_name and test_container_name:
test_image_prompts(test_database_name, test_container_name)
else:
st.error('Please enter the test database and container names.')
# Streamlit UI
st.title('Azure Services Integration with Streamlit')
# Azure Cosmos DB - CRUD Operations
st.subheader('Azure Cosmos DB - CRUD Operations')
cosmos_db = st.text_input('Database Name')
cosmos_container = st.text_input('Container Name')
item_id = st.text_input("Item ID (for Read, Update, Delete)")
item_data = st.text_area("Item Data (JSON format, for Create and Update)")
if st.button('Create Item in Cosmos DB'):
container = cosmos_client.get_database_client(cosmos_db).get_container_client(cosmos_container)
container.create_item(item_data)
if st.button('Read Item from Cosmos DB'):
container = cosmos_client.get_database_client(cosmos_db).get_container_client(cosmos_container)
item = container.read_item(item_id, partition_key=PartitionKey(item_id))
st.json(item)
# Azure Blob Storage - Upload/Download
st.subheader('Azure Blob Storage - Upload/Download')
blob_container = st.text_input('Blob Container')
blob_file = st.file_uploader('Upload file to Blob')
if blob_file is not None and st.button('Upload to Blob'):
blob_client = blob_service.get_blob_client(container=blob_container, blob=blob_file.name)
blob_client.upload_blob(blob_file.getvalue())
# Azure Functions - Trigger
st.subheader('Azure Functions - Trigger')
function_url = st.text_input('Function URL')
if st.button('Call Azure Function'):
response = requests.get(function_url)
st.write('Function Response:', response.text)
|