Skip to main content

pymissive

Lightweight, framework-agnostic Python library for multi-channel message sending: email, SMS, WhatsApp, registered electronic mail (LRE) and team messaging.

Overview

pymissive exposes one provider interface per channel, so the calling code stays the same whichever service actually delivers the message. It is the base of django-pymissive and can be used on its own in any Python project.

The PyPI name is pymissive; the directory holding it in this monorepo is python-pymissive/.

Main features

  • 🔌 8 providers, all sharing the same service names
  • 📧 Email: Brevo, Scaleway
  • 📱 SMS: Brevo, SMSPartner
  • 💬 WhatsApp: Brevo
  • 📮 Registered electronic mail (LRE): Maileva
  • 👥 Team messaging: Slack, Microsoft Teams, Discord
  • ✋ Hand delivery: tracks an in-person hand-over, no external API
  • 🏗️ Modular architecture based on ProviderKit
  • ✅ Framework-agnostic: usable with or without a framework
  • 🎯 Type hints throughout

Installation

pip install pymissive

requests is a base dependency, so Maileva and SMSPartner work as installed. Providers needing another SDK have their own extra. Those imports are lazy, so a missing extra only disables that one provider:

pip install pymissive[brevo]     # brevo-python
pip install pymissive[scaleway]  # boto3
pip install pymissive[discord]   # discord.py

Quick usage

from pymissive.providers.slack import SlackProvider

provider = SlackProvider(config={
    "SLACK_BOT_TOKEN": "xoxb-your-token",
    "SLACK_CHANNEL_ID": "C0123456789",
})

result = provider.send_branded(
    subject="Deployment finished",
    body_text="Version 1.3.15 is live.",
)

Each key in config_keys is read from config first, then from the environment, so exporting SLACK_BOT_TOKEN instead works the same way.

Available providers

Services are named <verb>_<missive_type> — send_email, retrieve_lre, handle_webhook_sms, and so on. branded is the missive type used by the team messaging platforms, where the sender identity is the bot rather than an address.

Provider Class Missive types Extra
Brevo BrevoAPIProvider email, sms, whatsapp, branded [brevo]
Scaleway ScalewayProvider email, branded [scaleway]
Maileva MailevaProvider lre, branded —
SMSPartner PartnerProvider sms, branded —
Slack SlackProvider branded —
Microsoft Teams TeamsProvider branded —
Discord DiscordProvider branded [discord]
Hand delivery HandDeliveryProvider hand_delivery, branded —

providers/todo/ holds one-class placeholders (SendGrid, Mailgun, Twilio, Telegram, FCM, APN, SMTP, …). They are a backlog, not an API: they are not importable and nothing is wired to them.

Architecture

Providers are plain classes discovered by ProviderKit:

from pathlib import Path

import pymissive.providers as providers_package
from providerkit import autodiscover_providers

classes = autodiscover_providers(
    Path(list(providers_package.__path__)[0]),
    base_module="pymissive.providers",
    exclude_files=["base"],
)
# {'brevo': BrevoAPIProvider, 'maileva': MailevaProvider, ...}

Beware of ProviderBase.services: it lists the whole catalogue of service names, not the subset a given provider implements. To know whether a provider really supports something, look for the method itself:

provider = classes["brevo"]()
can_send_sms = hasattr(provider, "send_sms")

Documentation

For more details, see the documentation in the docs/ folder:

  • docs/purpose.md - Project goals and architecture
  • docs/structure.md - Module structure and organization
  • docs/development.md - Development guidelines
  • docs/AI.md - Contract for AI assistants

Development

pip install -e .

# Lint (same command as CI, from the repository root)
ruff check src

This package has no test suite of its own yet: CI only checks that it imports. The behaviour of the providers is covered by the suite in django-pymissive/.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Metadata

Release files for pymissive 1.3.16

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

Source distribution (sdist)

Source distribution for pymissive 1.3.16
File Size Uploaded Provenance
pymissive-1.3.16.tar.gz 66.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pymissive 1.3.16
File Interpreter ABI Platform
pymissive-1.3.16-py3-none-any.whl Python 3 none any Details

Total release size: 144.1 kB

Release files / pymissive-1.3.16.tar.gz

Download URL pymissive-1.3.16.tar.gz
Size 66.9 kB
Tags Source
SHA-256 checksum
How to use checksums
fec5dc516800c5888849b02eb4947a404db0483bff5571fba6125965de68ed91
BLAKE2b-256 checksum
How to use checksums
210e2a281016ef54f1b6e54a375f6eafea8d6d5c444c393bd47dcc7740305f73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / pymissive-1.3.16-py3-none-any.whl

Download URL pymissive-1.3.16-py3-none-any.whl
Size 77.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
13d91acde21c156e7abe721fb8f4aae44ee27f1d0b4aa87cda339ff8e5d3f7b4
BLAKE2b-256 checksum
How to use checksums
60b9e97afa62293bdca4f2c8d5aea3aa06badb8b414e6d30a07ba8ed43c3382c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Security for pymissive 1.3.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pymissive-1.3.16.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

1.3.16 This release

2 release files Full provenance

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