Skip to main content

Opinionated, reactive, schema-driven, distributed, and strongly-typed message passing

Project description

pyplexo

pyplexo is the Python implementation of plexo. It aims to be an opinionated, reactive, schema-driven, distributed, and strongly-typed message passing framework with messages as types. Any type of data interchange format is supported and can be transmitted both to in-process and inter-process listeners.

plexo

plexo is an architecture in which data is transmitted across the network in a way where the receiver is able to understand the correct type to decode the data into. It does so by assigning type names to a predefined namespace to create a topic for receivers to subscribe to.

While plexo is relatively stable and in production use between Python and Rust ( see podping.cloud and podping-hivewriter), the paradigm remains experimental. Contributions and suggestions are encouraged.

Why does this exist?

The goal of the project is to allow data structures to be shared across the network by their type instead of server endpoints. plexo implementations receive data structures and sends them to any interested parties subscribed to the data structure's type.

It was originally created and developed for a tiny sake brewing operation. The development of this project enabled us to plug in new hardware sensors and data logging devices without the need to reconfigure multiple projects across a variety of hardware.

This was born out of a frustration of spending too much time writing data transformation and validation layers with unstructured and/or weakly typed data (JSON without schemas) across multiple languages. plexo tries to solve this problem without controlling the entire stack while avoiding protocol implementation details such as HTTP "REST" APIs.

Examples

Check the examples for how to use the library -- particularly axon/inprocess for multiple examples of codec options and axon/tcp_pair for an example of how to send a python class between two networked python processes with pickle or JSON. Note that, while supplying the pickle codec is required, the plexus is smart enough to avoid the expensive process of encoding/decoding for in-process receivers; codecs are only used for external transmission where serialization is required.

ganglion/plexo_multicast provides a basic example of sending a python class across the network over multicast. Each type in is assigned a dedicated multicast address within the 239.255.0.0/16 CIDR block as a means to provide generalized, zero configuration network communication without saturating a single socket with unnecessary traffic. An adaptation of the Paxos consensus algorithm is used for the network to agree on which type is assign to which multicast group.

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

plexo-1.0.0.tar.gz (24.9 kB view details)

Uploaded Source

Built Distributions

plexo-1.0.0-py3-none-any.whl (81.5 kB view details)

Uploaded Python 3

plexo-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

plexo-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

plexo-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

plexo-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

plexo-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

plexo-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

File details

Details for the file plexo-1.0.0.tar.gz.

File metadata

  • Download URL: plexo-1.0.0.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for plexo-1.0.0.tar.gz
Algorithm Hash digest
SHA256 d44d7079cf1fd67fe3f94c53afa8eb7c48b6edc518f5754687d3a7e5c55cc2fa
MD5 eed794eddb7bc307f04d6b53ab6198d1
BLAKE2b-256 8ed21c8ae838232da6cc20b40796f0e247efa3bb6893a2d44f46e4d27d074add

See more details on using hashes here.

File details

Details for the file plexo-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: plexo-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 81.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for plexo-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b3b53cc23acba3fa400e9b510c11545c76e16032fc9aa0852dd7ca50ab9c9d27
MD5 cb2b7a1fd275362a07cd9cfce4675afc
BLAKE2b-256 2452713f0d57c5e255329263f1f9f261fb36def5ec8798c4c09c76af4bf51cad

See more details on using hashes here.

File details

Details for the file plexo-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for plexo-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 38b66e4141e9640c6d9d775c90673dc9866748704fc698be1264650b8efe7bd7
MD5 f330791e1785b25c4280fb32a6a8f6d0
BLAKE2b-256 33b61faf8ac62d5bf9bab0da6f08f37f70e544ca2801cf25656f8ed65896d5b4

See more details on using hashes here.

File details

Details for the file plexo-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for plexo-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a73ed4c99cc8d29f30599cd4ab44a12c9ad3edeac84ddc6d36c1c8ec5163eb42
MD5 a463c41ab9cea5d7c3c25fdfc7a9e2fa
BLAKE2b-256 836758ced0cb1ebce32985d6cf1082467297dd9d625e427a04464e22fa0a1876

See more details on using hashes here.

File details

Details for the file plexo-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for plexo-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0defff9c6a6fe0771ad73b99541927b420a5e84da1e4c073fc899ac5c4e91e79
MD5 fc394f55fc787237e7be98dd9ead72a5
BLAKE2b-256 4ab5e382e9bc92c628c006401f098567a526a55c376cd2812ba75bae82c26877

See more details on using hashes here.

File details

Details for the file plexo-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for plexo-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 88ab3823e471356ad4dcee955a70fe14147d5c0efa03521f78d2868429bb6455
MD5 5de273314b08806a930ae7a8974a191b
BLAKE2b-256 d55a2dbb5a171c2acc1fd5e59661222019ed37e443c5e415d90080836a8f261a

See more details on using hashes here.

File details

Details for the file plexo-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for plexo-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 71a06af92a7fa148967f71fcc3306c1d7f230808d1ab299ee9660104dc391fec
MD5 8ec74c50cf035e10e3ff53d4b96abbd1
BLAKE2b-256 859064a1cbc65fd3b06b5581abefa3800d89c0aeab5cbead1ed91813d29408f0

See more details on using hashes here.

File details

Details for the file plexo-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for plexo-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ca1b2324a8e8de2279ba3c52b615a93fd940605e33a5b126c497d55ec73ec11b
MD5 c2ad850647ddf9ba4c2b82f07947110f
BLAKE2b-256 1943b2899f9560e8daf85b77d20f053859d2fcfb406a059493ad31d1a9af4148

See more details on using hashes here.

Supported by

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