Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jondot/formation
A generic functional middleware infrastructure for Python.
https://github.com/jondot/formation
http python requests
Last synced: 14 days ago
JSON representation
A generic functional middleware infrastructure for Python.
- Host: GitHub
- URL: https://github.com/jondot/formation
- Owner: jondot
- License: mit
- Created: 2018-12-04T17:41:11.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-26T09:32:00.000Z (almost 2 years ago)
- Last Synced: 2024-10-13T13:22:21.267Z (28 days ago)
- Topics: http, python, requests
- Language: Python
- Homepage: https://jondot.github.io/formation/
- Size: 2.21 MB
- Stars: 17
- Watchers: 5
- Forks: 10
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
![](media/cover.png)
# Formation
[![Build Status](https://travis-ci.org/jondot/formation.svg?branch=master)](https://travis-ci.org/jondot/formation.svg)
[![Coverage Status](https://coveralls.io/repos/github/jondot/formation/badge.svg?branch=master)](https://coveralls.io/github/jondot/formation?branch=master)A generic functional middleware infrastructure for Python.
Take a look:
```py
from datetime.datetime import now
from formation import wrap
from requests import getdef log(ctx, call):
print("started")
ctx = call(ctx)
print("ended")
return ctxdef timeit(ctx, call):
started = now()
ctx = call(ctx)
ended = now() - started
ctx['duration'] = ended
return ctxdef to_requests(ctx):
get(ctx['url'])
return ctxfancy_get = wrap(to_requests, middleware=[log, timeit])
fancy_get({'url':'https://google.com'})
```## Quick Start
Install using pip/pipenv/etc. (we recommend [poetry](https://github.com/sdispater/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 `req.id` 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).### Thanks:
To all [Contributors](https://github.com/jondot/formation/graphs/contributors) - you make this happen, thanks!
# Copyright
Copyright (c) 2018 [@jondot](http://twitter.com/jondot). See [LICENSE](LICENSE.txt) for further details.