Skip to main content

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.

Supported by

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