HTTP APIs in typed Python
Project description
govyn
A tiny framework for writing async HTTP APIs in typed Python.
govyn (verb) - ask, inquire, query, question, request (Cornish Dictionary)
Features
- Async everywhere!
- Method params as query string arguments
- Dataclasses as request bodies
- Automatic JSON conversion for request bodies and responses
- 🚧 Authentication support 🚧
- 🚧 OpenAPI schema generation 🚧
Example
from dataclasses import dataclass
from typing import List
from govyn import create_app, run_app
@dataclass
class AddRequest:
numbers: List[int]
@dataclass
class Response:
result: int
class CalculatorAPI:
# run initialisation tasks, e.g. connecting to a database
async def startup(self) -> None:
pass
# be a good citizen and dispose of things appropriately
async def shutdown(self) -> None:
pass
# get_ methods take a query string
# callers will receive a 400 Bad Request if they supply invalid values
async def get_add(self, a: int, b: int) -> Response:
return Response(a + b)
# post_ methods take a JSON request body
# also type-checked according to the dataclass definition
async def post_add(self, req: AddRequest) -> Response:
return Response(sum(req.numbers))
app = create_app(CalculatorAPI())
run_app(app)
> curl "http://localhost/add?a=10&b=32"
{"result": 42}
> curl "http://localhost/add" -d '{ "numbers": [ 1000, 300, 30, 7 ] }'
{"result": 1337}
Installation
# from PyPI
pip install govyn
# or directly from Git
pip install git+ssh://git@github.com/returnString/govyn.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
govyn-0.1.2.tar.gz
(7.0 kB
view hashes)
Built Distribution
govyn-0.1.2-py3-none-any.whl
(10.2 kB
view hashes)