Skip to main content
Join the official 2020 Python Developers SurveyStart the survey!

A generic functional middleware infrastructure for Python.

Project description


Build Status Coverage Status

A generic functional middleware infrastructure for Python.

Take a look:

from datetime.datetime import now
from formation import wrap
from requests import get

def log(ctx, call):
    ctx = call(ctx)
    return ctx

def timeit(ctx, call):
    started = now()
    ctx = call(ctx)
    ended = now() - started
    ctx['duration'] = ended
    return ctx

def to_requests(ctx):
    return ctx

fancy_get = wrap(to_requests, middleware=[log, timeit])

Quick Start

Install using pip/pipenv/etc. (we recommend poetry for sane dependency management):

$ poetry add formation

Best Practices

A context object is a loose bag of objects. With that freedom comes responsibility and opinion.

For example, this is how Formation models a requests integration, with data flowing inside context:

  • It models a FormationHttpRequest which abstracts the essentials of making an HTTP request (later shipped to requests itself in the way that it likes)
  • It tucks FormationHttpRequest under the fmtn.req key.
  • Additional information regarding such a request is kept alongside fmtn.req. For example a request id is kept in the key. This creates a flat (good thing) dict to probe. The reason additional data does not have the fmtn prefix is that you can always build your own that uses a different prefix (which you cant say about internal Formation inner workings).


To all Contributors - you make this happen, thanks!


Copyright (c) 2018 @jondot. See LICENSE for further details.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for formation, version 0.1.37
Filename, size File type Python version Upload date Hashes
Filename, size formation-0.1.37-py2.py3-none-any.whl (10.4 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size formation-0.1.37.tar.gz (8.3 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page