DagsterDocs

Slack (dagster-slack)


This library provides an integration with Slack, to support posting messages in your company’s Slack workspace.


Presently, it provides a thin wrapper on the Slack client API chat.postMessage.


To use this integration, you’ll first need to create a Slack App for it.

  1. Create App: Go to https://api.slack.com/apps and click “Create New App”:

  2. Install App: After creating an app, on the left-hand side of the app configuration, click “Bot Users”, and then create a bot user. Then, click “Install App” on the left hand side, and finally “Install App to Workspace”.

  3. Bot Token: Once finished, this will create a new bot token for your bot/workspace:

Copy this bot token and put it somewhere safe; see Safely Storing Credentials for more on this topic.

dagster_slack.slack_resource ResourceDefinition[source]

This resource is for connecting to Slack.

The resource object is a slack.WebClient.

By configuring this Slack resource, you can post messages to Slack from any Dagster solid:

Examples:

import os

from dagster import solid, execute_pipeline, ModeDefinition
from dagster_slack import slack_resource


@solid(required_resource_keys={'slack'})
def slack_solid(context):
    context.resources.slack.chat_postMessage(channel='#noise', text=':wave: hey there!')

@pipeline(
    mode_defs=[ModeDefinition(resource_defs={'slack': slack_resource})],
)
def slack_pipeline():
    slack_solid()

execute_pipeline(
    slack_pipeline, {'resources': {'slack': {'config': {'token': os.getenv('SLACK_TOKEN')}}}}
)
dagster_slack.slack_on_failure HookDefinition[source]

Create a hook on step failure events that will message the given Slack channel.

Parameters
  • channel (str) – The channel to send the message to (e.g. “#my_channel”)

  • message_fn (Optional(Callable[[HookContext], str])) – Function which takes in the HookContext outputs the message you want to send.

  • dagit_base_url – (Optional[str]): The base url of your Dagit instance. Specify this to allow messages to include deeplinks to the specific pipeline run that triggered the hook.

Examples

@slack_on_failure("#foo", dagit_base_url="http://localhost:3000")
@pipeline(...)
def my_pipeline():
    pass
def my_message_fn(context: HookContext) -> str:
    return "Solid {solid_name} failed!".format(
        solid_name=context.solid
    )

@solid
def a_solid(context):
    pass

@pipeline(...)
def my_pipeline():
    a_solid.with_hooks(hook_defs={slack_on_failure("#foo", my_message_fn)})
dagster_slack.slack_on_success HookDefinition[source]

Create a hook on step success events that will message the given Slack channel.

Parameters
  • channel (str) – The channel to send the message to (e.g. “#my_channel”)

  • message_fn (Optional(Callable[[HookContext], str])) – Function which takes in the HookContext outputs the message you want to send.

  • dagit_base_url – (Optional[str]): The base url of your Dagit instance. Specify this to allow messages to include deeplinks to the specific pipeline run that triggered the hook.

Examples

@slack_on_success("#foo", dagit_base_url="http://localhost:3000")
@pipeline(...)
def my_pipeline():
    pass
def my_message_fn(context: HookContext) -> str:
    return "Solid {solid_name} worked!".format(
        solid_name=context.solid
    )

@solid
def a_solid(context):
    pass

@pipeline(...)
def my_pipeline():
    a_solid.with_hooks(hook_defs={slack_on_success("#foo", my_message_fn)})