calendaring_jmap package#

Calendar operations over JMAP (RFC 8620 + JMAP Calendars).

Provides synchronous and asynchronous JMAP clients for calendar listing, event CRUD, incremental sync, and task CRUD.

Basic usage:

from calendaring_jmap import get_jmap_client

client = get_jmap_client(
    url="https://jmap.example.com/.well-known/jmap",
    username="alice",
    password="secret",
)
calendars = client.get_calendars()

Async usage:

from calendaring_jmap import get_async_jmap_client

async with get_async_jmap_client(
    url="https://jmap.example.com/.well-known/jmap",
    username="alice",
    password="secret",
) as client:
    calendars = await client.get_calendars()
calendaring_jmap.get_async_jmap_client(**kwargs)[source]#

Create an AsyncJMAPClient from configuration.

Accepts the same arguments and reads configuration from the same sources as get_jmap_client(). Returns None if no configuration is found.

Example:

async with get_async_jmap_client(
    url="https://jmap.example.com/.well-known/jmap",
    username="alice", password="secret"
) as client:
    calendars = await client.get_calendars()
Return type:

AsyncJMAPClient | None

calendaring_jmap.get_jmap_client(**kwargs)[source]#

Create a JMAPClient from configuration.

Configuration is read in priority order:

  1. Explicit keyword arguments (url, username, password, …)

  2. Environment variables (JMAP_URL, JMAP_USERNAME, …)

  3. A YAML config file (~/.config/calendaring-jmap/calendar.yaml or equivalent)

Returns None if no configuration is found, rather than raising.

Example:

client = get_jmap_client(url="https://jmap.example.com/.well-known/jmap",
                          username="alice", password="secret")
Return type:

JMAPClient | None

Subpackages#

Submodules#

Last updated on 2026-11-02.