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 architecturedocs/structure.md- Module structure and organizationdocs/development.md- Development guidelinesdocs/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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pymissive-1.3.16.tar.gz | 66.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.