Skip to main content

HTTP APIs in typed Python

Project description

govyn

Tests PyPI version codecov

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
  • Authentication with principals and privileges
  • OpenAPI support with built-in routes:
    • /openapi/schema: OpenAPI v3 schema as JSON
    • /openapi/swagger: embedded Swagger UI page for testing
    • /openapi/redoc: embedded Redoc documentation page
  • Prometheus metrics support

Example

from dataclasses import dataclass
from typing import List
from govyn import run

@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))

run(CalculatorAPI())

Try out the built-in Swagger UI on this example Heroku deployment, built from source available in the govyn-demo repository!

Or, run the server locally and hit it with curl:

> 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


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.19.0.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

govyn-0.19.0-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file govyn-0.19.0.tar.gz.

File metadata

  • Download URL: govyn-0.19.0.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for govyn-0.19.0.tar.gz
Algorithm Hash digest
SHA256 8e19119b47952eb740a7c7790d6f62255748dc924e450feea4450908c63a1b96
MD5 9196d519d82b73b5632c10a346ab5757
BLAKE2b-256 6ce018767bfea78b00808afee2ed496bc700c94a275031fd10fa9b22519e036e

See more details on using hashes here.

File details

Details for the file govyn-0.19.0-py3-none-any.whl.

File metadata

  • Download URL: govyn-0.19.0-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for govyn-0.19.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d32c14b291df2b26fee94e75de0ab4da785ad14bea8b24461b2de8431ef2b86b
MD5 e0635a48a0a701722f6213891b5dc581
BLAKE2b-256 8df5d62d7776d4bc920ca3b8471b613fe73df1d65f14b6292fd6e92cb194388f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page