A generic functional middleware infrastructure for Python.
Project description
Formation
A generic functional middleware infrastructure for Python.
Take a look:
from datetime.datetime import now
from hs_formation import wrap
from requests import get
def log(ctx, call):
print("started")
ctx = call(ctx)
print("ended")
return ctx
def timeit(ctx, call):
started = now()
ctx = call(ctx)
ended = now() - started
ctx['duration'] = ended
return ctx
def to_requests(ctx):
get(ctx['url'])
return ctx
fancy_get = wrap(to_requests, middleware=[log, timeit])
fancy_get({'url':'https://google.com'})
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
FormationHttpRequestwhich abstracts the essentials of making an HTTP request (later shipped torequestsitself in the way that it likes) - It tucks
FormationHttpRequestunder thefmtn.reqkey. - Additional information regarding such a request is kept alongside
fmtn.req. For example a request id is kept in thereq.idkey. This creates a flat (good thing) dict to probe. The reason additional data does not have thefmtnprefix is that you can always build your own that uses a different prefix (which you cant say about internal Formation inner workings).
added support for async http client via aio_http
You can use this via for_aio_http
Thanks:
To all Contributors - you make this happen, thanks!
Copyright
Copyright (c) 2018 @jondot. See LICENSE for further details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hs_formation-5.5.0.tar.gz.
File metadata
- Download URL: hs_formation-5.5.0.tar.gz
- Upload date:
- Size: 10.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.1 CPython/3.9.5 Darwin/22.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95e94ed1e2c82d9fcecfd7836b40ae374dff27f91793a7f5850632425133f9e0
|
|
| MD5 |
b4f797682458bb5b886c99719fee61d6
|
|
| BLAKE2b-256 |
d6fe9dd968476c4abebff6c27a4e636d18ebfd7d8ec1b8635dded33a476c76fc
|
File details
Details for the file hs_formation-5.5.0-py3-none-any.whl.
File metadata
- Download URL: hs_formation-5.5.0-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.1 CPython/3.9.5 Darwin/22.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a13dbf528a5b9e254173bb2e73b4d19dba4a7cf6aeb64bb76cce9ebe04e1a5e1
|
|
| MD5 |
fc9aadaff50f32df940fe0d4ad729d77
|
|
| BLAKE2b-256 |
976e15849251f6d04fac6e9656ae4b0a9e540b275745095f6d13799b346c437d
|