Giacomo Chiarella
07/01/2025, 11:04 AMMarvin
07/01/2025, 11:04 AMMarvin
07/01/2025, 11:06 AMpython
from prefect import flow
@flow
def my_flow():
pass
my_flow.deploy(
name="my-deployment",
tags=["tag1", "tag2"]
)
2. Using the REST API directly, you can update an existing deployment's tags by sending a PATCH request to /deployments/{deployment_id}
with the tags in the request body.
3. Using the Python client:
python
from prefect.client import get_client
async with get_client() as client:
# Get the deployment
deployment = await client.read_deployment("deployment-id")
# Update the deployment with new tags
await client.update_deployment(
deployment.id,
tags=["new-tag-1", "new-tag-2"]
)
Note that when updating tags, you need to provide the complete set of tags you want the deployment to have, as this will replace the existing tags rather than append to them.
If you're using the Prefect UI, you can also add or modify tags directly through the deployment settings interface.
For more complex deployment management, consider using the prefect.yaml
file where you can define deployments with their tags declaratively and use prefect deploy
to update them.Giacomo Chiarella
07/01/2025, 12:55 PMGiacomo Chiarella
07/01/2025, 12:55 PMMarvin
07/01/2025, 12:55 PMMarvin
07/01/2025, 12:57 PM{deployment_name}/{deployment_id}
.
Here are the correct ways to access deployments via the API:
1. To get a specific deployment:
GET /api/deployments/{deployment_name}/{deployment_id}
2. To filter/search for deployments (which you mentioned is working):
POST /api/deployments/filter
If you're getting a 404 error, it's likely because:
1. Either the deployment ID format is incorrect, or
2. You're using just the UUID portion without the name prefix
You can get the correct deployment ID format by:
1. Using the filter endpoint first to find your deployment
2. Looking at the deployment ID in the Prefect UI (the URL will show the correct format)
3. Using the Python client to get the deployment ID:
python
from prefect.client import get_client
async with get_client() as client:
deployments = await client.read_deployments()
for deployment in deployments:
print(f"Name: {deployment.name}, ID: {deployment.id}")
The filter endpoint accepts various parameters to help you find the specific deployment you're looking for. For example:
python
filters = {
"name": {"any_": ["your-deployment-name"]}
}
deployments = await client.read_deployments(filters=filters)
Giacomo Chiarella
07/01/2025, 1:05 PMMarvin
07/01/2025, 1:05 PMMarvin
07/01/2025, 1:07 PMrequests
package:
python
import requests
# Your Prefect API URL (default for local server)
PREFECT_API_URL = "<http://127.0.0.1:4200/api>"
# For Prefect Cloud, use: "<https://api.prefect.cloud/api/accounts/{account_id}/workspaces/{workspace_id}>"
# If you're using Prefect Cloud, you'll need an API key
headers = {
"Authorization": "Bearer YOUR_API_KEY" # Only needed for Prefect Cloud
}
# First, get the deployment ID if you don't have it
response = <http://requests.post|requests.post>(
f"{PREFECT_API_URL}/deployments/filter",
headers=headers,
json={
"name": {"any_": ["your-deployment-name"]}
}
)
deployments = response.json()
# Once you have the deployment ID, you can update its tags
deployment_id = "deployment-name/deployment-id" # Use the correct format
update_url = f"{PREFECT_API_URL}/deployments/{deployment_id}"
# The PATCH request with the new tags
response = requests.patch(
update_url,
headers=headers,
json={
"tags": ["new-tag-1", "new-tag-2"] # This will replace existing tags
}
)
if response.status_code == 204:
print("Tags updated successfully")
else:
print(f"Error updating tags: {response.status_code}")
print(response.text)
Important notes:
1. Replace YOUR_API_KEY
with your actual API key if using Prefect Cloud
2. The deployment_id
must be in the format {deployment-name}/{deployment-id}
3. The PATCH request will replace all existing tags with the new set of tags
4. A successful update returns a 204 status code
If you want to preserve existing tags and add new ones, you'll need to:
1. First get the current tags using a GET request
2. Combine the existing tags with new ones
3. Then make the PATCH request with the combined set
Here's how to do that:
python
import requests
# Get current deployment info
response = requests.get(
f"{PREFECT_API_URL}/deployments/{deployment_id}",
headers=headers
)
current_deployment = response.json()
current_tags = current_deployment.get("tags", [])
# Combine existing and new tags
new_tags = current_tags + ["new-tag-1", "new-tag-2"]
# Remove duplicates while preserving order
new_tags = list(dict.fromkeys(new_tags))
# Update with combined tags
response = requests.patch(
f"{PREFECT_API_URL}/deployments/{deployment_id}",
headers=headers,
json={
"tags": new_tags
}
)
Remember to handle potential errors and edge cases in a production environment:
python
try:
response = requests.patch(update_url, headers=headers, json={"tags": new_tags})
response.raise_for_status()
print("Tags updated successfully")
except requests.exceptions.RequestException as e:
print(f"Error updating tags: {e}")
if hasattr(e.response, 'text'):
print(f"Error details: {e.response.text}")