Web API Utils for Werkzeug
Project description
wau - Web API Utils
Web API Utils, or short wau, is a thin layer on top of
Werkzeug and other (optional)
libraries to provide a simple way for writing APIs in Python with zero
boilerplate code.
It is built for educational purposes and is not intended for production use.
wau supports JSON as it's only data exchange format and uses type
annotations to define and enforce the inputs of the API endpoints. It comes
with built-in support for accessing databases (via
dataset), user authentication, and
real-time apps using server-sent events. A development server with sensible
CORS support and live reload for API code and static files easies development
and testing.
Installation
The use of uv is recommended for installing
and managing dependencies, and managing virtual environments. Install wau
into the current environment with:
uv add wau
An Introductory Example
The stereotypical "todo" API example looks like this with wau:
from wau import API, NotFound, database_connect, run
api = API()
db = database_connect("todos.db")
todos = db["todos"]
@api.GET("/todo/")
def list_todos():
return list(todos.find())
@api.POST("/todo/")
def new_entry(text: str):
todo_id = todos.insert({"text": text, "done": False})
return {"id": todo_id, "text": text, "done": False}
@api.PUT("/todo/{id: int}")
def update_entry(id, done: bool):
if not todos.find_one(id=id):
raise NotFound()
todos.update({"id": id, "done": done}, ["id"])
@api.DELETE("/todo/{id: int}")
def delete_entry(id):
if not todos.find_one(id=id):
raise NotFound()
todos.delete(id=id)
if __name__ == "__main__":
run(api)
Run the backend with:
$ python todo_api.py
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://localhost:3000
Press CTRL+C to quit
* Restarting with watchdog (windowsapi)
Now you can send requests to the API, for example with curl:
curl -X POST -H "Content-Type: application/json" -d '{"text": "Buy bread"}' http://localhost:3000/todo/
{"id": 1, "text": "Buy bread", "done": false}
The development server will by default serve static files from the same
directory as the script. For example, if you create an index.html file with
some JavaScript that fetches the API, you can open the mentioned URL
(http://localhost:3000/) in the browser and it will work without any
additional configuration.
The development server also supports live reload, so if you change the API code or the static files, the browser will automatically refresh to reflect the changes.
License
This project is licensed under GNU LGPL v3 or later (LGPL-3.0-or-later).
If you distribute modified versions of this library, those library modifications must be published under the same license terms.
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
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 wau-0.1.6.tar.gz.
File metadata
- Download URL: wau-0.1.6.tar.gz
- Upload date:
- Size: 22.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9560a148311303a5cdafb662a4706c8cec7841deeba11a563d52ec2002fe382e
|
|
| MD5 |
17114b6a8bcc1563db1b1037fc501880
|
|
| BLAKE2b-256 |
9a10e630f478115f78007861554bacb34f4884b02ed91d70b9e27750d617b796
|
File details
Details for the file wau-0.1.6-py3-none-any.whl.
File metadata
- Download URL: wau-0.1.6-py3-none-any.whl
- Upload date:
- Size: 17.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5082a9949a44f73423c081f47667d6631490d8177a5a320c62f7a6341106c4ce
|
|
| MD5 |
c1f4a2b9dbf1ece518e06870b52c6f97
|
|
| BLAKE2b-256 |
e75f95409c7d6c8eeecdd9f639c081d102f1b6c9228e8b2b3770d2dbd6cb6616
|