Skip to main content

⚜️ Clientele

https://raw.githubusercontent.com/phalt/clientele/refs/heads/main/docs/clientele_header.png

Package version Python versions PyPI - License codecov PyPI Downloads

Pydantic Badge Http Badge

Example code

from clientele import api
from pydantic import BaseModel

client = api.APIClient(base_url="https://pokeapi.co/api/v2/")

class Pokemon(BaseModel):
    name: str

@client.get("/pokemon/{id}")
def get_pokemon_name(id: int, result: Pokemon) -> str:
    return result.name

See more examples

Why use Clientele?

  • A comfortable abstraction - Encourages consistency and focus on the functionality.
  • Easy to learn - Clientele is visually similar to popular python API server frameworks.
  • Easy to test - Comes with built-in testing tools.
  • Easy to configure - Sensible HTTP defaults and plenty of hooks for customisation.
  • Easy data validation - Built in data validation using Pydantic.
  • Core built-ins - Caching, Network, and Retry handling built specifically for HTTP.
  • Use your own HTTP - Clientele can support any Python HTTP library.
  • OpenAPI support - Build your own client, or scaffold one from an OpenAPI schema.

Async support

@client.get("/pokemon/{id}")
async def get_pokemon_name(id: int, result: Pokemon) -> str:
    return result.name

Automatic data validation

from clientele import api as clientele_api
from .my_pydantic_models import CreateBookRequest, CreateBookResponse

client = clientele_api.APIClient(base_url="http://localhost:8000")


@client.post("/books")
def create_book(data: CreateBookRequest, result: CreateBookResponse) -> CreateBookResponse:
    return result

Streaming responses

from typing import AsyncIterator

from clientele import api
from pydantic import BaseModel


client = api.APIClient(base_url="https://httpbin.org")


class Event(BaseModel):
    id: int
    url: str


@client.get("/stream/{n}", streaming_response=True)
async def stream_events(n: int, result: AsyncIterator[Event]) -> AsyncIterator[Event]:
    return result

Works with Python API frameworks

Building an API service in Python? Clientele can build you a client library in seconds.

Clientele is built and tested to be 100% compatible with the OpenAPI schemas generated from:

  • FastAPI
  • Django REST Framework via drf-spectacular
  • Django Ninja

See the working demos in our server_examples/ directory.

OpenAPI support

Clientele can create scaffolding for an API client from an OpenAPI schema with:

  • Pydantic models generated from the schema objects.
  • Decorated function signatures generated from schema operations.
  • Async support if you want a client with concurrency.
  • A tiny output that is only 3 files big.
  • Regeneration-friendly - update your API, regenerate, review the git diff, then ship it!
  • Formatted code thanks to Ruff.

generate_gif

Getting Started

👉 Read the full documentation for all documentation.

Download files

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

Source Distribution

clientele-1.9.1.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

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

clientele-1.9.1-py3-none-any.whl (86.1 kB view details)

Uploaded Python 3

File details

Details for the file clientele-1.9.1.tar.gz.

File metadata

  • Download URL: clientele-1.9.1.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.6

File hashes

Hashes for clientele-1.9.1.tar.gz
Algorithm Hash digest
SHA256 aee6bb2f8ec750148ce1db398aff8ae0421e51c4ae76c6623df9e7f11ff46bf4
MD5 7865767ebef6ba7885c54403823db1d9
BLAKE2b-256 dd086854616f440c522e19fd1a857b5a850f1ada86a4a2a3570173b99e067694

See more details on using hashes here.

File details

Details for the file clientele-1.9.1-py3-none-any.whl.

File metadata

  • Download URL: clientele-1.9.1-py3-none-any.whl
  • Upload date:
  • Size: 86.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.6

File hashes

Hashes for clientele-1.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 feb387de5e825f243e0bef687313999cf52605c72361c2c1c008ad1a143d8240
MD5 f60b3cf2155caf2a2cf85814c21260c3
BLAKE2b-256 3ddd113e42f14b1fc786b95d27b009bb5e8c8ca22bfb8164789271d390e31247

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 Sentry Error logging StatusPage Status page