Getting started¶
Installation¶
Rolo is hosted on pypi and can be installed via pip.
pip install rolo
Hello World¶
Rolo provides different ways of building a web application.
It provides familiar concepts such as Router and @route, but also more flexible concepts like a Handler Chain.
Router¶
Here is a simple Router that can be served as WSGI application using the Werkzeug dev server.
If you are familiar with Flask, @route works in a similar way.
from werkzeug import Request
from werkzeug.serving import run_simple
from rolo import Router, route
from rolo.routing import handler_dispatcher
@route("/")
def hello(request: Request):
    return {"message": "Hello World"}
router = Router(dispatcher=handler_dispatcher())
router.add(hello)
run_simple("localhost", 8000, router.wsgi())
And to test:
curl localhost:8000/
Should yield
{"message": "Hello World"}
rolo.Request and rolo.Response objects work in the same way as Werkzeug’s Request / Response wrappers.
Gateway¶
A Gateway holds a set of handlers that are combined into a handler chain. Here is a simple example with a single request handler that dynamically creates a response object similar to httpbin.
from werkzeug.serving import run_simple
from rolo import Response
from rolo.gateway import Gateway, RequestContext, HandlerChain
from rolo.gateway.wsgi import WsgiGateway
def echo_handler(chain: HandlerChain, context: RequestContext, response: Response):
    response.status_code = 200
    response.set_json(
        {
            "method": context.request.method,
            "path": context.request.path,
            "query": context.request.args,
            "headers": dict(context.request.headers),
        }
    )
    chain.stop()
gateway = Gateway(
    request_handlers=[echo_handler],
)
run_simple("localhost", 8000, WsgiGateway(gateway))
And to test:
curl -s -X POST "localhost:8000/foo/bar?a=1&b=2" | jq .
Should give you:
{
  "method": "POST",
  "path": "/foo/bar",
  "query": {
    "a": "1",
    "b": "2"
  },
  "headers": {
    "Host": "localhost:8000",
    "User-Agent": "curl/7.81.0",
    "Accept": "*/*"
  }
}
Next Steps¶
Learn how to
Use the Router
Use the Handler Chain
Serve rolo through your favorite web server