Skip to main content

A reactive stream cycle implementation in python

Project description

A functional and reactive framework for RxPY.

https://travis-ci.org/MainRo/cyclotron-py.svg?branch=master https://badge.fury.io/py/cyclotron.svg Documentation Status

With Cyclotron, you can structure your RxPY code as many reusable components. Moreover it naturally encourages to separate pure code and side effects. So a Cyclotron application is easier to test, maintain, and extend.

Here is the structure of a cyclotron application:

https://github.com/mainro/cyclotron-py/raw/master/docs/asset/cycle.png

How to use it

The following example is an http echo server:

from collections import namedtuple

from cyclotron import Component
from cyclotron.asyncio.runner import run
import cyclotron_aiohttp.httpd as httpd
import rx
import rx.operators as ops

EchoSource = namedtuple('EchoSource', ['httpd'])
EchoSink = namedtuple('EchoSink', ['httpd'])
EchoDrivers = namedtuple('EchoDrivers', ['httpd'])

def echo_server(source):
    init = rx.from_([
        httpd.Initialize(),
        httpd.AddRoute(methods=['GET'], path='/echo/{what}', id='echo'),
        httpd.StartServer(host='localhost', port=8080),
    ])

    echo = source.httpd.route.pipe(
        ops.filter(lambda i: i.id == 'echo'),
        ops.flat_map(lambda i: i.request),
        ops.map(lambda i: httpd.Response(
            context=i.context,
            data=i.match_info['what'].encode('utf-8')),
        )
    )

    control = rx.merge(init, echo)
    return EchoSink(httpd=httpd.Sink(control=control))


def main():
    run(Component(call=echo_server, input=EchoSource),
        EchoDrivers(httpd=httpd.make_driver()))


if __name__ == '__main__':
    main()

In this application, the echo_server function is a pure function, while the http server is implemented as a driver.

pip install cyclotron-aiohttp

you can then test it with an http client like curl:

$ curl http://localhost:8080/echo/hello
hello

Install

Cyclotron is available on PyPi and can be installed with pip:

pip install cyclotron

This project is composed of several python packages. Install also the ones that you use in your application:

Package

Version

cyclotron

pypi-cyclotron

cyclotron-std

pypi-cyclotron-std

cyclotron-aiohttp

pypi-cyclotron-aiohttp

License

This project is licensed under the MIT License - see the License file for details

Project details


Download files

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

Source Distribution

cyclotron-1.2.1.tar.gz (8.3 kB view details)

Uploaded Source

File details

Details for the file cyclotron-1.2.1.tar.gz.

File metadata

  • Download URL: cyclotron-1.2.1.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for cyclotron-1.2.1.tar.gz
Algorithm Hash digest
SHA256 0226f7586c90863259f01c24f8bf61c52653acb5c3c72e67a3df5ab45d1eb5cc
MD5 b4ee88731b809f1268f0860ab91ef60d
BLAKE2b-256 a7c8ad61c256aa04b7798d590bacf9ac110e5eb492d361d0256196529d992e73

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page