Skip to main content

interloper-slack

Slack notifications for interloper runs: a SlackHook that posts a run outcome to a channel, and the SlackConnection that holds the bot token.

The hook is the notification counterpart to core's WebhookHook — same events, but the payload is a message a human reads rather than a document a service parses.

Setup

  1. Create a Slack app (From scratch) at api.slack.com/apps.
  2. Under OAuth & Permissions, add these bot token scopes:
    • chat:write — post the notification
    • channels:read, groups:read — populate the channel picker
  3. Install to Workspace and copy the bot user token (xoxb-…).
  4. Invite the bot to each channel it posts to (/invite @your-app). Slack rejects chat.postMessage with not_in_channel otherwise.

One connection serves the whole workspace; each hook picks its own channel.

Usage

import interloper as il
from interloper_slack import SlackConnection, SlackHook

hook = SlackHook(
    connection=SlackConnection(bot_token="xoxb-..."),
    channel="C0123456789",
    watches=[my_source],
    events=["run_failed"],
)

The token also loads from the environment (SLACK_BOT_TOKEN), so SlackConnection() works with no arguments.

events defaults to ["run_failed"] like every hook — the alert most teams want. Add "run_completed" for a full-chatter channel.

In a deployed instance you configure this through the UI instead: add a Slack connection, then a Slack hook watching the source or job you care about. The scheduler's hook evaluator fires it on terminal runs.

Message shape

❌ *Facebook Ads* failed
Run `9f3c…` · partition `2026-07-30`
HTTPStatusError: 429 Too Many Requests

The headline also travels as the message's text, so notification previews and screen readers get the outcome without parsing blocks.

Notes

Every Slack call goes through the connection's client — a cached_property il.RESTClient with il.HTTPBearerAuth, like every other connection in the workspace. That client owns the base URL, the token, and the connection pool, so callers name a path and nothing else; the channel picker paginates with il.JSONCursorPaginator over Slack's response_metadata.next_cursor.

The client is sync, where most connections' are async. The two consumers are a hook firing (sync by contract) and a form lookup — neither has independent requests to overlap, and the API process runs sync providers in a thread, so it never blocks the event loop.

The one thing the framework can't cover is that Slack answers a rejected call with HTTP 200 and {"ok": false, "error": "..."}, so raise_for_status() alone lets failures pass silently. Each call site checks ok itself and raises RuntimeError with Slack's own error code — the same shape as the other connections that face an in-body error flag. For the paginated picker that check lives in the data_selector, since paginate only raises for HTTP status.

A failed firing is recorded on the hook's firing claim (as hook_failed) and is not retried.

Metadata

Release files for interloper-slack 0.66.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for interloper-slack 0.66.0
File Size Uploaded
interloper_slack-0.66.0.tar.gz 5.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for interloper-slack 0.66.0
File Interpreter ABI Platform
interloper_slack-0.66.0-py3-none-any.whl Python 3 none any Details

Total release size: 12.5 kB

Release files / interloper_slack-0.66.0.tar.gz

Download URL interloper_slack-0.66.0.tar.gz
Size 5.3 kB
Tags Source
SHA-256 checksum
How to use checksums
14fb14059c31c1635d78bc3cc069e7fd3136cfbd68c83389fae53ccc79f8dc5c
BLAKE2b-256 checksum
How to use checksums
c67555795ea32721303bc7f1dc06ce0fb0198175e28567e7d0510b0eb07b0d66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / interloper_slack-0.66.0-py3-none-any.whl

Download URL interloper_slack-0.66.0-py3-none-any.whl
Size 7.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
02426579733c2e1ba9b77cea7d5e09ded1c6b99243b3e8eaf14ce4288e47b94a
BLAKE2b-256 checksum
How to use checksums
3ed07edd7a9f2598033fc3bf2fb23f475279a2e424f7fac3a22ec8d5d6a58c4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.112.0

1 release file

0.94.1

1 release file

0.93.0

2 release files

0.92.1

2 release files

0.92.0

2 release files

0.91.0

2 release files

0.90.0

1 release file

0.89.0

2 release files

0.88.0

2 release files

0.87.0

2 release files

0.86.0

2 release files

0.85.0

2 release files

0.84.1

2 release files

0.84.0

2 release files

0.83.0

2 release files

0.82.1

2 release files

0.82.0

2 release files

0.81.1

2 release files

0.79.0

2 release files

0.78.0

2 release files

0.67.0

2 release files

This release

0.66.0 This release

2 release files

0.65.1

2 release files

0.65.0

2 release files

0.64.1

2 release files

0.64.0

2 release files

0.63.0

2 release files

0.62.0

2 release files

0.61.0

2 release files

0.60.0

2 release files

0.59.0

2 release files

0.58.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page