Lightweight WSGI application framework, schema-validated JSON APIs, and API documentation.
Project description
Chisel is a light-weight Python WSGI application framework built for creating well-documented, schema-validated JSON web APIs. Here are its features at a glance:
Light-weight WSGI application framework
Schema-validated JSON APIs
API documentation with Markdown support
Written in pure Python
Zero dependencies
Links
Schema-Validated JSON APIs
Chisel provides the action decorator for easily implementing schema-validated JSON APIs.
>>> @chisel.action(spec=''' ... # Sum a list of numbers ... action sum_numbers ... urls ... GET ... ... query ... # The list of numbers ... float[len > 0] numbers ... ... output ... # The sum of the numbers ... float sum ... ''') ... def sum_numbers(ctx, req): ... return {'sum': sum(req['numbers'])} ... >>> application = chisel.Application() >>> application.add_request(sum_numbers) >>> application.request('GET', '/sum_numbers', query_string='numbers.0=1&numbers.1=2&numbers.2=4') ('200 OK', [('Content-Type', 'application/json')], b'{"sum":7.0}')
Each action defines an action definition using Schema Markdown. The action callback is passed two arguments, a request Context and the schema-validated request input dictionary. The input request dictionary is created by combining the request’s URL path parameters, query string parameters, and input JSON content parameters.
If there is a schema validation error the appropriate error code is automatically returned.
>>> status, _, content_bytes = application.request('GET', '/sum_numbers') >>> status '400 Bad Request'
>>> content_bytes b'{"error":"InvalidInput","message":"Required member \'numbers\' missing (query string)"}'
API Documentation
You can add API documentation to your application by adding the Chisel documentation application requests from create_doc_requests.
>>> application = chisel.Application() >>> application.add_requests(chisel.create_doc_requests())
By default the documentation application is hosted at “/doc/”. An example of of Chisel’s documentation output is available here.
Development
This project is developed using python-build. It was started using python-template as follows:
template-specialize python-template/template/ chisel/ -k package chisel -k name 'Craig A. Hobbs' -k email 'craigahobbs@gmail.com' -k github 'craigahobbs' -k nomain 1
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.