{ "info": { "author": "Justin Bronder", "author_email": "jsbronder@cold-front.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "[![Build Status](https://travis-ci.org/jsbronder/asyncio-dgram.svg?branch=master)](https://travis-ci.org/jsbronder/asyncio-dgram)\n\n# Higher level Datagram support for Asyncio\nSimple wrappers that allow you to `await read()` from datagrams as suggested\nby Guido van Rossum\n[here](https://github.com/python/asyncio/pull/321#issuecomment-187022351). I\nfrequently found myself having to inherit from `asyncio.DatagramProtocol` and\nimplement this over and over.\n\n# Design\nThe goal of this package is to make implementing common patterns that use datagrams\nsimple and straight-forward while still supporting more esoteric options. This is done\nby taking an opinionated stance on the API that differs from parts of asyncio. For instance,\nrather than exposing a function like\n[create\\_datagram\\_endpoint](https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.create_datagram_endpoint)\nwhich supports many use-cases and has conflicting parameters, `asyncio_dgram`\nonly provides three functions for creating a stream:\n\n- `connect((host, port))`: Creates a datagram endpoint which can only\n communicate with the endpoint it connected to.\n- `bind((host, port))`: Creates a datagram endpoint that can communicate\n with anyone, but must specified the destination address every time it\n sends.\n- `from_socket(sock)`: If the above two functions are not sufficient, then\n `asyncio_dgram` simply lets the caller setup the socket as they see fit.\n\n\n# Example UDP echo client and server\nFollowing the example of asyncio documentation, here's what a UDP echo client\nand server would look like.\n```python\nimport asyncio\n\nimport asyncio_dgram\n\n\nasync def udp_echo_client():\n stream = await asyncio_dgram.connect((\"127.0.0.1\", 8888))\n\n await stream.send(b\"Hello World!\")\n data, remote_addr = await stream.recv()\n print(f\"Client received: {data.decode()!r}\")\n\n stream.close()\n\n\nasync def udp_echo_server():\n stream = await asyncio_dgram.bind((\"127.0.0.1\", 8888))\n\n print(f\"Serving on {stream.sockname}\")\n\n data, remote_addr = await stream.recv()\n print(f\"Echoing {data.decode()!r}\")\n await stream.send(data, remote_addr)\n\n await asyncio.sleep(0.5)\n print(f\"Shutting down server\")\n\n\ndef main():\n loop = asyncio.get_event_loop()\n loop.run_until_complete(asyncio.gather(udp_echo_server(), udp_echo_client()))\n\n\nif __name__ == \"__main__\":\n main()\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/jsbronder/asyncio-dgram", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "asyncio-dgram", "package_url": "https://pypi.org/project/asyncio-dgram/", "platform": "", "project_url": "https://pypi.org/project/asyncio-dgram/", "project_urls": { "Homepage": "https://github.com/jsbronder/asyncio-dgram" }, "release_url": "https://pypi.org/project/asyncio-dgram/0.2.0/", "requires_dist": [ "black ; extra == 'test'", "flake8 ; extra == 'test'", "pytest ; extra == 'test'", "pytest-asyncio ; extra == 'test'" ], "requires_python": ">=3.6", "summary": "Higher level Datagram support for Asyncio", "version": "0.2.0" }, "last_serial": 5946071, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "8fd515278140a1ea9142de103a4d8a0b", "sha256": "fae72b80ac5f9ddc30c51a707892e0a8818436e07c93acd65ef4a9ac31d6a043" }, "downloads": -1, "filename": "asyncio_dgram-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8fd515278140a1ea9142de103a4d8a0b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 5670, "upload_time": "2019-09-18T19:59:21", "url": "https://files.pythonhosted.org/packages/c5/bd/22e202090edcc1da0a851a79c19ad834874917b438a217dbc74959cf4c74/asyncio_dgram-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bbf393e9f19807265aebad8cee07d8ed", "sha256": "4fa51867f5ce979ba06cbb6fd536c64a41dd3903c12b43039bf7c7fe97c09846" }, "downloads": -1, "filename": "asyncio-dgram-0.0.1.tar.gz", "has_sig": false, "md5_digest": "bbf393e9f19807265aebad8cee07d8ed", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 5759, "upload_time": "2019-09-18T19:59:24", "url": "https://files.pythonhosted.org/packages/a5/e1/c1408968e4b56251f9ca9aed0f9f018fec4c3272af8cc50d2db3c1ddea57/asyncio-dgram-0.0.1.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "2c970570b467347e145ef543eb3ff586", "sha256": "ee455b672c0db1ded46295bbebb8ede78a5a93f93a4b9205fdd5f015f7e8b61a" }, "downloads": -1, "filename": "asyncio_dgram-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2c970570b467347e145ef543eb3ff586", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 5705, "upload_time": "2019-09-27T14:18:30", "url": "https://files.pythonhosted.org/packages/3f/02/659b1e6c38fc89b604619044a4f937fde6f8e3d04a16321e344c163ea4a5/asyncio_dgram-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4da51d8218d6755d24231b3e65e3220d", "sha256": "3680913adc32b2350e8723b3aa6846ce8a0e15e8c7612ab7960d89214d4bdc18" }, "downloads": -1, "filename": "asyncio-dgram-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4da51d8218d6755d24231b3e65e3220d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 6020, "upload_time": "2019-09-27T14:18:32", "url": "https://files.pythonhosted.org/packages/18/9e/de56177472f1a2cb3f9feedac2c72e279c89c646ed0a18c7cb8abcf93700/asyncio-dgram-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "98140ef7258cadbfa150fb10aadb4fc0", "sha256": "e3302d6f6db402e1f0329b7530cd4c15420f49f1c57b4e95a325c893a6cde52f" }, "downloads": -1, "filename": "asyncio_dgram-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "98140ef7258cadbfa150fb10aadb4fc0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 5705, "upload_time": "2019-09-30T18:53:53", "url": "https://files.pythonhosted.org/packages/7a/08/04e721fe63119db70f96cce205ed9044d43b8ff80fe071064cb05a625f8e/asyncio_dgram-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b531b9e83e6792e7b58daf5f1634f938", "sha256": "c1068bac13075c89a05506acf95df24c70ba6531ccc31eb68f1630249bdfe9a9" }, "downloads": -1, "filename": "asyncio-dgram-0.1.1.tar.gz", "has_sig": false, "md5_digest": "b531b9e83e6792e7b58daf5f1634f938", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 8234, "upload_time": "2019-09-30T18:53:55", "url": "https://files.pythonhosted.org/packages/7f/12/a4cc3bee2f83a10c9fa738191c939de321a1f14ba2784675535d3b51a108/asyncio-dgram-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "b1e8742c9cab9c132d34c85d321617a6", "sha256": "2415e461bdecbfd568b15fbd761fb7acf7ee83b7a75ad257768fa7b116e62d4e" }, "downloads": -1, "filename": "asyncio_dgram-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b1e8742c9cab9c132d34c85d321617a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5780, "upload_time": "2019-10-08T17:11:03", "url": "https://files.pythonhosted.org/packages/15/1d/7aa990cf8e007d6a46a9e051b6c590cc8ab6e7918f6e6bfac92e0b52e873/asyncio_dgram-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ed48ae36b13039b6c870a70db260e05c", "sha256": "53e622e1b5eeeefced336f593b0027b4892f5faf833fcf38e17eb0cbe4f5f0ab" }, "downloads": -1, "filename": "asyncio-dgram-0.1.2.tar.gz", "has_sig": false, "md5_digest": "ed48ae36b13039b6c870a70db260e05c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8290, "upload_time": "2019-10-08T17:10:41", "url": "https://files.pythonhosted.org/packages/37/40/4000ac0fdd0cda1edc3ddfa6d23b2e2e0ff522e465e92f12563ff8eac5f6/asyncio-dgram-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "20731b0884afbf17415b6232d9b95c14", "sha256": "57a89db3f2038840ea3854188dca15c9b3301917aecc60eb2bbc8907a8d993bd" }, "downloads": -1, "filename": "asyncio_dgram-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "20731b0884afbf17415b6232d9b95c14", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5780, "upload_time": "2019-10-08T18:21:14", "url": "https://files.pythonhosted.org/packages/1b/53/5bb4d1e15b66ce0eb540c187a10efad1af0896e3e1ade3d43269e4169464/asyncio_dgram-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e02efac304ab91570e7b428bc5dcd65", "sha256": "fc0ac41c53873d168f3a4638f84866db433beaf820071c68915288bce128c74a" }, "downloads": -1, "filename": "asyncio-dgram-0.2.0.tar.gz", "has_sig": false, "md5_digest": "9e02efac304ab91570e7b428bc5dcd65", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8290, "upload_time": "2019-10-08T18:21:16", "url": "https://files.pythonhosted.org/packages/eb/1f/9e8a2e48f3bd51ec5462031969474dcb0c20682e75eade0856a8c03d2522/asyncio-dgram-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "20731b0884afbf17415b6232d9b95c14", "sha256": "57a89db3f2038840ea3854188dca15c9b3301917aecc60eb2bbc8907a8d993bd" }, "downloads": -1, "filename": "asyncio_dgram-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "20731b0884afbf17415b6232d9b95c14", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5780, "upload_time": "2019-10-08T18:21:14", "url": "https://files.pythonhosted.org/packages/1b/53/5bb4d1e15b66ce0eb540c187a10efad1af0896e3e1ade3d43269e4169464/asyncio_dgram-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e02efac304ab91570e7b428bc5dcd65", "sha256": "fc0ac41c53873d168f3a4638f84866db433beaf820071c68915288bce128c74a" }, "downloads": -1, "filename": "asyncio-dgram-0.2.0.tar.gz", "has_sig": false, "md5_digest": "9e02efac304ab91570e7b428bc5dcd65", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8290, "upload_time": "2019-10-08T18:21:16", "url": "https://files.pythonhosted.org/packages/eb/1f/9e8a2e48f3bd51ec5462031969474dcb0c20682e75eade0856a8c03d2522/asyncio-dgram-0.2.0.tar.gz" } ] }