The python framework, providing fast and robust way to build client-side API wrappers.
Project description
sensei
The python framework, providing fast and robust way to build client-side API wrappers.
Source code is made available under the MIT License.
Quick Overview
Here is example of OOP style.
from typing import Annotated, Any, Self
from sensei import Router, Query, Path, APIModel, Header, Args, pascal_case, fill_path_params, RateLimit
router = Router('https://reqres.in/api', rate_limit=RateLimit(5, 1))
@router.model()
class BaseModel(APIModel):
def __finalize_json__(self, json: dict[str, Any]) -> dict[str, Any]:
return json['data']
def __prepare_args__(self, args: Args) -> Args:
args.headers['X-Token'] = 'secret_token'
return args
def __header_case__(self, s: str) -> str:
return pascal_case(s)
class User(BaseModel):
email: str
id: int
first_name: str
last_name: str
avatar: str
@classmethod
@router.get('/users')
def query(
cls,
page: Annotated[int, Query(1)],
per_page: Annotated[int, Query(3, le=7)],
bearer_token: Annotated[str, Header('secret', le=10)],
) -> list[Self]:
...
@classmethod
@router.get('/users/{id_}')
def get(cls, id_: Annotated[int, Path(alias='id')]) -> Self:
...
@router.delete('/users/{id_}')
def delete(self) -> Self:
...
@delete.prepare
def _delete_in(self, args: Args) -> Args:
url = args.url
url = fill_path_params(url, {'id_': self.id})
args.url = url
return args
users = User.query(per_page=7)
user_id = users[0].id
user = User.get(user_id)
print(user == users[0])
Example of functional style.
from typing import Annotated
from sensei import Router, Path, APIModel
router = Router('https://pokeapi.co/api/v2/')
class Pokemon(APIModel):
name: str
id: int
height: int
weight: int
types: list
@router.get('/pokemon/{pokemon_name}')
def get_pokemon(
pokemon_name: Annotated[str, Path()],
) -> Pokemon:
...
pokemon = get_pokemon(pokemon_name="pikachu")
print(pokemon)
Installing sensei
To install sensei
from PyPi, you can use that:
pip install sensei
To install sensei
from GitHub, use that:
pip install git+https://github.com/CrocoFactory/sensei.git
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
sensei-0.1.0b3.tar.gz
(19.2 kB
view details)
Built Distribution
sensei-0.1.0b3-py3-none-any.whl
(26.1 kB
view details)
File details
Details for the file sensei-0.1.0b3.tar.gz
.
File metadata
- Download URL: sensei-0.1.0b3.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a1889096b83071cf19cd78203b7a97c196b6055f35d1073f8b0ea8b51f205772 |
|
MD5 | 1bac977f36c4ef56ac2b97161d36336f |
|
BLAKE2b-256 | 3e6b4c509c0e1da8f92c1e11fa40876f601984c3c1fbf0a27414fb88057a6e9f |
File details
Details for the file sensei-0.1.0b3-py3-none-any.whl
.
File metadata
- Download URL: sensei-0.1.0b3-py3-none-any.whl
- Upload date:
- Size: 26.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6a5d9414e36ba0ccc266b4020acc3d182575ca964fe2424ca1f2806017d90697 |
|
MD5 | 58e816678890b6de5e7fe06fe8577cb2 |
|
BLAKE2b-256 | 0159f3d0f1b3f785fb3459542fd2e66b101be06df18713142dfad4d99210b686 |