{ "info": { "author": "D.Bashkirtsevich", "author_email": "bashkirtsevich@gmail.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python" ], "description": "# Asyncio UDP server\n[![Build Status](https://travis-ci.org/bashkirtsevich-llc/aioudp.svg?branch=master)](https://travis-ci.org/bashkirtsevich-llc/aioudp)\n\nYet another async UDP server. Based on bare sockets.\n\n**Killer-feature**: bandwidth throttling for uploading & downloading.\n\n\n## `UDPServer.__init__`\n\nUDP server constructor.\n\nArguments:\n* `upload_speed` \u2014 maximum outgoing traffic speed in \"byter per second\" (_default: `0` \u2014 unlimited_);\n* `download_speed` \u2014 maximum incoming traffic speed in \"byter per second\" (_default: `0` \u2014 unlimited_);\n* `recv_max_size` \u2014 maximum socket window size for receiving (_default: `262144`_).\n\n\n## `UDPServer.run`\n\nServer startup function.\n\nArguments:\n* `host` \u2014 socket bind host/interface (e.g. \"0.0.0.0\", \"127.0.0.1\" or \"localhost\");\n* `port` \u2014 socket listen port;\n* `loop` \u2014 event loop.\n\n\n## `UDPServer.send`\n\nEnqueue data for sending.\n\nArguments:\n* `data` \u2014 **bytes** or **bytearray** data for sending;\n* `addr` \u2014 tuple of host and port (e.g. `(\"127.0.0.1\", 9876)` or `(\"some.domain.com\", 5556)`).\n\n\n## `UDPServer.subscribe`\n\nSubscribe coro or future on a datagram received event.\n\nArguments:\n* `fut` \u2014 coroutine or future with arguments `data` and `addr`.\n\n\n## `UDPServer.unsubscribe`\n\nUnsubscribe coro or future from a datagram received event.\n\nArguments:\n* `fut` \u2014 coroutine or future.\n\n\n## Virtual events\n\n* `UDPServer._connection_made()` \u2014 virtual method, call after socket bind successfully;\n* `UDPServer._socket_error(data, addr)` \u2014 virtual method, call when got socket error;\n* `UDPServer._datagram_received(data, addr)` \u2014 virtual method, call each time when server got incoming data, can be used for modify data before pass it to subscribers;\n* `UDPServer._notify_subscribers(data, addr)` \u2014 virtual method, call with params returned from `_datagram_received`. \n\n\n## Example\n\n```python\nimport asyncio\nimport datetime\n\nfrom aioudp import UDPServer\n\n\nclass MyUDPServer:\n def __init__(self, server, loop):\n self.server = server\n self.loop = loop\n # Subscribe for incoming udp packet event\n self.server.subscribe(self.on_datagram_received)\n asyncio.ensure_future(self.do_send(), loop=self.loop)\n\n async def on_datagram_received(self, data, addr):\n # Override virtual method and process incoming data\n print(datetime.datetime.now(), addr, data)\n\n async def do_send(self):\n while True:\n # Any payload\n payload = b'd1:ad2:id20:k\\xe7\\x90\\xcd\\x0c_R\\xfe\\x82\\xeb\\xa8 x\\x14\\xb4-\\x8e0\\xe5\\x086:target20:\\x11\\x8e\\xcc,\\x89\\xa4\\x99\\xf98E\\x98\\x7f!\\xa7w\\rz\\x1b\\x14de1:q9:find_node1:t2:#K1:y1:qe'\n # Delay for prevent tasks concurency\n await asyncio.sleep(0.001)\n # Enqueue data for send\n self.server.send(payload, (\"router.bittorrent.com\", 6881))\n\nasync def main(loop):\n # Bandwidth speed is 100 bytes per second\n udp = UDPServer(download_speed=100, upload_speed=100)\n udp.run(\"0.0.0.0\", 12346, loop=loop)\n\n server = MyUDPServer(server=udp, loop=loop)\n \n\nif __name__ == '__main__':\n loop = asyncio.get_event_loop()\n loop.run_until_complete(main(loop))\n loop.run_forever()\n```\n\nOutput:\n\n```\n2019-06-04 16:04:07.761576 ('67.215.246.10', 6881) b'd2:ip6:Z\\x97\\'X0:1:rd2:id20:2\\xf5NisQ\\xffJ\\xec)\\xcd\\xba\\xab\\xf2\\xfb\\xe3F|\\xc2g5:nodes416:\\x02\\xf7\\xb7\\x1d\\x94\\xb1\\x00\\xe8\\x84\\xca\\x9c\\xc3\\xb09\\xbb\\x04*P\\x8cQ\\x1f\\x7fF\\xa9\\x1a\\xe1\\x00\\x13\\x99W\\x14\\xb1\\x99\\x8b\\xff\\x8e\\xda2\\xb3 \\xac\\x82\\xef0sCl\\xda+G\\xc4\\x91\\x17bO,\\xe8\\xbc\\x9e\\xeb+\\xfc.\\xe6\\xf8\\xb0\\x82\\xee~\\x17 \\xebvF\\x83\\xf8\\x83\\xc1\\xdaK\\x1b\\x83\\x17\\xfb!\\xab\\x1e\\x97T\\xa3\\xfa\\x9a\\x14Q$\\x06)\\\\\\xad>O\\x03\\xc4\\x91\\x9f/7\\xf6>]|\\xe0\\xc6f\\x1eq\\xfd\\xcc\\x0e\\xbe\\xd0\\x85\\xde\\xf9\\xbeJc\\xe3e\\xe5\\x9e\\x9d\\xca})P\\xa5\\xfd\\x8c\\xb66\\xb9\\xba\\x0f\\xfc\\xb1\\xb9\\xa3 E\\xc9*\\x1f\\xd1I\\xb1r9\\xfaI\\xf1\\xf1\\xbb\\xe9\\xeb\\xb3\\xa6\\xdb<\\x87\\x0c>\\x99$^R\\xbc\\x85\\xd3\\xb3C\\xab}\\xbf6\\xcc\\x11\\x7fv\\xde\\r\\xed\\xa4q\\xdd\\x04#\\x8d\\xd8j7$[\\xe5e\\\\\\xf9V\\x166\\xb1P\\x7f\\xa01v\\xf49\\xb9\\x9a\\x12*\\xad\\x91:M\\xb67%kY\\xc7\\xb5\\xe1\\xe7\\x901_u\\\\\\xbd(g\\xeb[\\xa7-\\x1fl\\x1e\\xd6\\x93\\xe8g\\xdam\\n;\\xa8y \\xf4K\\x18\\xe0\\x11z\\xfe\\xa6\\xf6\\xc9\\xcfe\\xcb\\xf9\\x7f+\"92\\xfb/\\xd8C>K\\x1a\\xf9\\xe8#\\x86\\x8dy\\x07\\xa1\\x94>\\x81\\x17_\\xcd\\xe9\\x03?\\x96pX\\x1c\\xe8v{\\xa5W,_ \\x0f|Oi\\x8bg\\xc5J\\xfd#\\x9e\\xf7\\xdd\\xc4\\xa4\\xb9\\xd0\\x8f\\xbd\\x9d\\x98\\xfaD\\x91N}U{j\\xd7\\xfak\\')\\xcdr(\\xc3\\xdc\\xc6\\xd7\\x9b=\\x1d\\x12/\\xa4\\xd5A\\x8f[\\x98\\x07\\x10EHq#\\xcc\\xb8\\xae\\xf00\\xd4\\xfd(\\xe5fj\\xbb\\xdd\\xa5s\\x8b\\xec:\\xb1\\x1d\\x93%)S\\xdf.\\xb3\\x17\\x95\\x9b\\xc8\\xc0\\x95\"\\x86\\x81\\x16\\x8d]\\xdau\\x15S\\xbcN:\\x9d\\x83I+Vk\\xc4\\x91\\x0b9t\\xbdv`\\xb2\\x8d7\\xae\\t\\xb1\\x8c\\x96\\x9f\\x1c\\xa0B\\xd0\\x93\\xbfd\\x8e\\xe7\\xdf`\\x14\\x13\\'<\\x92Pn:u\\xa0\\n\\xc3\\xcd\\x01\\x12H\\xc65\\xeb\\xa2X\\xc8\\xd6\\x0b\\x81\\x1b\\xcf\\x89\\xbco$\\x8a\\xf97\\x920u\\xb8i\\xde\\x15\\x19\\xc4\\x8f\\xfb\\xc0\\xb1\\xcf\\x99\\xd9e1\\xf6u\\x01\\xb7\\x1e\\xc4\\x80\\xca\\x0e\\xcawuv\\xc9\\xaf[\\x0b\\xd4\\x99\\xf4[\\xf1\\x8ck\\x1a\\xe1r\\xc3\\xb4(\\xb8ba\\x98\\x8b\\x1e\\xb4TN\"\\xa7F5B\\xcb\\x0f\\x05\\x9e\\xed-b\\x82\\xb8\\x8d\\xed\\xf7\\xaf?,\\xc5)z\\xd2f\\xc1\\xda`.\\xf0.!\\xf2H\\xbezs\\xf3\\x8c\\t\\x9c\\x9d\\xe8\\x87Q\\xf4\\xe9\\x8fJ\\x0c\\x16\\xa8\\xc55Q\\x878<\\x04.0Bc!\\xade1:t2:#K1:y1:re'\n2019-06-04 16:04:17.483860 ('67.215.246.10', 6881) b'd2:ip6:Z\\x97\\'X0:1:rd2:id20:2\\xf5NisQ\\xffJ\\xec)\\xcd\\xba\\xab\\xf2\\xfb\\xe3F|\\xc2g5:nodes416:k*[\\x0c1\\x9a\\xb1\\xd6\\xe5>G\\x0c\\xac\\xe3v0\\xd0\\xc2\\xb7\\x8cI\\x93\\xb7\\xcd\\xa8\\xf1\\xca(\\xf8\\xc0\\xe0\\xa6\\xd4\\xda*\\xd4\\xf1\\xedc\\xb4\\xdf\\xdf\\xe2Q\\x1a\\xe9^\\t\\x8f\\xfa\\x1a\\xe1$Wr\\xe18\\x1e\\x9a\\xce\\xabW}\\xbfLY\\x05\\xbd\\xce\\xa0\\x0e\\xb1_\\x19\\xdf>\\xcaJS\\x00H\\xdf\\x8d\\xeedn\\xd7\\x07-\\x9f\\x8at\\xb0\\x14\\xbe\\x8d\\x1d\\x0eO\\xa7\\x97\\xa3\\x83\\xa9\\xb2\\xff\\xc9K\\x97\\x01m\\xbc\\xcb\\xc3\\x001vR\\'s\\xffyr\\x82UF\\\\z\\xafG\\x8f\\xc8U\\xcf}+\\x97\\x90\\xa2\\x1b\\x11\\xef\\xbfs\\x80Q\\xff\\x1dc\\x14%\\xe8\\x87\\xac!\\xadz\\xbd\\xcc\\xbfq\\xaex0\\x7f(}jY[W\\xdcsx\\n|F\\x86\\xed\\xa3\\x1a\\xe1,\\x03\\x87to\\xd2X\\x12\\x00\\x90\\t\\xcfu\\xec_m\\x15\\x02\\xe1\\xf6\\xd4\\x98\\x93\\xfa\\x1a\\xe1\\xc8\\xa1-tC!\\xd1X\\xb0\\xc9M\\xc8\\xf2\\x94|\\xca\\x80j\\xb8\\x04\\x05\\xceB\"_\\xc3H\\xf1i\\x86\\xb6\\x07Z=\\xc2\\xb1`m\\xab\\xbc\\xbeB\\xb8\\nVM]Q\\x1cp\\xc2L\\x83\\xca\\xe7\\xed\\x1e\\x10\\x9d\\xc9\\xde\\xdc[c\\xef\\xc2_]+N\\xaaJ\\xc9E0\\xf5\\x1b\\x16q\\xe1/\\x97w>a\\x94\\x10\\x0f\\x94\\xc2\"\\xd6\\x89+\\xa7\\x01\\\\w%\\x90Z_\\x1a\\xe1\\xd9\\xf5\\xff\\xb5D\\xf2\\x8d\\xbc^[j\\x16\\xb9H\\xe3.+\\r\\x87\\xa5aU\\xafMT\\xec\\x80\\x02\\x9bP\\xf5\\xc7\\xe9\\x8e\\x9e\\x94\\x96\\xc8\\xcdu\\xa1\\xc1.\\xa7 \\xb5I\\x0b\\x9d\\xef\\xd0\\x8ff\\x91+\\xc2\\xe0\\xeb/\\xbe\\x05\\x87\\xac\\xd8\\xb8vA\\xe8?V\\xa3\\xfdJ\\xc1\\x9f\\xe8\\xc4\\x91=\\xc4\\x16H\\xbdP\\x1fv5x9\\x02\\'N]Zh\\xed\\xc9\\xc3\\xb5\\xae:\\x04\\xc8\\x04e1:t2:#K1:y1:re'\n2019-06-04 16:04:22.345648 ('67.215.246.10', 6881) b'd2:ip6:Z\\x97\\'X0:1:rd2:id20:2\\xf5NisQ\\xffJ\\xec)\\xcd\\xba\\xab\\xf2\\xfb\\xe3F|\\xc2g5:nodes416:+S\\xdc\\x8c\\xc8%~ \\x12\\xd3\\xd9@\\xa9X4\\x9at\\xcc\\x8a\\xf9z\\x08\\x1d\\x16h/\\xf2}\\xb7I\\xd9\\x8fP\\x81(\\x9d\\xed\\xae\\xa5\\xe5\\xe4S1,\\xf0-\\xaeavL\\xc4\\x91~\\xd5\\x01`o\\xa8\\xc4\\xe0\\xfa \\xa5\\xf0\\xf1~`\\x0c\\x19[+\\x85\\xbb\\xd0\\x0bp\\xf3\\x8c\\xe98S\\xcd`=n|\\xa8\\x8c\\xa4~\\xfc\\xedg\\xce\\xff\\x8f\\x13}g\\xfc\\xc9)\\xa8\\x89L&]\\\\\\xb3M\\xc6NUE\\x7f\\xb8CQ\\x82\\xe1{C\\xba\\xaf\\x884g\\x9a\\xf3\\x8c\\x1a\\xe0\\xbb\\x1a\\x12\\xafCQ\\x1e\\x18\\x91;\\x80P\\xee\\xf0\\xdc\\t\\xc1m.\\xe4\\x04\\xda1\\xff\\x93?\\xa0r\\xc5\\x1d\\x9c\\x1f\\xc7\\xf2\\x0e[\\xc9\\tV4\\x94\\x02w\\xc2\\\\b\\x03+\\x1a\\xe1\\xc4\\x80#z0\\x14\\x9d}Kj\\xbe\\xf2>\\xa5\\xf8k\\x12\\x9a|u\\xb0:\\xc1,U\\r\\xc7kE\\xa1UY\\x1e~:r\\x14\\xb6p&\\xd7\\xdf\\xaf>\\x9b\\xa5b\\xb5\\xcd\\x1f\\xc4\\x91Z\\xdf\\x1a\\x1f\\xdb\\x9a\\x84\\tu\\xff\\xda(\\xddqy}nT\\xaa\\x8f%\\x06.\\xc9\\xda\\xe4\\xc0\\x9a\\x03\\x9c\\x12?\\xf1s[\\xb1\\xd7;\\xe3)\\xb9[o\\r\\xb6=\\xb57\\x98&\\xc4\\x91.\\xd1\\x87)5\\xf5s\\xb8\\xc9z\\xc4\\x9d\\x063Kw\\xaf\\xcc\\x046\\xdbN\\xcf,\\xf3\\x8c\\xaa\\x85\\xee\\xd0e\\xfa\\xca\\xd2\\x93\\x82\\xe2\\x98\\xeaA\\xdc\\xbd\\xaf\\x97F\\xe9r\\x19\\xb4i\\xde~>\\x82\\xfb\\xe9y#vJ\\xe4\\x8e\\x0e\\xd1\\xee]\\xe0qk(\\xb2\\x92\\x95\\xff\\x02\\n\\x98\\x9c\"\\xcaY\\x8d\\xb6\\x81a\\xa1\\xf9\\xc1\\nX\\xb4\\x9e\\xcfo\\xbf\\xa3j\\x8fH1\\'7\\xc4\\x91v\\xd1_\\xec\\xe4\\xe1\\x1f\\xcb\\xd5\\xbd\\xf43\\x0c\\'\"\\x04\\xa5\\xa2\\x0f\\xd0\\x05>+\\xb1 Xe1:t2:#K1:y1:re'\n```\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/bashkirtsevich-llc/aioudp", "keywords": "UDP asyncio UDPserver throttling throttler", "license": "GPL3 License", "maintainer": "", "maintainer_email": "", "name": "aio-udp-server", "package_url": "https://pypi.org/project/aio-udp-server/", "platform": "", "project_url": "https://pypi.org/project/aio-udp-server/", "project_urls": { "Homepage": "https://github.com/bashkirtsevich-llc/aioudp" }, "release_url": "https://pypi.org/project/aio-udp-server/0.0.7/", "requires_dist": null, "requires_python": ">=3.6.*", "summary": "Asyncio UDP server with traffic throttling", "version": "0.0.7", "yanked": false, "yanked_reason": null }, "last_serial": 10872898, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "2892d7fb664533e1391d3581ee2d4ca3", "sha256": "12ae2b77554c4c0e359b3f04eebf3b4fafffcda9000b0a81d9d24c5ba19275c5" }, "downloads": -1, "filename": "aio_udp_server-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2892d7fb664533e1391d3581ee2d4ca3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.*", "size": 18382, "upload_time": "2019-06-04T11:40:27", "upload_time_iso_8601": "2019-06-04T11:40:27.783776Z", "url": "https://files.pythonhosted.org/packages/18/b7/b7dde97f3d91dd5b43c88ccb8d5e31637251d3bec64b83244c0a1463bd6f/aio_udp_server-0.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1f5e712ce7429d0c6b52ff27ae30d8b2", "sha256": "eda4060b4e2110e7fe9fcd3eb59253f9e1872a6f32ae2c3465efb7078bb7565d" }, "downloads": -1, "filename": "aio-udp-server-0.0.1.tar.gz", "has_sig": false, "md5_digest": "1f5e712ce7429d0c6b52ff27ae30d8b2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.*", "size": 5962, "upload_time": "2019-06-04T11:40:29", "upload_time_iso_8601": "2019-06-04T11:40:29.622279Z", "url": "https://files.pythonhosted.org/packages/0d/a8/9223fc2d71453b162fc18b54d8944685d505bb6357cc39156e9167d36936/aio-udp-server-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "fb2c3890bc5c861c9f79935f8850ebc4", "sha256": "0821676c39ed553be2d7c1f5de045ae05d1c077b3165221ec606fa8ad4753605" }, "downloads": -1, "filename": "aio_udp_server-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "fb2c3890bc5c861c9f79935f8850ebc4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.*", "size": 18414, "upload_time": "2019-06-05T07:57:16", "upload_time_iso_8601": "2019-06-05T07:57:16.147543Z", "url": "https://files.pythonhosted.org/packages/07/f3/3452554f0a4d59036a4b7eab2f472c1a5002d82f5aac62ce19cc21097a7d/aio_udp_server-0.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0ab206b964f1c799c4929f3f773822a6", "sha256": "3ccc69859a0f9ffb3d9c1cbf17ed7bd178d4ec4ee0da80de264fb46e032721b0" }, "downloads": -1, "filename": "aio-udp-server-0.0.2.tar.gz", "has_sig": false, "md5_digest": "0ab206b964f1c799c4929f3f773822a6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.*", "size": 5995, "upload_time": "2019-06-05T07:57:17", "upload_time_iso_8601": "2019-06-05T07:57:17.659868Z", "url": "https://files.pythonhosted.org/packages/2b/d6/80a41bab8f6ae57376e2fb947d257935ee019f1f63623c76eb170a32ed16/aio-udp-server-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "6b174794d66bd645811f970bddf6796b", "sha256": "2eecd86e247728fe0ccc41242a0f443c16ffa0f9ffa44c0de50cef3ec4d23367" }, "downloads": -1, "filename": "aio_udp_server-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "6b174794d66bd645811f970bddf6796b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.*", "size": 18431, "upload_time": "2019-07-19T15:39:05", "upload_time_iso_8601": "2019-07-19T15:39:05.526879Z", "url": "https://files.pythonhosted.org/packages/82/ae/45d02c466e4e7b389a61431a2a04cb1629a4699446cc6c60f01c88f3b06e/aio_udp_server-0.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e8b067e4d8a006de13790fb48423734f", "sha256": "e99e3a5da2883a3e23e48b8d14998d42e88acafe07c9ce54f78f4045c2e3985d" }, "downloads": -1, "filename": "aio-udp-server-0.0.3.tar.gz", "has_sig": false, "md5_digest": "e8b067e4d8a006de13790fb48423734f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.*", "size": 6013, "upload_time": "2019-07-19T15:39:06", "upload_time_iso_8601": "2019-07-19T15:39:06.868713Z", "url": "https://files.pythonhosted.org/packages/19/57/691cb2c7f32e200577dfb7aa0c1a82fda91694ad9676a47003b78360dbb1/aio-udp-server-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "a47dc7ec311610a310ee56e9a99efc98", "sha256": "f76abb2fa83b2c0cce238de510214a58ea7ce1f8d0a28af313501548d04b950b" }, "downloads": -1, "filename": "aio_udp_server-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a47dc7ec311610a310ee56e9a99efc98", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.*", "size": 18707, "upload_time": "2019-07-26T07:14:42", "upload_time_iso_8601": "2019-07-26T07:14:42.858610Z", "url": "https://files.pythonhosted.org/packages/e1/79/c764b58103cd35eb9b1cffa8d1e6fc454808c804fc32feb7dfb4ba79e912/aio_udp_server-0.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1b90ffbfcb5cad648f31f828c15ed5e1", "sha256": "6f3298e7f49c966c63fe7528a017a9c8529e6406b9bb914fb21f19b01a3d81d2" }, "downloads": -1, "filename": "aio-udp-server-0.0.4.tar.gz", "has_sig": false, "md5_digest": "1b90ffbfcb5cad648f31f828c15ed5e1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.*", "size": 6123, "upload_time": "2019-07-26T07:14:44", "upload_time_iso_8601": "2019-07-26T07:14:44.414952Z", "url": "https://files.pythonhosted.org/packages/c7/1e/8f2389cdad3ac04ca93d4827044a9cc8db66597b5299993082c52e9dc737/aio-udp-server-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "7f716367e15ec684e233619e5ab45473", "sha256": "304f3047d9dc867a276b67efd6affcd16c9341dc0cc92826c37280d3d23ad953" }, "downloads": -1, "filename": "aio_udp_server-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "7f716367e15ec684e233619e5ab45473", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.*", "size": 18724, "upload_time": "2019-10-31T06:36:50", "upload_time_iso_8601": "2019-10-31T06:36:50.058782Z", "url": "https://files.pythonhosted.org/packages/19/a2/1af55219f40311a89f41c2bf867b4fbff86ef4cc53ac0023695485cbee4a/aio_udp_server-0.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5e655cef2242319647cde0644810b088", "sha256": "b549af08d29307ded46456c0c4bd7b0af88a1c4a025f20c167e873596d39f8cb" }, "downloads": -1, "filename": "aio-udp-server-0.0.5.tar.gz", "has_sig": false, "md5_digest": "5e655cef2242319647cde0644810b088", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.*", "size": 6141, "upload_time": "2019-10-31T06:36:51", "upload_time_iso_8601": "2019-10-31T06:36:51.649958Z", "url": "https://files.pythonhosted.org/packages/c1/0e/41a95d0b01d290404f5106fed764ccdc7125d4f5eaec1312ed8f97c82ba8/aio-udp-server-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "883e10d8b388a49534f4d7755f4dd7f2", "sha256": "30ef082e0f728ed451b8a6f2870d2b7c2d8b8c0a86f7766c11a31b0449a4ff21" }, "downloads": -1, "filename": "aio_udp_server-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "883e10d8b388a49534f4d7755f4dd7f2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.*", "size": 19061, "upload_time": "2020-01-09T15:42:10", "upload_time_iso_8601": "2020-01-09T15:42:10.372453Z", "url": "https://files.pythonhosted.org/packages/b7/a0/b38553fb9282bd184061daf0a6886e32a462b047df08c0e9f29d340970ef/aio_udp_server-0.0.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "12599305db3113aa55039d15e24d8742", "sha256": "b59fb50ab5f1fca7ac914e4594c3f1be2b8ed3936d8819ec2df7dfed2dfe7a78" }, "downloads": -1, "filename": "aio-udp-server-0.0.6.tar.gz", "has_sig": false, "md5_digest": "12599305db3113aa55039d15e24d8742", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.*", "size": 6512, "upload_time": "2020-01-09T15:42:11", "upload_time_iso_8601": "2020-01-09T15:42:11.689894Z", "url": "https://files.pythonhosted.org/packages/15/e2/5b7bc6c74e5903bf4b7c8e1c04ba93f2f651479db48a6d45dfec5d58fc7e/aio-udp-server-0.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "2864826559462911e8666e994f8deb25", "sha256": "b4aadd76814347b4801e47798bdaae2c2d680cc21ae40cd6d86c33ed2999055a" }, "downloads": -1, "filename": "aio_udp_server-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "2864826559462911e8666e994f8deb25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.*", "size": 19154, "upload_time": "2021-07-10T08:21:53", "upload_time_iso_8601": "2021-07-10T08:21:53.766560Z", "url": "https://files.pythonhosted.org/packages/f3/c1/e7aa5cab2fcb3d532270c3b4e1b0aceea3fdda1bb5971cd34e623f75f3ea/aio_udp_server-0.0.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f35e17da2f64c31606dd433eea66c588", "sha256": "e69bf1bca4bf40a46fc19d2a856106faf20309a83424d6fb162ac47cb2c4f674" }, "downloads": -1, "filename": "aio-udp-server-0.0.7.tar.gz", "has_sig": false, "md5_digest": "f35e17da2f64c31606dd433eea66c588", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.*", "size": 18931, "upload_time": "2021-07-10T08:21:54", "upload_time_iso_8601": "2021-07-10T08:21:54.974989Z", "url": "https://files.pythonhosted.org/packages/43/fd/aab21755dbd0f7f15435beda77ff388a68e27ec9e87b88e5467f57a7094b/aio-udp-server-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2864826559462911e8666e994f8deb25", "sha256": "b4aadd76814347b4801e47798bdaae2c2d680cc21ae40cd6d86c33ed2999055a" }, "downloads": -1, "filename": "aio_udp_server-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "2864826559462911e8666e994f8deb25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.*", "size": 19154, "upload_time": "2021-07-10T08:21:53", "upload_time_iso_8601": "2021-07-10T08:21:53.766560Z", "url": "https://files.pythonhosted.org/packages/f3/c1/e7aa5cab2fcb3d532270c3b4e1b0aceea3fdda1bb5971cd34e623f75f3ea/aio_udp_server-0.0.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f35e17da2f64c31606dd433eea66c588", "sha256": "e69bf1bca4bf40a46fc19d2a856106faf20309a83424d6fb162ac47cb2c4f674" }, "downloads": -1, "filename": "aio-udp-server-0.0.7.tar.gz", "has_sig": false, "md5_digest": "f35e17da2f64c31606dd433eea66c588", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.*", "size": 18931, "upload_time": "2021-07-10T08:21:54", "upload_time_iso_8601": "2021-07-10T08:21:54.974989Z", "url": "https://files.pythonhosted.org/packages/43/fd/aab21755dbd0f7f15435beda77ff388a68e27ec9e87b88e5467f57a7094b/aio-udp-server-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }