{ "info": { "author": "Nicolas Delaby", "author_email": "ticosax@free.fr", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6" ], "description": "pseud\n=====\n.. image:: https://travis-ci.org/ticosax/pseud.svg?branch=master\n :target: https://travis-ci.org/ticosax/pseud\n :alt: Travis-CI Status\n\n.. image:: https://codecov.io/gh/ticosax/pseud/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/ticosax/pseud\n :alt: Coverage Status\n\n.. image:: https://readthedocs.org/projects/pseud/badge/?version=latest\n :target: http://pseud.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nPythonic bidirectional-rpc API built on top of \u00d8MQ with pluggable\nencryption, authentication and heartbeating support.\n\nFeatures\n~~~~~~~~\n#. \u00d8MQ transport layer.\n#. All native python types supported (msgpack).\n#. First citizen exceptions.\n#. Bi-bidirectional (server can initiate calls to connected clients).\n#. Encryption based on CURVE.\n#. Pluggable Authentication.\n#. Pluggable Heartbeating.\n#. Pluggable Remote Call Routing.\n#. Built-in proxy support. A server can delegate the work to another one.\n#. SyncClient (using zmq.REQ) to use within non event based processes.\n (Heartbeating, Authentication and job execution are not supported with\n the SyncClient.)\n\nInstallation\n~~~~~~~~~~~~\n\n.. code-block:: console\n\n $ pip install pseud\n\n\nExecution\n~~~~~~~~~\n\nThe Server\n------------------\n\n.. code-block:: python\n\n from pseud import Server\n\n\n server = Server('service')\n server.bind('tcp://127.0.0.1:5555')\n\n @server.register_rpc\n def hello(name):\n return 'Hello {0}'.format(name)\n\n await server.start() # this will block forever\n\n\nThe Client\n------------------\n\n.. code-block:: python\n\n from pseud import Client\n\n\n client = Client('service', io_loop=loop)\n client.connect('tcp://127.0.0.1:5555')\n\n # Assume we are inside a coroutine\n async with client:\n response = await client.hello('Charly')\n assert response == 'Hello Charly'\n\n\n\nThe SyncClient\n--------------\n\n.. code-block:: python\n\n # to use within a non-asynchronous process or in a command interpreter\n from pseud import SyncClient\n\n\n client = SyncClient()\n client.connect('tcp://127.0.0.1:5555')\n\n assert client.hello('Charly') == 'Hello Charly'\n\n\n\nThe Server send a command to the client\n---------------------------------------\n\nIt is important to note that the server needs to know which\npeers are connected to it.\nThis is why the security_plugin ``trusted_peer`` comes handy.\nIt will register all peer id and be able to route messages to each of them.\n\n.. code-block:: python\n\n from pseud import Server\n\n\n server = Server('service', security_plugin='trusted_peer')\n server.bind('tcp://127.0.0.1:5555')\n\n @server.register_rpc\n def hello(name):\n return 'Hello {0}'.format(name)\n\n await server.start() # this will block forever\n\nThe client needs to send its identity to the server. This is why ``plain``\nsecurity plugin is used. The server will not check the password, he will just\ntake into consideration the user_id to perform the routing.\n\n\n.. code-block:: python\n\n from pseud import Client\n\n\n client = Client('service',\n security_plugin='plain',\n user_id='alice',\n password='')\n client.connect('tcp://127.0.0.1:5555')\n\n # Action that the client will perform when\n # requested by the server.\n @client.register_rpc(name='draw.me.a.sheep')\n def sheep():\n return 'beeeh'\n\n\nBack on server side, we can send to it any commands the client is able to do.\n\n.. code-block:: python\n\n # assume we are inside a coroutine\n sheep = await server.send_to('alice').draw.me.a.sheep()\n assert sheep == 'beeeh'\n\n\nDocumentation\n~~~~~~~~~~~~~\n`Pseud on Readthedocs `_\n\nCopyright 2014 ezeep GmbH\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ticosax/pseud", "keywords": "rpc zeromq pyzmq curve bidirectional asyncio", "license": "Apache Software License", "maintainer": "", "maintainer_email": "", "name": "pseud", "package_url": "https://pypi.org/project/pseud/", "platform": "", "project_url": "https://pypi.org/project/pseud/", "project_urls": { "Homepage": "https://github.com/ticosax/pseud" }, "release_url": "https://pypi.org/project/pseud/1.0.1/", "requires_dist": null, "requires_python": "", "summary": "Bidirectionnal RPC Api on top of pyzmq", "version": "1.0.1" }, "last_serial": 3772616, "releases": { "0.0.4": [ { "comment_text": "", "digests": { "md5": "3aae373b1bdef22006e7405b9618eb35", "sha256": "122ae98044afcdfbefd14978766f0e310cf863457f9c62733342b6f79c45b364" }, "downloads": -1, "filename": "pseud-0.0.4-py27-none-any.whl", "has_sig": false, "md5_digest": "3aae373b1bdef22006e7405b9618eb35", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17567, "upload_time": "2014-05-26T08:03:22", "url": "https://files.pythonhosted.org/packages/0d/2d/ccb912105e9d7c19df5c9521ab5ee49ab283c3bbdf998f52149c7aa05daf/pseud-0.0.4-py27-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c3f117ac5b7b896d415adb25ed771353", "sha256": "9b3860f6a0c29abc848724a779e7d32d82b35a7c5360fa754692a492db33c3ae" }, "downloads": -1, "filename": "pseud-0.0.4.tar.gz", "has_sig": false, "md5_digest": "c3f117ac5b7b896d415adb25ed771353", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12984, "upload_time": "2014-05-26T08:03:19", "url": "https://files.pythonhosted.org/packages/15/db/93c1fbf25d7f63da30e5d44e343a3b1c263eefe5e16d5be7d0a143f58704/pseud-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "d37fcfaf06f3c720d4a21e05d59c78f2", "sha256": "b6d61029803f08c51e0191ac314b406d0108f1fb98975d5ad6dbc29511b4b24d" }, "downloads": -1, "filename": "pseud-0.0.5-py2-none-any.whl", "has_sig": true, "md5_digest": "d37fcfaf06f3c720d4a21e05d59c78f2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17829, "upload_time": "2014-08-27T18:01:59", "url": "https://files.pythonhosted.org/packages/8e/92/841842810fc4c48571e11a10fde8673bf45b8f412cc9506fdbbd019271a1/pseud-0.0.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d94b032796fcd31f4a97e28c4f76de98", "sha256": "35206df3385e79592ba6d9219670b61729612d704127ec7dd8b9b49f4c8a047d" }, "downloads": -1, "filename": "pseud-0.0.5.tar.gz", "has_sig": true, "md5_digest": "d94b032796fcd31f4a97e28c4f76de98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13704, "upload_time": "2014-08-27T18:01:55", "url": "https://files.pythonhosted.org/packages/28/5a/724367b7794ff6bf7bc164378a26949b6fd7e55567f6a8c463e6c7f7f5bd/pseud-0.0.5.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "3656ba03d3d047f14cbc666243c58662", "sha256": "7c2955625de43b468d6b57e7dbaa5807f38aa2f4505c916137117ef7200c5d82" }, "downloads": -1, "filename": "pseud-1.0.0-py3-none-any.whl", "has_sig": true, "md5_digest": "3656ba03d3d047f14cbc666243c58662", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14382, "upload_time": "2018-04-17T10:15:27", "url": "https://files.pythonhosted.org/packages/39/ce/6c303609bf448877de8699114d34a35ca0dd23a097a4cc92d9373e6bbd00/pseud-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "155fa705a612b31e9fde40f2c559817f", "sha256": "fd1bd63cb08154c9774ae16456fa8459f621487f9022538732685ac7db853712" }, "downloads": -1, "filename": "pseud-1.0.0.tar.gz", "has_sig": false, "md5_digest": "155fa705a612b31e9fde40f2c559817f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12129, "upload_time": "2018-04-17T09:48:10", "url": "https://files.pythonhosted.org/packages/d1/bc/f7461d3fc8c4b9f8d9ac298384ad54277d8e24f6459680eca5eadf519fbb/pseud-1.0.0.tar.gz" } ], "1.0.0a1": [ { "comment_text": "", "digests": { "md5": "912ebafec51bff71fd7c4444405d9c64", "sha256": "03c850abf7ccdb75235ec28c6dc0f1ee244a2bb9da195c97ec746df8a0832f14" }, "downloads": -1, "filename": "pseud-1.0.0a1.tar.gz", "has_sig": false, "md5_digest": "912ebafec51bff71fd7c4444405d9c64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14497, "upload_time": "2017-04-09T09:35:35", "url": "https://files.pythonhosted.org/packages/44/29/8ee781a4c9da880608037071cab307c0bd3b390b50d1b6e965ab6cdb4496/pseud-1.0.0a1.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "9a0e889a05886733368dd10c965f90ad", "sha256": "cd24f8be43ab13d628b108ac6c141bdf6031bdcfa09bd7c2ba35f80cd03c5e67" }, "downloads": -1, "filename": "pseud-1.0.1-py3-none-any.whl", "has_sig": true, "md5_digest": "9a0e889a05886733368dd10c965f90ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16004, "upload_time": "2018-04-17T10:17:56", "url": "https://files.pythonhosted.org/packages/86/b4/cf1c5d9bb40920343967b8948f9952e9c765e78cb5166db8ea61ff217c5e/pseud-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cff2287b308376d2f827827f2c350bcf", "sha256": "417c88e3f51797d8eef186f433c4ea31cdf21cc8da1a0f3ca52577a1d521b54a" }, "downloads": -1, "filename": "pseud-1.0.1.tar.gz", "has_sig": true, "md5_digest": "cff2287b308376d2f827827f2c350bcf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12722, "upload_time": "2018-04-17T10:18:18", "url": "https://files.pythonhosted.org/packages/2e/34/e58cf0dad0ee253a70808d9c68b25a4730a1f2e5f58a8cec1c0e76ef6dad/pseud-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9a0e889a05886733368dd10c965f90ad", "sha256": "cd24f8be43ab13d628b108ac6c141bdf6031bdcfa09bd7c2ba35f80cd03c5e67" }, "downloads": -1, "filename": "pseud-1.0.1-py3-none-any.whl", "has_sig": true, "md5_digest": "9a0e889a05886733368dd10c965f90ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16004, "upload_time": "2018-04-17T10:17:56", "url": "https://files.pythonhosted.org/packages/86/b4/cf1c5d9bb40920343967b8948f9952e9c765e78cb5166db8ea61ff217c5e/pseud-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cff2287b308376d2f827827f2c350bcf", "sha256": "417c88e3f51797d8eef186f433c4ea31cdf21cc8da1a0f3ca52577a1d521b54a" }, "downloads": -1, "filename": "pseud-1.0.1.tar.gz", "has_sig": true, "md5_digest": "cff2287b308376d2f827827f2c350bcf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12722, "upload_time": "2018-04-17T10:18:18", "url": "https://files.pythonhosted.org/packages/2e/34/e58cf0dad0ee253a70808d9c68b25a4730a1f2e5f58a8cec1c0e76ef6dad/pseud-1.0.1.tar.gz" } ] }