Skip to main content

Typed sync + async Python client for Radarr v3 and Sonarr v3 APIs

Project description

arr-py-client

Typed synchronous and asynchronous Python client for Radarr and Sonarr v3 APIs.

CI PyPI Python Coverage License

Features

  • Pydantic v2 models for every request and response
  • Sync (RadarrClient, SonarrClient) and async (AsyncRadarrClient, AsyncSonarrClient) clients sharing the same API
  • Full v3 endpoint coverage for both apps, generated from upstream OpenAPI specs
  • Typed exceptions (ArrNotFoundError, ArrValidationError, etc.) with validation-detail parsing
  • Env / .env fallback for credentials via pydantic-settings
  • Configurable retry policy (idempotent GET only by default)
  • Ships py.typed (PEP 561) — IDEs and type checkers just work
  • Python 3.11–3.14

Install

pip install arr-py-client

Quickstart

from arr_py_client import RadarrClient

with RadarrClient(base_url="http://radarr:7878", api_key="YOUR_KEY") as client:
    movies = client.movies.list()
    for m in movies[:5]:
        print(m.id, m.title, m.year)

Or via environment variables — set RADARR_BASE_URL and RADARR_API_KEY and:

from arr_py_client import RadarrClient

with RadarrClient() as client:
    print(len(client.movies.list()))

Async mirrors the sync API:

from arr_py_client import AsyncRadarrClient

async def main() -> None:
    async with AsyncRadarrClient() as client:
        movies = await client.movies.list()
        print(len(movies))

The client also exposes auto-generated wrappers for every OpenAPI tag — for example client.tag.list_(), client.queue.list_(), client.system.list_status(). Method names follow <verb>[_<distinguisher>] (e.g., list_, get_by_id, create, update_by_id, delete_by_id).

Compared to pyarr

arr-py-client pyarr
Pydantic v2 models yes no (returns dicts)
Async support yes no
Full Radarr/Sonarr v3 coverage yes yes
Lidarr/Readarr/Prowlarr not yet yes
Ships py.typed yes no

Documentation

API reference: https://allada-homelab.github.io/arr-py-client/

Development

git clone https://github.com/allada-homelab/arr-py-client
cd arr-py-client
uv sync --all-groups
just test

Integration tests (require Docker):

just test-int

Regenerate clients from upstream specs:

just gen-radarr <radarr-tag>
just gen-sonarr <sonarr-tag>

Contributing

See CONTRIBUTING.md for setup, common recipes, and the release process.

License

MIT. See LICENSE.

Project details


Download files

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

Source Distribution

arr_py_client-0.4.0.tar.gz (202.5 kB view details)

Uploaded Source

Built Distribution

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

arr_py_client-0.4.0-py3-none-any.whl (306.1 kB view details)

Uploaded Python 3

File details

Details for the file arr_py_client-0.4.0.tar.gz.

File metadata

  • Download URL: arr_py_client-0.4.0.tar.gz
  • Upload date:
  • Size: 202.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arr_py_client-0.4.0.tar.gz
Algorithm Hash digest
SHA256 a7be057e4ed6311b1242911013ed0b11647f5e7c893e881d376f3ae946cf5504
MD5 fde7fedcea54ee6336661cfecdc5fa6b
BLAKE2b-256 e9abdafb2fa282116980b8a18148577e87274bc157acd0a43c617646c484f77d

See more details on using hashes here.

Provenance

The following attestation bundles were made for arr_py_client-0.4.0.tar.gz:

Publisher: release.yml on allada-homelab/arr-py-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arr_py_client-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: arr_py_client-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 306.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arr_py_client-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f78fa6a26f628485048692f3ab50e43aee922ae62129be388cc20d45ea19c323
MD5 70931826a9bd4a2944de89299f9f7362
BLAKE2b-256 0c992818e6192f719555b28152fad4cd3755b7f51f5aeb530c74cc1ecf0e27a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for arr_py_client-0.4.0-py3-none-any.whl:

Publisher: release.yml on allada-homelab/arr-py-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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