Code Monkey home page Code Monkey logo

courier-python's Introduction

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="[email protected]",
      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_TOKENY" # Defaults to COURIER_AUTH_TOKEN
)

async def main() -> None: 
  response = client.send(
    message=courier.ContentMessage(
      to=courier.UserRecipient(
        email="[email protected]",
        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_AUTH_TOKEN")

response = client.send(
    message=courier.TemplateMessage(
      template="my-template",
      to=courier.UserRecipient(email="[email protected]")
    )
)
print(response.message_id)

UTM Metadata with Message

import courier

from courier import Courier

client = Courier(
  authorization_token="YOUR_AUTH_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="[email protected]"),
      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 ([email protected])

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.