Middleware API

Auth and content negotiation middlewares.

class api.middlewares.auth_middleware.AuthMiddleware(prefix, tokens, noauth_routes=None)[source]

Token based authentication that uses two HTTP headers: X-Project-ID and X-Auth-Token.

process_request(req, resp)[source]
Parameters:
  • req (falcon.request.Request) – Falcon request
  • resp (falcon.response.Response) – Falcon response

:raises falcon.HTTPUnauthorized

class api.middlewares.json_middleware.JSONTranslator[source]

Converts request input data and response to/from JSON.

process_request(req, resp)[source]

Converts request input data from JSON to a dict. :param req: Falcon request :type req: falcon.request.Request

Parameters:resp (falcon.response.Response) – Falcon response
process_response(req, resp, resource, req_succeeded)[source]

Converts response body to JSON. :param req: Falcon request :type req: falcon.request.Request

Parameters:
  • resp (falcon.response.Response) – Falcon response
  • resource (api.resources.base.BaseResource) –
  • req_succeeded (bool) –
exception api.middlewares.json_middleware.JsonError[source]

Converts all exceptions to falcon.HTTPError so they’re serializable and match requested content type.

Usage:

app.add_error_handler(Exception, JsonError.handle)
static handle(ex, req, resp, params)[source]
Parameters:
  • ex (Exception) – the exception
  • req (falcon.request.Request) – Falcon request
  • resp (falcon.response.Response) – Falcon response
  • params (dict) – parameters dict

:raises falcon.HTTPError

class api.middlewares.json_middleware.RequireJSON[source]

Checks if the request has required content type and client accepts a JSON response.

process_request(req, resp)[source]
Parameters:
  • req (falcon.request.Request) – Falcon request
  • resp (falcon.response.Response) – Falcon response
exception api.middlewares.html_middleware.HtmlError(translator)[source]

Renders a HTML template containing error details.

Usage:

handler = HtmlError(translator)
app.add_error_handler(Exception, handler.handle)
handle(ex, req, resp, params)[source]
Parameters:
  • ex (Exception) – the exception
  • req (falcon.request.Request) – Falcon request
  • resp (falcon.response.Response) – Falcon response
  • params (dict) – parameters dict
class api.middlewares.html_middleware.HtmlTranslator(template_env)[source]

Parses POST data in requests and renders HTML in responses using Jinja templates.

When using plain HTML pages for resources it’s not possible to use other HTTP verbs than GET and POST. Extra steps needs to be taken when preparing resources:

  • set RELATIONS_AS_LIST = True
  • add a templates property with a verb to file map, possibly using objects_class argument in init()
  • call on_post() in on_put()
  • perform a redirect after on_post(): resp.status = HTTP_FOUND; resp.set_header('Location', req.path)
static get_template_vars(base_vars, req)[source]
Parameters:
  • base_vars (dict) –
  • req (falcon.request.Request) – Falcon request
Returns:

Return type:

dict

process_resource(req, resp, resource, params)[source]
Parameters:
  • req (falcon.request.Request) – Falcon request
  • resp (falcon.response.Response) – Falcon response
  • resource (api.resources.base.BaseCollectionResource|api.resources.base.BaseSingleResource) –
  • params (dict) – parameters dict
process_response(req, resp, resource)[source]
Parameters:
  • req (falcon.request.Request) – Falcon request
  • resp (falcon.response.Response) – Falcon response
  • resource (reviews.resources.TemplateCollectionResource|reviews.resources.TemplateSingleResource) –