{ "info": { "author": "Chris Laws", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: Implementation :: CPython" ], "description": "[![Build Status](https://travis-ci.org/claws/gestalt.svg?branch=master)](https://travis-ci.org/claws/gestalt) [![pypi](https://img.shields.io/pypi/v/gestalt.svg)](https://pypi.python.org/pypi/gestalt) [![Documentation Status](https://readthedocs.org/projects/gestalt/badge/?version=latest)](https://gestalt.readthedocs.io/en/latest) ![License](https://img.shields.io/github/license/claws/gestalt) ![pyversions](https://img.shields.io/pypi/pyversions/gestalt) ![Style](https://img.shields.io/badge/code%20style-black-000000.svg)\n\n# Gestalt\n\nGestalt is an asyncio based Python package to help build distributed systems.\n\nGestalt provides a variety of building blocks to assist building long-running\nnetwork applications that leverage asyncio concurrency primitives.\n\n```\ngestalt:\nan organized whole that is perceived as more than the sum of its parts.\n```\n\n> This project is in the early stages of development. Expects lots of changes.\n\n\n## Features\n\nThe main features of Gestalt are:\n\n- Inter-process Communications\n\n - Automatic serialization and compression of message payloads.\n - Socket endpoints.\n\n - TCP\n\n - Stream\n - Netstring\n - Message Type Identifier\n\n - UDP\n\n - Datagram\n - Message Type Identifier\n\n - Message queuing (i.e. AMQP) components. The Advanced Message\n Queuing Protocol (AMQP) is an open standard protocol specification for\n message passing, queuing, routing, reliability and security. One of the\n most popular implementations of AMQP is RabbitMQ. The Gestalt package\n provides high level components that support automatic message serialization\n and compression of message payloads.\n\n - Topic Publisher and Subscriber\n - Request and Reply (RPC)\n\n- A Timer component that simplifies creating periodic calls to a function.\n Timers can be created as single-shot, repeat a specified number of times\n or repeat forever.\n\n- An application runner that simplifies running an asyncio application by\n performing common setup such as creating an event loop, registering signal\n handlers, registering a global exception handler and performing graceful\n shutdown.\n\n## Installation\n\nGestalt is available on PyPI and can be installed using [pip](https://pip.pypa.io).\n\nInstall core functionality using the command:\n\n```console\n$ pip install gestalt\n```\n\nGestalt uses optional third party Python packages to obtain support for\nfeatures such as serialization, compression and message queuing. To install\noptional extras simply specify one or more of them using the extras specifier\nnotation as shown in the example below which installs all of the available\nextras:\n\n```console\n$ pip install gestalt[amq,protobuf,msgpack,avro,brotli,snappy,yaml]\n```\n\nwhere the available extras are:\n\n- ``protobuf`` will install support for serializing Google Protocol Buffers structures.\n- ``msgpack`` will install support for serializing Msgpack structures.\n- ``yaml`` will install support for serializing YAML structures.\n- ``avro`` will install support for serializing Apache Avro structures.\n- ``snappy`` will install Snappy compression support. The Python snappy package\n is simply a binding to a system library. Therefore you must install that first\n before the Python binding will install successfully. For example, on Debian\n systems you will want ``sudo apt-get install libsnappy-dev``\n\n- ``brotli`` will install Brotli compression support.\n- ``amq`` will install the AMQP extras (asyncio bindings for RabbitMQ)\n- ``develop`` will install the extras needed to development Gestalt.\n\nOnce installed you can begin using Gestalt to develop applications.\n\n## Usage\n\nThere are many examples under the ``examples`` directory.\n\nThe [API Reference](http://gestalt.readthedocs.io) provides API-level documentation.\n\n\n### Performance Tip\n\nConsider using the high performance [uvloop](https://github.com/MagicStack/uvloop)\nevent loop implementation instead of the default asyncio event loop.\n\nInstall the package using:\n\n```console\n(venv) $ pip install uvloop\n```\n\nThen, simply call ``uvloop.install()`` before creating an asyncio event loop\neither via the standard ``asyncio.get_event_loop()``, ``asyncio.run()`` or the\n``gestalt.runner.run`` function.\n\n\n## Change Log\n\nNotable changes to this project will be documented in this file.\n\n### Version History\n\n#### 20.1.0\n\n- Update package to support Python3.8\n- Use yarl package for URLs.\n- Add linting to improve code sustainment.\n- Fix bug in stream protocols that affected msg_len in scenarios where messages were fragmented.\n\n#### 19.9.2\n\n- Fix markdown displayed on PyPI.\n\n#### 19.9.1\n\n- Adopted CalVer for package versioning.\n- Initial functionality release.\n- Clean up type annotation to remove all Mypy errors.\n- Add Mypy type check to CI.\n- Improve unit test code coverage.\n\n#### 0.2.0\n\n- Added basic functionality.\n\n#### 0.0.1\n\n- Project created.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/claws/gestalt", "keywords": "gestalt,framework,communications", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "gestalt", "package_url": "https://pypi.org/project/gestalt/", "platform": "", "project_url": "https://pypi.org/project/gestalt/", "project_urls": { "Homepage": "https://github.com/claws/gestalt" }, "release_url": "https://pypi.org/project/gestalt/20.1.1/", "requires_dist": [ "yarl", "aio-pika ; extra == 'amq'", "avro-python3 ; extra == 'avro'", "brotli ; extra == 'brotli'", "asynctest ; extra == 'develop'", "black ; extra == 'develop'", "coverage ; extra == 'develop'", "mypy ; extra == 'develop'", "m2r ; extra == 'develop'", "pylint ; extra == 'develop'", "sphinx ; extra == 'develop'", "twine ; extra == 'develop'", "wheel ; extra == 'develop'", "grpcio-tools ; extra == 'develop'", "msgpack-python ; extra == 'msgpack'", "protobuf ; extra == 'protobuf'", "python-snappy ; extra == 'snappy'", "PyYAML ; extra == 'yaml'" ], "requires_python": ">=3.6", "summary": "gestalt is a Python application framework for building distributed systems", "version": "20.1.1", "yanked": false, "yanked_reason": null }, "last_serial": 6450453, "releases": { "0.0.1": [], "19.10.0": [ { "comment_text": "", "digests": { "md5": "45024b3ba8de7029afc76a549a3160b8", "sha256": "9001e210eb402f2a94dc4565d7e7ff7b43f47e841c22f031cb8d899377980da6" }, "downloads": -1, "filename": "gestalt-19.10.0-py3-none-any.whl", "has_sig": false, "md5_digest": "45024b3ba8de7029afc76a549a3160b8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 69365, "upload_time": "2019-10-29T02:36:22", "upload_time_iso_8601": "2019-10-29T02:36:22.061692Z", "url": "https://files.pythonhosted.org/packages/21/f3/14af1a7d5470007474593254e064cb01aa63fcb53614990fa5534deb4e5c/gestalt-19.10.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "19.9.1": [ { "comment_text": "", "digests": { "md5": "0ee59790b61e3344ed9c00ba94bbc3d0", "sha256": "1b9b23d02f4417528871a8e8249ea6164be9d0b6ae67c14ead327684b5a93f4d" }, "downloads": -1, "filename": "gestalt-19.9.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0ee59790b61e3344ed9c00ba94bbc3d0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 69131, "upload_time": "2019-09-22T12:52:20", "upload_time_iso_8601": "2019-09-22T12:52:20.573911Z", "url": "https://files.pythonhosted.org/packages/35/cd/5cade573a9e4bfc90520a7918d717cd545906a4aa42e5dc6a2626cb95b6d/gestalt-19.9.1-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "19.9.2": [ { "comment_text": "", "digests": { "md5": "ba9db714f83145842ecdb68eff5131b0", "sha256": "b5b1dce0b97fbdb83608d00510da4ffcb68c2904939ed3164ce276a6609ca97d" }, "downloads": -1, "filename": "gestalt-19.9.2-py3-none-any.whl", "has_sig": false, "md5_digest": "ba9db714f83145842ecdb68eff5131b0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 69280, "upload_time": "2019-09-22T13:27:33", "upload_time_iso_8601": "2019-09-22T13:27:33.271025Z", "url": "https://files.pythonhosted.org/packages/0d/58/ea1076334af12d07c43cf5a9fa09e0d819bf11af2d984bac98452aaf0cfb/gestalt-19.9.2-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "20.1.0": [ { "comment_text": "", "digests": { "md5": "fbac0e6b46959298f8ebf2622eb1f07a", "sha256": "59c0a3d504bd5d9997d009749d9bd65d865b02a84dc8e8a0e816e48f6a94dec3" }, "downloads": -1, "filename": "gestalt-20.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fbac0e6b46959298f8ebf2622eb1f07a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 70405, "upload_time": "2020-01-08T06:47:39", "upload_time_iso_8601": "2020-01-08T06:47:39.147228Z", "url": "https://files.pythonhosted.org/packages/69/56/3bcc0163a4fc83f03d3fec8fc17389edc1df0cd9854e1c004fbadcc22a7c/gestalt-20.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "20.1.1": [ { "comment_text": "", "digests": { "md5": "c83c47214db65e183af4f635c62ea7e6", "sha256": "4010956b2e2e9390d03cc297c4ddc1be95eaa783db0251a6dc2f16a055a62185" }, "downloads": -1, "filename": "gestalt-20.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c83c47214db65e183af4f635c62ea7e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 70406, "upload_time": "2020-01-14T09:07:02", "upload_time_iso_8601": "2020-01-14T09:07:02.297404Z", "url": "https://files.pythonhosted.org/packages/31/14/44075594f1afa2cee773a752b41b540ff17d8d451b593ec45ecaea3ec597/gestalt-20.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c83c47214db65e183af4f635c62ea7e6", "sha256": "4010956b2e2e9390d03cc297c4ddc1be95eaa783db0251a6dc2f16a055a62185" }, "downloads": -1, "filename": "gestalt-20.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c83c47214db65e183af4f635c62ea7e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 70406, "upload_time": "2020-01-14T09:07:02", "upload_time_iso_8601": "2020-01-14T09:07:02.297404Z", "url": "https://files.pythonhosted.org/packages/31/14/44075594f1afa2cee773a752b41b540ff17d8d451b593ec45ecaea3ec597/gestalt-20.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }