⚜️ Clientele
___ _ _ _ _
/ __\ (_) ___ _ __ | |_ ___| | ___
/ / | | |/ _ \ '_ \| __/ _ \ |/ _ \
/ /___| | | __/ | | | || __/ | __/
\____/|_|_|\___|_| |_|\__\___|_|\___|
⚜️ Clientele is a different way to think about Python API Clients
Why use Clientele?
- Inspired by FastAPI - write API clients as easily as you would write API servers.
- A neat abstraction - Focus on the data, let Clientele manage everything else.
- Modern python - Python Types, Pydantic, and httpx, that's it.
- Easy to learn - No complexity, beautiful developer experience, easy to read.
- Easy to configure - sane defaults, but plenty of hooks for customisation and control.
A Simple Example
from clientele import api as clientele_api
from .my_pydantic_models import Book
client = clientele_api.APIClient(base_url="http://localhost:8000")
@client.get("/book/{book_id}")
def get_book(book_id: int, result: Book) -> Book:
return result
# Or just return the data you want!
@client.get("/book/{book_id}")
def get_book_title(book_id: int, result: Book) -> str:
return result.title
Async support
from clientele import api as clientele_api
from .my_pydantic_models import Book
client = clientele_api.APIClient(base_url="http://localhost:8000")
# Note: mix sync and async in one client if you want!
@client.get("/book/{book_id}")
async def get_book(book_id: int, result: Book) -> Book:
return result
Input and output validation with Pydantic
from clientele import api as clientele_api
from .my_pydantic_models import CreateBookRequest, CreateBookResponse
client = clientele_api.APIClient(base_url="http://localhost:8000")
# Strongly typed inputs and outputs
@client.post("/books")
def create_book(data: CreateBookRequest, result: CreateBookReponse) -> CreateBookResponse:
return result
API Client generator
Clientele can create scaffolding for an API client from an OpenAPI schema with:
- A developer-first approach designed for a loveable developer experience.
- Pydantic models for request and response validation.
- Fully-typed function signatures for IDE autocomplete and type checking.
- Async support if you want a client with concurrency.
- A tiny output - clientele is readable, debuggable Python.
- Regeneration-friendly - update your API, regenerate, review the git diff, then ship it!
- Configuration: that's never overwritten on regeneration.
- Testing is easy peasy with respx.
- Formatted output with Ruff.
API Client explorer
Clientele has an explore mode for quickly testing and debugging APIs through an interactive REPL:
# Explore an existing clientele-compatible client
uvx clientele explore -c my_clientele_client/
# Or generate a temporary client from any OpenAPI service on the web
uvx clientele explore -u https://raw.githubusercontent.com/PokeAPI/pokeapi/master/openapi.yml
# 🤫 Pssst! Copy and paste this right now to try it!
Explorer Features
- Autocomplete for operations and schemas.
- Execute API operations with Python-like syntax.
- Syntax-highlighted JSON responses.
- Navigate previous commands like a python shell.
- Modify configuration within the REPL as you're testing.
- Run debug mode to see diagnostics and errors.
Works with your favourite Python API Servers
We have specifically built and tested Clientele to be 100% compatible with OpenAPI schemas generated from:
- FastAPI
- Django REST Framework via drf-spectacular
- Django Ninja
We have working example servers in the server_examples/ directory.
These examples match the code shown in our documentation and provide real, working servers you can run locally to test out Clientele.
OpenAPI Compatibility
Clientele is compatible with OpenAPI 3.0+ schemas.
We test Clientele against 2000+ real-world OpenAPI schemas from the APIs.guru OpenAPI Directory through a CI cron job.
As of our latest run, we successfully generate clients for 95.39% of schemas in the directory.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file clientele-1.4.2.tar.gz.
File metadata
- Download URL: clientele-1.4.2.tar.gz
- Upload date:
- Size: 2.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4585ec6b56b52990e50283b736b8f6ebb614a9d78d08bb393f9e59784186569
|
|
| MD5 |
681da69db21bad08772818f2bae90e28
|
|
| BLAKE2b-256 |
e9bf81fedee9f54c9bc821f0f69983c6f6323e8bb777d4172c8d037c7327aa9b
|
File details
Details for the file clientele-1.4.2-py3-none-any.whl.
File metadata
- Download URL: clientele-1.4.2-py3-none-any.whl
- Upload date:
- Size: 101.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
066905757e5d8b9bdd8bef8bb42f03481561c4b69f85e059907c6b72dd689c6b
|
|
| MD5 |
f1f34748779b05cb0812cad17cea61b5
|
|
| BLAKE2b-256 |
0649b9e21e4a67f55465f21594962f18112938f0fbc990404a15e86c75f34df0
|