Gio
07/25/2025, 8:22 PMMarvin
07/25/2025, 8:22 PMMarvin
07/25/2025, 8:23 PMpython
from prefect import flow
from prefect.artifacts import create_markdown_artifact
@flow
def my_flow():
# Your flow logic here
# Create a markdown artifact
artifact = create_markdown_artifact(
markdown="## My Results\nHere are the important findings...",
key="results", # Optional but helpful for identification
description="Summary of analysis results" # Optional
)
return artifact
2. To share the link to this artifact in Slack, you'll need to construct the URL to your Prefect UI. The structure depends on whether you're using Prefect Cloud or self-hosted:
- For Prefect Cloud: <https://app.prefect.cloud/account/<account-name>/workspace/<workspace-name>/artifacts>
- For self-hosted: <http://your-prefect-server:4200/artifacts>
3. After running your flow, you can:
- Navigate to the Artifacts tab in your Prefect UI
- Find your specific artifact
- Copy the URL directly from your browser
- Share that URL in Slack
For automation, you can use Prefect's notification blocks to send the link automatically to Slack. Here's an example:
python
from prefect import flow
from prefect.artifacts import create_markdown_artifact
from prefect.blocks.notifications import SlackWebhook
@flow
def my_flow():
# Create the markdown artifact
artifact = create_markdown_artifact(
markdown="## My Results\nHere are the important findings...",
key="results"
)
# Get your Slack webhook (configured in Prefect)
slack_webhook = SlackWebhook.load("your-slack-webhook-block")
# Construct the URL (replace with your actual Prefect UI URL)
base_url = "<https://app.prefect.cloud/account/your-account/workspace/your-workspace>"
artifact_url = f"{base_url}/artifacts"
# Send to Slack
slack_webhook.notify(f"New analysis results available: {artifact_url}")
Important Notes:
1. You'll need to configure a Slack webhook block in Prefect first
2. Replace the base URL with your actual Prefect UI URL
3. For more specific linking, you might want to include the flow run ID or other identifiers in your message
Would you like me to provide more details about any part of this solution, such as setting up Slack webhooks or customizing the markdown content?Gio
07/25/2025, 8:25 PMMarvin
07/25/2025, 8:25 PMMarvin
07/25/2025, 8:26 PMpython
from prefect import flow
from prefect.artifacts import create_markdown_artifact
from prefect.runtime.flow_run import get_ui_url
@flow
def my_flow():
# Create the markdown artifact
artifact = create_markdown_artifact(
markdown="## My Results\nHere are the important findings...",
key="results"
)
# Get the URL to the current flow run
ui_url = get_ui_url()
# You can now use this URL in your notifications or logging
print(f"View the results at: {ui_url}")
# If using a Slack webhook:
# slack_webhook = SlackWebhook.load("your-slack-webhook-block")
# slack_webhook.notify(f"New analysis results available: {ui_url}")
The get_ui_url() function from prefect.runtime.flow_run will automatically generate the correct URL for your Prefect Cloud instance, including all the necessary account and workspace information. This is much more reliable than trying to construct the URL manually.
When you access this URL, you'll be taken to the flow run page where you can see your artifacts in the "Artifacts" tab.
Would you like me to show you how to combine this with specific Slack notification configurations or any other aspects of artifact sharing?Gio
07/25/2025, 8:28 PMMarvin
07/25/2025, 8:28 PMMarvin
07/25/2025, 8:29 PMpython
from prefect import flow
from prefect.artifacts import create_markdown_artifact
from prefect.utilities.urls import url_for
@flow
def my_flow():
# Create the markdown artifact
artifact = create_markdown_artifact(
markdown="## My Results\nHere are the important findings...",
key="results"
)
# Get the URL to the current flow run
ui_url = url_for(artifact) # This will give you the URL to the artifact
# You can now use this URL in your notifications or logging
print(f"View the results at: {ui_url}")
# If using a Slack webhook:
# slack_webhook = SlackWebhook.load("your-slack-webhook-block")
# slack_webhook.notify(f"New analysis results available: {ui_url}")
The url_for() function from prefect.utilities.urls is the correct way to generate URLs for Prefect objects, including artifacts. This will give you the proper URL that links directly to your artifact in the Prefect UI.
Would you like me to show you how to use this with specific notification methods or explain any other aspects of working with artifacts and their URLs?Gio
07/25/2025, 8:54 PMfrom prefect.settings import PREFECT_UI_URL
• can I construct a link to the artifact from this?
• how can I get the flow run url if i am sending the slack message from a taskMarvin
07/25/2025, 8:54 PMMarvin
07/25/2025, 8:55 PMpython
from prefect import flow, task
from prefect.settings import PREFECT_UI_URL
from prefect.runtime.flow_run import flow_run_id
@flow
def my_flow():
artifact = create_markdown_artifact(
markdown="## Results\nImportant findings...",
key="results"
)
# Construct artifact URL using the base UI URL
artifact_url = f"{PREFECT_UI_URL.value()}/flow-runs/{flow_run_id()}/artifacts"
return artifact_url
2. Getting the flow run URL from within a task:
python
from prefect import flow, task
from prefect.settings import PREFECT_UI_URL
from prefect.runtime.flow_run import flow_run_id
@task
def send_slack_notification():
# Construct flow run URL
flow_run_url = f"{PREFECT_UI_URL.value()}/flow-runs/{flow_run_id()}"
# Use this URL in your Slack message
slack_webhook = SlackWebhook.load("your-slack-webhook-block")
slack_webhook.notify(f"Check out the flow run: {flow_run_url}")
@flow
def my_flow():
# Your flow logic
artifact = create_markdown_artifact(
markdown="## Results\nImportant findings...",
key="results"
)
send_slack_notification()
Important notes:
1. Use PREFECT_UI_URL.value() to get the actual URL string (since it's a Settings object)
2. flow_run_id() is available from within both flows and tasks
3. The artifact URL will be under the /artifacts tab of the flow run
4. If you want to link directly to a specific artifact, you can use the artifact's ID in the URL
Would you like me to show you how to get the specific artifact ID for direct linking, or would you like to see any other variations of these URL constructions?