plexo


Nameplexo JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://gitlab.com/plexo/pyplexo/
SummaryOpinionated, reactive, schema-driven, distributed, and strongly-typed message passing
upload_time2023-11-09 06:15:18
maintainer
docs_urlNone
authorAlecks Gates
requires_python>=3.9.0,<3.12
licenseLGPL-3.0-or-later
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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](https://github.com/Podcastindex-org/podping.cloud)
and [podping-hivewriter](https://github.com/Podcastindex-org/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](examples) for how to use the library -- particularly [axon/inprocess](examples/axon/inprocess) for
multiple examples of codec options and [axon/tcp_pair](examples/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](examples/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.


            

Raw data

            {
    "_id": null,
    "home_page": "https://gitlab.com/plexo/pyplexo/",
    "name": "plexo",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.9.0,<3.12",
    "maintainer_email": "",
    "keywords": "",
    "author": "Alecks Gates",
    "author_email": "agates@mail.agates.io",
    "download_url": "https://files.pythonhosted.org/packages/8e/d2/1c8ae838232da6cc20b40796f0e247efa3bb6893a2d44f46e4d27d074add/plexo-1.0.0.tar.gz",
    "platform": null,
    "description": "# pyplexo\n\n*pyplexo* is the Python implementation of *plexo*. It aims to be an opinionated, reactive, schema-driven, distributed,\nand\nstrongly-typed message passing framework with messages as types. Any type of data interchange format is supported and\ncan be transmitted both to in-process and inter-process listeners.\n\n## plexo\n\n*plexo* is an architecture in which data is transmitted across the network in a way where the receiver is able to\nunderstand the correct type to decode the data into. It does so by assigning type names to a predefined namespace to\ncreate a topic for receivers to subscribe to.\n\nWhile *plexo* is relatively stable and in production use between Python and Rust (\nsee [podping.cloud](https://github.com/Podcastindex-org/podping.cloud)\nand [podping-hivewriter](https://github.com/Podcastindex-org/podping-hivewriter)), the paradigm remains experimental.\nContributions and suggestions are encouraged.\n\n## Why does this exist?\n\nThe goal of the project is to allow data structures to be shared across the network by their type instead of server\nendpoints.  *plexo* implementations receive data structures and sends them to any interested parties subscribed to the\ndata structure's type.\n\nIt was originally created and developed for a tiny sake brewing operation. The development of this project enabled us to\nplug in new hardware sensors and data logging devices without the need to reconfigure multiple projects across a variety\nof hardware.\n\nThis was born out of a frustration of spending too much time writing data transformation and validation layers with\nunstructured and/or weakly typed data (JSON without schemas) across multiple languages.  *plexo* tries to solve this\nproblem without controlling the entire stack while avoiding protocol implementation details such as HTTP \"REST\" APIs.\n\n## Examples\n\nCheck the [examples](examples) for how to use the library -- particularly [axon/inprocess](examples/axon/inprocess) for\nmultiple examples of codec options and [axon/tcp_pair](examples/axon/tcp_pair) for an example of how to send a python\nclass between two networked python processes with pickle or JSON. Note that, while supplying the pickle codec is\nrequired, the *plexus* is smart enough to avoid the expensive process of encoding/decoding for in-process receivers;\ncodecs are only used for external transmission where serialization is required.\n\n[ganglion/plexo_multicast](examples/ganglion/plexo_multicast) provides a basic example of sending a python class\nacross the network over multicast. Each type in is assigned a dedicated multicast address within the `239.255.0.0/16`\nCIDR block as a means to provide generalized, zero configuration network communication without saturating a single\nsocket with unnecessary traffic. An adaptation of the Paxos consensus algorithm is used for the network to agree on\nwhich type is assign to which multicast group.\n\n",
    "bugtrack_url": null,
    "license": "LGPL-3.0-or-later",
    "summary": "Opinionated, reactive, schema-driven, distributed, and strongly-typed message passing",
    "version": "1.0.0",
    "project_urls": {
        "Homepage": "https://gitlab.com/plexo/pyplexo/",
        "Repository": "https://gitlab.com/plexo/pyplexo/"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d55a2dbb5a171c2acc1fd5e59661222019ed37e443c5e415d90080836a8f261a",
                "md5": "5de273314b08806a930ae7a8974a191b",
                "sha256": "88ab3823e471356ad4dcee955a70fe14147d5c0efa03521f78d2868429bb6455"
            },
            "downloads": -1,
            "filename": "plexo-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "5de273314b08806a930ae7a8974a191b",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9.0,<3.12",
            "size": 1618774,
            "upload_time": "2023-11-09T06:15:03",
            "upload_time_iso_8601": "2023-11-09T06:15:03.379917Z",
            "url": "https://files.pythonhosted.org/packages/d5/5a/2dbb5a171c2acc1fd5e59661222019ed37e443c5e415d90080836a8f261a/plexo-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4ab5e382e9bc92c628c006401f098567a526a55c376cd2812ba75bae82c26877",
                "md5": "fc394f55fc787237e7be98dd9ead72a5",
                "sha256": "0defff9c6a6fe0771ad73b99541927b420a5e84da1e4c073fc899ac5c4e91e79"
            },
            "downloads": -1,
            "filename": "plexo-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fc394f55fc787237e7be98dd9ead72a5",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9.0,<3.12",
            "size": 1635513,
            "upload_time": "2023-11-09T06:15:06",
            "upload_time_iso_8601": "2023-11-09T06:15:06.414196Z",
            "url": "https://files.pythonhosted.org/packages/4a/b5/e382e9bc92c628c006401f098567a526a55c376cd2812ba75bae82c26877/plexo-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "836758ced0cb1ebce32985d6cf1082467297dd9d625e427a04464e22fa0a1876",
                "md5": "a463c41ab9cea5d7c3c25fdfc7a9e2fa",
                "sha256": "a73ed4c99cc8d29f30599cd4ab44a12c9ad3edeac84ddc6d36c1c8ec5163eb42"
            },
            "downloads": -1,
            "filename": "plexo-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "a463c41ab9cea5d7c3c25fdfc7a9e2fa",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9.0,<3.12",
            "size": 1694652,
            "upload_time": "2023-11-09T06:15:08",
            "upload_time_iso_8601": "2023-11-09T06:15:08.282053Z",
            "url": "https://files.pythonhosted.org/packages/83/67/58ced0cb1ebce32985d6cf1082467297dd9d625e427a04464e22fa0a1876/plexo-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "33b61faf8ac62d5bf9bab0da6f08f37f70e544ca2801cf25656f8ed65896d5b4",
                "md5": "f330791e1785b25c4280fb32a6a8f6d0",
                "sha256": "38b66e4141e9640c6d9d775c90673dc9866748704fc698be1264650b8efe7bd7"
            },
            "downloads": -1,
            "filename": "plexo-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f330791e1785b25c4280fb32a6a8f6d0",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9.0,<3.12",
            "size": 1706602,
            "upload_time": "2023-11-09T06:15:10",
            "upload_time_iso_8601": "2023-11-09T06:15:10.413015Z",
            "url": "https://files.pythonhosted.org/packages/33/b6/1faf8ac62d5bf9bab0da6f08f37f70e544ca2801cf25656f8ed65896d5b4/plexo-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1943b2899f9560e8daf85b77d20f053859d2fcfb406a059493ad31d1a9af4148",
                "md5": "c2ad850647ddf9ba4c2b82f07947110f",
                "sha256": "ca1b2324a8e8de2279ba3c52b615a93fd940605e33a5b126c497d55ec73ec11b"
            },
            "downloads": -1,
            "filename": "plexo-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "c2ad850647ddf9ba4c2b82f07947110f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9.0,<3.12",
            "size": 1698746,
            "upload_time": "2023-11-09T06:15:12",
            "upload_time_iso_8601": "2023-11-09T06:15:12.198604Z",
            "url": "https://files.pythonhosted.org/packages/19/43/b2899f9560e8daf85b77d20f053859d2fcfb406a059493ad31d1a9af4148/plexo-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "859064a1cbc65fd3b06b5581abefa3800d89c0aeab5cbead1ed91813d29408f0",
                "md5": "8ec74c50cf035e10e3ff53d4b96abbd1",
                "sha256": "71a06af92a7fa148967f71fcc3306c1d7f230808d1ab299ee9660104dc391fec"
            },
            "downloads": -1,
            "filename": "plexo-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8ec74c50cf035e10e3ff53d4b96abbd1",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9.0,<3.12",
            "size": 1713807,
            "upload_time": "2023-11-09T06:15:14",
            "upload_time_iso_8601": "2023-11-09T06:15:14.275810Z",
            "url": "https://files.pythonhosted.org/packages/85/90/64a1cbc65fd3b06b5581abefa3800d89c0aeab5cbead1ed91813d29408f0/plexo-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2452713f0d57c5e255329263f1f9f261fb36def5ec8798c4c09c76af4bf51cad",
                "md5": "cb2b7a1fd275362a07cd9cfce4675afc",
                "sha256": "b3b53cc23acba3fa400e9b510c11545c76e16032fc9aa0852dd7ca50ab9c9d27"
            },
            "downloads": -1,
            "filename": "plexo-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "cb2b7a1fd275362a07cd9cfce4675afc",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9.0,<3.12",
            "size": 81460,
            "upload_time": "2023-11-09T06:15:16",
            "upload_time_iso_8601": "2023-11-09T06:15:16.186773Z",
            "url": "https://files.pythonhosted.org/packages/24/52/713f0d57c5e255329263f1f9f261fb36def5ec8798c4c09c76af4bf51cad/plexo-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8ed21c8ae838232da6cc20b40796f0e247efa3bb6893a2d44f46e4d27d074add",
                "md5": "eed794eddb7bc307f04d6b53ab6198d1",
                "sha256": "d44d7079cf1fd67fe3f94c53afa8eb7c48b6edc518f5754687d3a7e5c55cc2fa"
            },
            "downloads": -1,
            "filename": "plexo-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "eed794eddb7bc307f04d6b53ab6198d1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9.0,<3.12",
            "size": 24895,
            "upload_time": "2023-11-09T06:15:18",
            "upload_time_iso_8601": "2023-11-09T06:15:18.035770Z",
            "url": "https://files.pythonhosted.org/packages/8e/d2/1c8ae838232da6cc20b40796f0e247efa3bb6893a2d44f46e4d27d074add/plexo-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-11-09 06:15:18",
    "github": false,
    "gitlab": true,
    "bitbucket": false,
    "codeberg": false,
    "gitlab_user": "plexo",
    "gitlab_project": "pyplexo",
    "lcname": "plexo"
}
        
Elapsed time: 0.28746s