%global _empty_manifest_terminate_build 0 Name: python-formation Version: 0.1.37 Release: 1 Summary: A generic functional middleware infrastructure for Python. License: MIT URL: https://github.com/jondot/formation Source0: https://mirrors.aliyun.com/pypi/web/packages/47/e0/2b4d69cf516c746f6a2a05d360d81953b648cab08b4d7ed1db65674d0e98/formation-0.1.37.tar.gz BuildArch: noarch Requires: python3-toolz Requires: python3-cytoolz Requires: python3-requests Requires: python3-pybreaker Requires: python3-xmltodict Requires: python3-lxml Requires: python3-attrs Requires: python3-attrs-serde %description ![](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 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](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. %package -n python3-formation Summary: A generic functional middleware infrastructure for Python. Provides: python-formation BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-formation ![](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 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](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. %package help Summary: Development documents and examples for formation Provides: python3-formation-doc %description help ![](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 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](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. %prep %autosetup -n formation-0.1.37 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-formation -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Jun 20 2023 Python_Bot - 0.1.37-1 - Package Spec generated