Toolkit to build headless WSGI applications.
Project description
Horseman is a toolkit to build WSGI applications. It is heavily tested and uses Cython powered libraries.
The philosophy is : “you pay for what you eat”.
The code is very minimal and tries to provide key components to build upon and create a vastly more complex application.
It conforms to the WSGI standards and allows you to use WSGI middlewares.
Example
Below is an example of a barebone API, handling a GET request on ‘/’ and returning a JSON response.
import logging
from bjoern import run
from horseman.meta import SentryNode, Overhead, APIView
from horseman.response import Response
class Request(Overhead):
data = None
def __init__(self, environ):
self.environ = environ
def extract(self):
self.data = 'somedata'
class View(APIView):
def GET(self, overhead):
return Response.to_json(200, {"Result": "OK"})
VIEWS = {
"/": View()
}
class RootNode(SentryNode):
def resolve(self, path_info, environ):
if view := VIEWS.get(path_info):
request = Request(environ)
return view(request)
def handle_exception(self, exc_info, environ):
logging.error(exc_info)
run(
host="0.0.0.0",
port=8080,
reuse_port=True,
wsgi_app=RootNode(),
)
CHANGES
0.6 (2022-08-25)
Major update.
Simplified the parsing Data class by dropping the attempts at mimicking MultiDict. Parsing no longer separate files from form data and values are stored as a list of tuples containing (name, value).
FormData, TypeCastingDict and Query classes were removed.
0.5 (2022-05-31)
Multipart parser no longer adds empty values to the form multidict.
0.4 (2022-04-06)
Fixed FormData.to_dict to handle empty or false values.
0.3 (2022-04-05)
PATH_INFO is no longer expected to be there in the environ. Some WSGI Servers do NOT provide it if empty.
Added path normalization in the Node __call__ to avoid malformed path info.
0.2 (2021-10-08)
First upload on pypi. Stable 0.2.
0.1 (2021-10-08)
Initial release.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.