Skip to main content

No project description provided

Project description

Courier: Your Complete Communication Stack

pypi fern shield

This is the official Python package for sending notifications with the Courier REST API.

Installation

Install from PyPI

pip install trycourier
# or 
poetry add trycourier

Python 3.7 or later is required.

Usage

Use the Courier class to access all of our endpoints.

import os
import courier

from courier.client import Courier

client = Courier(
  authorization_token="YOUR_TOKENY" # Defaults to COURIER_AUTH_TOKEN
)

response = client.send(
  message=courier.ContentMessage(
    to=courier.UserRecipient(
      email="marty_mcfly@email.com",
      data={
        name: "Marty",
      }
    ),
    content=courier.ElementalContentSugar(
      title="Back to the Future",
      body="Oh my {{name}}, we need 1.21 Gigawatts!",
    ),
    routing=courier.Routing(
      method=courier.RoutingMethod.ALL,
      channels=["email"]
    )
  )
)

print(response)

Async Client

The SDK also exports an asynchronous client, AsyncCourier.

import os
import courier
import asyncio

from courier.client import AsyncCourier

client = AsyncCourier(
  authorization_token="YOUR_TOKEN" # Defaults to COURIER_AUTH_TOKEN
)

async def main() -> None: 
  response = await client.send(
    message=courier.ContentMessage(
      to=courier.UserRecipient(
        email="marty_mcfly@email.com",
        data={
          name: "Marty",
        }
      ),
      content=courier.ElementalContentSugar(
        title="Back to the Future",
        body="Oh my {{name}}, we need 1.21 Gigawatts!",
      ),
      routing=courier.Routing(
        method=courier.RoutingMethod.ALL,
        channels=["email"]
      )
    )
  )

asyncio.run(main())

Timeouts

By default, the client is configured to have a timeout of 60 seconds. You can customize this value at client instantiation.

from courier.client import Courier

client = Courier(
  authorization_token="YOUR_TOKEN",
  timeout=30
)

Handling Exceptions

All exceptions thrown by the SDK will sublcass courier.ApiError.

import courier

from courier.core import ApiError

try:
  courier.send(...)
except APIError as e:  
  # handle any api related error

Idempotency Keys

For POST methods, you can supply an idempotencyKey in the config parameter to ensure the idempotency of the API Call. We recommend that you use a V4 UUID for the key. Keys are eligible to be removed from the system after they're at least 24 hours old, and a new request is generated if a key is reused after the original has been removed. For more info, see Idempotent Requests in the Courier documentation.

import courier

courier.send(
  message={...}, 
  idempotency_key"YOUR_KEY", 
  idempotency_expiration="YOUR_EXPIRATION")

Additional Usage Examples

Send Template Message

import courier

from courier import Courier

client = Courier(
  authorization_token="YOUR_TOKEN")

response = client.send(
    message=courier.TemplateMessage(
      template="my-template",
      to=courier.UserRecipient(email="foo@bar.com")
    )
)
print(response.message_id)

UTM Metadata with Message

import courier

from courier import Courier

client = Courier(
  authorization_token="YOUR_TOKEN")

response = client.send(
    message=courier.ContentMessage(
      content=courier.ElementalContent(
        version='2020-01-01',
        elements=[
          courier.ElementalNode_Action(
            content="ELEMENTAL",
            href="courier.com",
            style="button",
            align="center"
          )
        ]
      ),
      to=courier.UserRecipient(email="foo@bar.com"),
      routing=courier.Routing(
        method=courier.RoutingMethod.SINGLE,
        channels=["email"]
      ),
      metadata=courier.MessageMetadata(
        utm=courier.Utm(source="python")
      )
    )
)
print(response.request_id)

Advanced

Overriding HTTP Client

You can override the httpx client to customize it for your use case. Some common usecases include support for proxies and transports.

import httpx
from courier.client import Courier

client = Courier(
    http_client=httpx.Client(
        proxies="http://my.test.proxy.example.com",
        transport=httpx.HTTPTransport(local_address="0.0.0.0"),
    ),
)

Contributing

While we value open-source contributions to this SDK, this library is generated programmatically. Additions made directly to this library would have to be moved over to our generation code, otherwise they would be overwritten upon the next generated release. Feel free to open a PR as a proof of concept, but know that we will not be able to merge it as-is. We suggest opening an issue first to discuss with us!

On the other hand, contributions to the README are always very welcome!

License

MIT License

Author

Courier (support@courier.com)

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trycourier-6.0.2.tar.gz (82.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trycourier-6.0.2-py3-none-any.whl (248.4 kB view details)

Uploaded Python 3

File details

Details for the file trycourier-6.0.2.tar.gz.

File metadata

  • Download URL: trycourier-6.0.2.tar.gz
  • Upload date:
  • Size: 82.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.8.18 Linux/5.15.0-1060-azure

File hashes

Hashes for trycourier-6.0.2.tar.gz
Algorithm Hash digest
SHA256 4f00d13de112b96cd206187c40c8d0ccec66993e36deb24188c3bd2dfbb39074
MD5 64159cc4fe3f40c426f022789f2a360b
BLAKE2b-256 141b4ad35a7b5e3d1fb73162a6e7ab98cad737614f4460f8d2b99a9c2bd81abc

See more details on using hashes here.

File details

Details for the file trycourier-6.0.2-py3-none-any.whl.

File metadata

  • Download URL: trycourier-6.0.2-py3-none-any.whl
  • Upload date:
  • Size: 248.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.8.18 Linux/5.15.0-1060-azure

File hashes

Hashes for trycourier-6.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d55e3252856058a8ee73dd698a7a13bf31be793101f581bb155e46d942593399
MD5 b460d31134ef9aa741a82237558f3653
BLAKE2b-256 ab419a7705a33e6e3af7fcfc3ee906111565990723e8b48abb3d62b11d5f18a0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page