A
Project description
Python Rest API Client
Glues pydantic and httpx to provide a simple REST API client, with dynamic generated methods. It supports both synchronous and asynchronous formats.
Roadmap:
- Auto generate models from OpenAPI (3) Spec
- Export generated source code
- Third-Party Cloud Secret Manager Support
Installation
pip install py_rest_api_client
Usage
Here's a set of examples you can use to understand how to use the library.
They all correspond to test cases under test/integration/
.
Please note that authentication in general is provided by httpx_auth
,
with the exception of a simple Bearer token.
Notion - Bearer Token Auth
auth = BearerHeaderToken(bearer_token=notion_token)
client = httpx.Client(auth=self.auth)
api = RestAPI(
api_url="https://api.notion.com/v1",
driver=client,
endpoints=[
Endpoint(name="search", path="/search", method=HTTPMethod.POST),
],
custom_headers={"Notion-Version": "2021-05-13"},
)
api.search(data={"query": "Test page"})
Pantry
api = RestAPI(
api_url="https://getpantry.cloud/apiv1",
driver=client,
# One can also pass endpoints to the constructor
endpoints=[
Endpoint(name="get_pantry", path="/pantry/{pantry_id}"),
Endpoint(
name="get_basket",
# Path parameters can be provided in the format {variable_name}
path="/pantry/{pantry_id}/basket/{basket_id}",
),
Endpoint(
# 'create_' is interpreted as POST
name="create_basket",
path="/pantry/{pantry_id}/basket/{basket_id}",
),
Endpoint(
# 'update_' is interpreted as PUT
name="update_basket",
path="/pantry/{pantry_id}/basket/{basket_id}",
),
Endpoint(
name="delete_basket",
path="/pantry/{pantry_id}/basket/{basket_id}",
),
],
)
pantries = api.get_pantry(pantry_id="123")
# Create/update/patch methods have an additional parameter called data
# Which is passed as the BODY of the request
api.create_basket(pantry_id="123", basket_id="234", data={"key": "value"})
api.update_basket(pantry_id="123", basket_id="234", data={"key2": "value2"})
basket = api.get_basket(pantry_id="123", basket_id="234")
api.delete_basket(pantry_id="123", basket_id="234")
If pantry supported PATCH, we would declare the endpoint as:
Endpoint(
name="patch_basket", # No alias for patch exists
path="/pantry/{pantry_id}/basket/{basket_id}",
),
Async methods
By default, async methods are created with the prefix _async
.
For instance:
await api.async_get_pantry(pantry_id="123")
await api.async_create_basket(
pantry_id="123", basket_id="234", data={"key": "value"}
)
await api.async_update_basket(
pantry_id="123", basket_id="234", data={"key2": "value2"}
)
await api.async_get_basket(pantry_id="123", basket_id="234")
await api.async_delete_basket(pantry_id="123", basket_id="234")
Chuck Norris
CHUCK_BASE_URL = "https://api.chucknorris.io/jokes"
# Imports
from pydantic import BaseModel, HttpUrl
from rest_api_client.lib import RestAPI, Endpoint, HTTPMethod
import httpx
# Optionally declare your model classes
class JokeModel(BaseModel):
id: str
created_at: str
updated_at: str
icon_url: str
categories: list
url: str
value: str
# Declare your API endpoints
endpoints = [
# Fully descriptive declaration.
Endpoint(
name="get_joke",
path="/random",
method=HTTPMethod.GET,
model=JokeModel,
query_parameters=[("category", str)],
),
# No model provided, result comes back as a dictionary.
Endpoint(
name="get_categories",
path="/categories",
method=HTTPMethod.GET,
),
# Omit HTTP Method, it gets inferred from the endpoint name.
Endpoint(name="get_search", path="/search", query_parameters=[("query", str)]),
]
# Instantiate your HTTP client session. Should also work with requests
with httpx.Client() as client:
api = RestAPI(api_url=CHUCK_BASE_URL, driver=client)
api.register_endpoints(endpoints)
joke = api.call_endpoint("get_joke")
joke2 = api.get_joke()
categories = api.get_categories()
search = api.get_search(query="something")
print(joke)
print(joke2)
print(search)
Project details
Release history Release notifications | RSS feed
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
File details
Details for the file py-rest-api-client-0.2.1.tar.gz
.
File metadata
- Download URL: py-rest-api-client-0.2.1.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7dfd2864f2f7faa8fd7e9ad204ee11d4432551b13b23b1ee6465bbbb5c97ed3f |
|
MD5 | 267ebe303d1f075f951eb4a16dc96e85 |
|
BLAKE2b-256 | c0acd9b878229658c4a5760733bc50edfcada6ecba6b32d2fba157ca42291c9a |
File details
Details for the file py_rest_api_client-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: py_rest_api_client-0.2.1-py3-none-any.whl
- Upload date:
- Size: 6.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 96bb373949e084446cafd626014e42be7f94294ffdced5cf9ca6a1aaae142d44 |
|
MD5 | de8a541f2a593bc0df0f1b4fef17af4a |
|
BLAKE2b-256 | e36668636761a184d0896a66c6342b425e88ac27f5581121fbc71564b98c8e79 |