Skip to main content

cyclotron-logo Cyclotron

A functional and reactive framework for RxPY.

https://github.com/MainRo/cyclotron-py/actions/workflows/ci.yml/badge.svg 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 reactivex as rx
import reactivex.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

Cyclotron automatically uses uvloop if it is available.

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

cyclotron-aiokafka

pypi-cyclotron-aiokafka

cyclotron-consul

pypi-cyclotron-consul

License

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

Metadata

Release files for cyclotron 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cyclotron 2.0.1
File Size Uploaded Provenance
cyclotron-2.0.1.tar.gz 9.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for cyclotron 2.0.1
File Interpreter ABI Platform
cyclotron-2.0.1-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 18.9 kB

Release files / cyclotron-2.0.1.tar.gz

Download URL cyclotron-2.0.1.tar.gz
Size 9.4 kB
Tags Source
SHA-256 checksum
How to use checksums
939ea8c625ede47175383aada681afe4e967b7f4aba576b6a1e3bfb84e1055a5
BLAKE2b-256 checksum
How to use checksums
39de8be7c640f27715132499398a4489f9c6a01aa105d9467f5e4ef557da9f01
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cyclotron-2.0.1-py2.py3-none-any.whl

Download URL cyclotron-2.0.1-py2.py3-none-any.whl
Size 9.6 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
5dac54a26e10791ed7cd1897ad40aee40772dd4db37233497e19d90eea103579
BLAKE2b-256 checksum
How to use checksums
f19a749fb12f8df30f603a634380b58fe9148651cc9455c0659af115b2a7731f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Security for cyclotron 2.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page