File size: 4,923 Bytes
644ca8a
4d95901
57ebff8
bf5ebfe
 
 
644ca8a
4d95901
644ca8a
 
 
4d95901
644ca8a
 
 
 
3e41210
 
 
9dbc8f3
 
3e41210
9dbc8f3
3e41210
9dbc8f3
 
3e41210
9dbc8f3
3e41210
9dbc8f3
3e41210
 
9dbc8f3
3e41210
 
 
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
import os
import streamlit as st
from azure.cosmos import CosmosClient, PartitionKey
from azure.storage.blob import BlobServiceClient
import requests

# 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:
                st.markdown(f"  - Item: `{item['id']}`")  # Replace 'id' with the appropriate key if different

# Button to Trigger Display of Cosmos DB Structure
if st.button('Show Cosmos DB Structure'):
    display_cosmos_db_structure()



# 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)