From 778e58719cc6e2dea89ffaa348ce864a24db5ac9 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 24 Mar 2026 12:30:39 +0000 Subject: [PATCH 1/5] . --- .../python/scripts/... | 0 .../python/scripts/deploy.sh | 53 +++++--- .../python/src/app.py | 10 -- .../python/src/cosmosdb_client.py | 17 ++- .../python/src/templates/index.html | 118 ++++-------------- 5 files changed, 75 insertions(+), 123 deletions(-) create mode 100644 samples/web-app-cosmosdb-nosql-api/python/scripts/... diff --git a/samples/web-app-cosmosdb-nosql-api/python/scripts/... b/samples/web-app-cosmosdb-nosql-api/python/scripts/... new file mode 100644 index 0000000..e69de29 diff --git a/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh b/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh index 0abcf25..3cdc0b9 100755 --- a/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh +++ b/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh @@ -15,23 +15,26 @@ RANDOM_SUFFIX=$(echo $RANDOM) NEW_DB_NAME="vacationplanner_${RANDOM_SUFFIX}" AZURECOSMOSDB_DATABASENAME=$NEW_DB_NAME AZURECOSMOSDB_CONTAINERNAME="activities_${RANDOM_SUFFIX}" +<<<<<<< Updated upstream +======= +AURECOSMOSDB_PARTITION_KEY="/username" -# Start azure CLI local mode session -azlocal login +azlocal start-interception +>>>>>>> Stashed changes -# Change the current directory to the script's directory -#cd "$CURRENT_DIR" || exit +# Start azure CLI local mode session +# az login # Validates if the resource group exists in the subscription, if not creates it echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists..." -azlocal group show --name $RESOURCE_GROUP_NAME &>/dev/null +az group show --name $RESOURCE_GROUP_NAME &>/dev/null if [[ $? != 0 ]]; then echo "No resource group [$RESOURCE_GROUP_NAME] exists" echo "Creating resource group [$RESOURCE_GROUP_NAME]..." # Create the resource group - azlocal group create \ + az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --only-show-errors 1> /dev/null \ @@ -47,7 +50,7 @@ else fi echo "Create CosmosDB NoSQL Account" - export AZURECOSMOSDB_ENDPOINT=$(azlocal cosmosdb create \ + export AZURECOSMOSDB_ENDPOINT=$(az cosmosdb create \ --resource-group $RESOURCE_GROUP_NAME \ --name $WEB_APP_NAME \ --locations regionName=$LOCATION \ @@ -57,8 +60,26 @@ echo "Create CosmosDB NoSQL Account" echo "Account created" echo "AZURECOSMOSDB_ENDPOINT set to $AZURECOSMOSDB_ENDPOINT" +<<<<<<< Updated upstream +======= +echo "Create CosmosDB NoSQL Database" +az cosmosdb sql database create \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $AZURECOSMOSDB_DATABASENAME \ + --account-name $WEB_APP_NAME + +echo "Create CosmosDB NoSQL Container" +az cosmosdb sql container create \ + --resource-group $RESOURCE_GROUP_NAME \ + --account-name $WEB_APP_NAME \ + --database-name $AZURECOSMOSDB_DATABASENAME \ + --name $AZURECOSMOSDB_CONTAINERNAME \ + --partition-key-path $AURECOSMOSDB_PARTITION_KEY \ + --throughput 400 + +>>>>>>> Stashed changes echo "Fetching DB Account primary master key" -export AZURECOSMOSDB_PRIMARY_KEY=$(azlocal cosmosdb keys list \ +export AZURECOSMOSDB_PRIMARY_KEY=$(az cosmosdb keys list \ --resource-group $RESOURCE_GROUP_NAME \ --name $WEB_APP_NAME \ --query "primaryMasterKey" \ @@ -66,15 +87,15 @@ export AZURECOSMOSDB_PRIMARY_KEY=$(azlocal cosmosdb keys list \ echo "Primary master key is $AZURECOSMOSDB_PRIMARY_KEY" echo "Creating App service" -azlocal appservice plan create --name $WEB_APP_NAME --resource-group $RESOURCE_GROUP_NAME --sku B1 --is-linux +az appservice plan create --name $WEB_APP_NAME --resource-group $RESOURCE_GROUP_NAME --sku B1 --is-linux echo "App service created" echo "Creating Web App" -azlocal webapp create --name $WEB_APP_NAME --resource-group $RESOURCE_GROUP_NAME --plan $WEB_APP_NAME --runtime PYTHON:3.13 +az webapp create --name $WEB_APP_NAME --resource-group $RESOURCE_GROUP_NAME --plan $WEB_APP_NAME --runtime PYTHON:3.13 echo "Web App created" echo "Configure appsettings environment variables" -azlocal webapp config appsettings set \ +az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $WEB_APP_NAME \ --settings AZURECOSMOSDB_ENDPOINT=$AZURECOSMOSDB_ENDPOINT \ @@ -84,7 +105,7 @@ azlocal webapp config appsettings set \ # Print the application settings of the web app echo "Retrieving application settings for web app [$WEB_APP_NAME]..." -azlocal webapp config appsettings list \ +az webapp config appsettings list \ --resource-group $RESOURCE_GROUP_NAME \ --name $WEB_APP_NAME @@ -102,15 +123,13 @@ zip -r "$ZIPFILE" app.py cosmosdb_client.py static templates requirements.txt # Deploy the web app echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." -echo "Using azlocal webapp deploy command for LocalStack emulator environment." -azlocal webapp deploy \ +echo "Using az webapp deploy command for LocalStack emulator environment." +az webapp deploy \ --resource-group $RESOURCE_GROUP_NAME \ --name $WEB_APP_NAME \ --src-path ${ZIPFILE} \ --type zip \ - --async true \ - --debug \ - --verbose 1>/dev/null + --async true # Remove the zip package of the web app if [ -f "$ZIPFILE" ]; then diff --git a/samples/web-app-cosmosdb-nosql-api/python/src/app.py b/samples/web-app-cosmosdb-nosql-api/python/src/app.py index bf9fbc9..3ae7cd4 100644 --- a/samples/web-app-cosmosdb-nosql-api/python/src/app.py +++ b/samples/web-app-cosmosdb-nosql-api/python/src/app.py @@ -110,15 +110,5 @@ def delete(activity_id: str): return redirect(url_for('index')) -@app.route('/edit/', methods=['POST']) -def edit(activity_id: str): - new_text = request.form.get('new_text') - - if new_text: - logger.info(f"Updating ID {activity_id} with activity: {new_text}") - get_cosmos().update_document_activity(activity_id, username, new_text) - - return redirect(url_for('index')) - if __name__ == '__main__': app.run(debug=True) diff --git a/samples/web-app-cosmosdb-nosql-api/python/src/cosmosdb_client.py b/samples/web-app-cosmosdb-nosql-api/python/src/cosmosdb_client.py index 79092b8..49274df 100644 --- a/samples/web-app-cosmosdb-nosql-api/python/src/cosmosdb_client.py +++ b/samples/web-app-cosmosdb-nosql-api/python/src/cosmosdb_client.py @@ -62,7 +62,18 @@ def update_document_activity(self, activity_id: str, username: str, new_text: st logger.warning(f"Update failed: {e}") def delete_document_by_id(self, doc_id: str, username: str): + self.ensure_initialized() + try: - self.container.delete_item(item=doc_id, partition_key=username) - except exceptions.CosmosResourceNotFoundError: - pass + doc_to_delete = self.container.read_item(item=doc_id, partition_key=[username]) + self.container.delete_item(item=doc_to_delete, partition_key=[username]) + except exceptions.CosmosResourceNotFoundError as e: + logger.warning(f"Cosmos resource with doc_id {doc_id} and username {username} was not found") + raise e + except exceptions.CosmosHttpResponseError as e: + raise e + except Exception as e: + # THIS IS THE CRITICAL LOG: This will tell us exactly why it's stopping + logger.info(f"DELETE METHOD CRASHED: Error Type: {type(e).__name__}, Message: {e}") + # Optionally re-raise if you want the Flask debugger to show it + # raise e \ No newline at end of file diff --git a/samples/web-app-cosmosdb-nosql-api/python/src/templates/index.html b/samples/web-app-cosmosdb-nosql-api/python/src/templates/index.html index 5928b63..0b55e9c 100644 --- a/samples/web-app-cosmosdb-nosql-api/python/src/templates/index.html +++ b/samples/web-app-cosmosdb-nosql-api/python/src/templates/index.html @@ -1,54 +1,3 @@ - - - @@ -59,15 +8,17 @@

Vacation Planner

-
+
Summer Banner

Vacation Planner

-
-
- - + +
+ + +
@@ -76,36 +27,23 @@

Vacation Planner

Activity - Actions + Action {% for activity in activities %} - - {{ activity[1] }} - -
-
- - - -
+ {{ activity[1] }} + + + +
- -
- - -
- -
-
- {% else %} - No vacation plans yet! + No vacation plans yet! {% endfor %} @@ -114,24 +52,18 @@

Vacation Planner

- + \ No newline at end of file From 72c9db0f63a61ff716263b1de383292f7be59a27 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 24 Mar 2026 12:41:27 +0000 Subject: [PATCH 2/5] . --- .../python/scripts/deploy.sh | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh b/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh index 3cdc0b9..66e11dd 100755 --- a/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh +++ b/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh @@ -15,15 +15,9 @@ RANDOM_SUFFIX=$(echo $RANDOM) NEW_DB_NAME="vacationplanner_${RANDOM_SUFFIX}" AZURECOSMOSDB_DATABASENAME=$NEW_DB_NAME AZURECOSMOSDB_CONTAINERNAME="activities_${RANDOM_SUFFIX}" -<<<<<<< Updated upstream -======= AURECOSMOSDB_PARTITION_KEY="/username" -azlocal start-interception ->>>>>>> Stashed changes - -# Start azure CLI local mode session -# az login +# azlocal start-interception # Validates if the resource group exists in the subscription, if not creates it echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists..." @@ -60,8 +54,6 @@ echo "Create CosmosDB NoSQL Account" echo "Account created" echo "AZURECOSMOSDB_ENDPOINT set to $AZURECOSMOSDB_ENDPOINT" -<<<<<<< Updated upstream -======= echo "Create CosmosDB NoSQL Database" az cosmosdb sql database create \ --resource-group $RESOURCE_GROUP_NAME \ @@ -77,7 +69,6 @@ az cosmosdb sql container create \ --partition-key-path $AURECOSMOSDB_PARTITION_KEY \ --throughput 400 ->>>>>>> Stashed changes echo "Fetching DB Account primary master key" export AZURECOSMOSDB_PRIMARY_KEY=$(az cosmosdb keys list \ --resource-group $RESOURCE_GROUP_NAME \ From 1f466a9cbe5ffacac4ca99106a3757cd4b110a1d Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 24 Mar 2026 12:45:36 +0000 Subject: [PATCH 3/5] . --- .../web-app-cosmosdb-nosql-api/python/src/cosmosdb_client.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/samples/web-app-cosmosdb-nosql-api/python/src/cosmosdb_client.py b/samples/web-app-cosmosdb-nosql-api/python/src/cosmosdb_client.py index 49274df..0eb19b7 100644 --- a/samples/web-app-cosmosdb-nosql-api/python/src/cosmosdb_client.py +++ b/samples/web-app-cosmosdb-nosql-api/python/src/cosmosdb_client.py @@ -73,7 +73,5 @@ def delete_document_by_id(self, doc_id: str, username: str): except exceptions.CosmosHttpResponseError as e: raise e except Exception as e: - # THIS IS THE CRITICAL LOG: This will tell us exactly why it's stopping logger.info(f"DELETE METHOD CRASHED: Error Type: {type(e).__name__}, Message: {e}") - # Optionally re-raise if you want the Flask debugger to show it - # raise e \ No newline at end of file + raise e \ No newline at end of file From 798d6db038076e8d018c7da4fbe92cd11ed9b501 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 24 Mar 2026 12:48:28 +0000 Subject: [PATCH 4/5] . --- .../python/scripts/call-web-app.sh | 6 ++--- .../python/scripts/validate.sh | 24 +++++-------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/samples/web-app-cosmosdb-nosql-api/python/scripts/call-web-app.sh b/samples/web-app-cosmosdb-nosql-api/python/scripts/call-web-app.sh index 26e9e7e..c45a3bd 100755 --- a/samples/web-app-cosmosdb-nosql-api/python/scripts/call-web-app.sh +++ b/samples/web-app-cosmosdb-nosql-api/python/scripts/call-web-app.sh @@ -68,7 +68,7 @@ get_docker_container_port_mapping() { call_web_app() { # Get the web app name echo "Getting web app name..." - web_app_name=$(azlocal webapp list --query '[0].name' --output tsv) + web_app_name=$(az webapp list --query '[0].name' --output tsv) if [ -n "$web_app_name" ]; then echo "Web app [$web_app_name] successfully retrieved." @@ -79,7 +79,7 @@ call_web_app() { # Get the resource group name echo "Getting resource group name for web app [$web_app_name]..." - resource_group_name=$(azlocal webapp list --query '[0].resourceGroup' --output tsv) + resource_group_name=$(az webapp list --query '[0].resourceGroup' --output tsv) if [ -n "$resource_group_name" ]; then echo "Resource group [$resource_group_name] successfully retrieved." @@ -90,7 +90,7 @@ call_web_app() { # Get the the default host name of the web app echo "Getting the default host name of the web app [$web_app_name]..." - app_host_name=$(azlocal webapp show \ + app_host_name=$(az webapp show \ --name "$web_app_name" \ --resource-group "$resource_group_name" \ --query 'defaultHostName' \ diff --git a/samples/web-app-cosmosdb-nosql-api/python/scripts/validate.sh b/samples/web-app-cosmosdb-nosql-api/python/scripts/validate.sh index 88bb2df..cc024bc 100755 --- a/samples/web-app-cosmosdb-nosql-api/python/scripts/validate.sh +++ b/samples/web-app-cosmosdb-nosql-api/python/scripts/validate.sh @@ -1,48 +1,36 @@ #!/bin/bash -# Variables -ENVIRONMENT=$(az account show --query environmentName --output tsv) - -# Choose the appropriate CLI based on the environment -if [[ $ENVIRONMENT == "LocalStack" ]]; then - echo "Using azlocal for LocalStack emulator environment." - AZ="azlocal" -else - echo "Using standard az for AzureCloud environment." - AZ="az" -fi - # Check resource group -$AZ group show \ +az group show \ --name local-rg \ --output table # List resources -$AZ resource list \ +az resource list \ --resource-group local-rg \ --output table # Check Azure Web App -$AZ webapp show \ +az webapp show \ --name local-webapp-nosql-test \ --resource-group local-rg \ --output table # Check Azure CosmosDB account -$AZ cosmosdb show \ +az cosmosdb show \ --name local-webapp-nosql-test \ --resource-group local-rg \ --output table # Check database (not implemented yet) -# $AZ database show \ +# az database show \ # --name sampledb \ # --account-name local-webapp-nosqltest \ # --resource-group local-rg \ # --output table # Check collection (not impleented yet) -# $AZ cosmosdb collection show \ +# az cosmosdb collection show \ # --name activities \ # --database-name sampledb \ # --account-name local-webapp-nosql-test \ From 900ef7e5a56a59f023e676c6e1ab4eabf1de41d1 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 24 Mar 2026 12:51:09 +0000 Subject: [PATCH 5/5] . --- samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh b/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh index 66e11dd..934a013 100755 --- a/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh +++ b/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh @@ -17,8 +17,6 @@ AZURECOSMOSDB_DATABASENAME=$NEW_DB_NAME AZURECOSMOSDB_CONTAINERNAME="activities_${RANDOM_SUFFIX}" AURECOSMOSDB_PARTITION_KEY="/username" -# azlocal start-interception - # Validates if the resource group exists in the subscription, if not creates it echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists..." az group show --name $RESOURCE_GROUP_NAME &>/dev/null