{ "info": { "author": "Jack Robison", "author_email": "jackrobison@lbry.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Topic :: Communications :: File Sharing", "Topic :: System :: Networking" ], "description": "[![Build Status](https://github.com/lbryio/aioupnp/workflows/CI/badge.svg)\n[![codecov](https://codecov.io/gh/lbryio/aioupnp/branch/master/graph/badge.svg)](https://codecov.io/gh/lbryio/aioupnp)\n[![PyPI version](https://badge.fury.io/py/aioupnp.svg)](https://badge.fury.io/py/aioupnp)\n[![Python 3.6](https://img.shields.io/badge/python-3.6-blue.svg)](https://www.python.org/downloads/release/python-360/)\n[![Python 3.7](https://img.shields.io/badge/python-3.7-blue.svg)](https://www.python.org/downloads/release/python-370/)\n[![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-380/)\n\n# UPnP for asyncio\n\n`aioupnp` is a python 3.6-8 library and command line tool to interact with UPnP gateways using asyncio. `aioupnp` requires the `netifaces` and `defusedxml` modules.\n\n## Supported devices\n![img](https://i.imgur.com/JtO4glP.png)\n\n## Installation\n\nVerify python is version 3.6-8\n```\npython --version\n```\n\n#### Installation for normal usage\n```\npip install aioupnp\n```\n\n#### Installation for development\n```\ngit clone https://github.com/lbryio/aioupnp.git\ncd aioupnp\npip install -e .\n```\n\n\n## Usage\n\n```\naioupnp [-h] [--debug_logging] [--interface=] [--gateway_address=]\n [--lan_address=] [--timeout=]\n [(--=)...]\n command [--=]...\n```\n\n\n#### Commands\n* `help`\n* `get_external_ip`\n* `m_search`\n* `add_port_mapping`\n* `get_port_mapping_by_index`\n* `get_redirects`\n* `get_specific_port_mapping`\n* `delete_port_mapping`\n* `get_next_mapping`\n* `gather_debug_info`\n\n#### To get the documentation for a command\n\n aioupnp help get_external_ip\n\n#### To get the external ip address\n\n aioupnp get_external_ip\n\n#### To list the active port mappings on the gateway\n\n aioupnp get_redirects\n\n#### To set up a TCP port mapping\n \n aioupnp add_port_mapping --external_port=1234 --internal_port=1234 --lan_address= --description=test --protocol=TCP\n\n#### To delete a TCP port mapping\n\n aioupnp delete_port_mapping --external_port=1234 --protocol=TCP\n\n#### M-Search headers\nUPnP uses a multicast protocol (SSDP) to locate the gateway. Gateway discovery is automatic by default, but you may provide specific headers for the search to use to override automatic discovery.\n\nIf m-search headers are provided as keyword arguments then all of the headers to be used must be provided, in the order they are to be used. For example:\n\n aioupnp --HOST=239.255.255.250:1900 --MAN=\\\"ssdp:discover\\\" --MX=1 --ST=upnp:rootdevice m_search\n\n#### Using non-default network interfaces\nBy default, the network device will be automatically discovered. The interface may instead be specified with the `--interface`, provided before the command to be run. The gateway used on the interface network may be specified with the `--gateway_address` argument.\n\n aioupnp --interface=wlp4s0 --gateway_address=192.168.1.6 m_search\n\n\n#### Example usage from python\n\n from aioupnp.upnp import UPnP\n\n async def main():\n upnp = await UPnP.discover()\n print(await upnp.get_external_ip())\n print(await upnp.get_redirects())\n\n print(\"adding a port mapping\")\n await upnp.add_port_mapping(1234, 'TCP', 1234, upnp.lan_address, 'test mapping')\n print(await upnp.get_redirects())\n\n print(\"deleting the port mapping\")\n await upnp.delete_port_mapping(1234, 'TCP')\n print(await upnp.get_redirects())\n\n\n asyncio.run(main())\n\n\n## Troubleshooting\nIf `aioupnp` is failing with m-search timeouts this means the UPnP gateway (the router) isn't being found at all. To see if this error is expected try running m_search with debug logging, which will print out the packets sent and received:\n\n aioupnp --debug_logging m_search\n\nIf you only see packets being sent or the replies are only from devices that aren't your router (smart devices, speakers, etc), then there are three options:\n* your router does not support UPnP (this is unlikely)\n* UPnP is turned off in the web gui for your router (more likely)\n* `aioupnp` has a bug (very likely if you don't see your router manufacturer doing well in the supported devices table)\n\nIf you see replies from the router but it still fails, then it's likely a bug in aioupnp.\n\nIf there are no replies and UPnP is certainly turned on, then a local firewall is the likely culprit.\n\n\n## Sending a bug report\n\nIf it still doesn't work, you can send a bug report using an included script. This script will try finding the UPnP gateway using `aioupnp` as well as `miniupnpc` and then try add and remove a port mapping using each library. The script does this while capturing the packets sent/received, which makes figuring out what went wrong possible. The script will create a file with this packet capture (`aioupnp-bug-report.json`) and automatically send it.\n\nNote: the bug report script currently does not work on MacOS\n```\ngit clone https://github.com/lbryio/aioupnp.git\ncd aioupnp\npython3 -m pip install -e .\n\npython3 -m pip install --user certifi aiohttp miniupnpc\nsudo -E python3 generate_bug_report.py\n```\n\n## License\n\nThis project is MIT licensed. For the full license, see [LICENSE](LICENSE).\n\n## Contact\n\nThe primary contact for this project is [@jackrobison](mailto:jackrobison@lbry.com)", "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/lbryio/aioupnp", "keywords": "upnp asyncio ssdp network scpd", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "aioupnp", "package_url": "https://pypi.org/project/aioupnp/", "platform": "", "project_url": "https://pypi.org/project/aioupnp/", "project_urls": { "Homepage": "https://github.com/lbryio/aioupnp" }, "release_url": "https://pypi.org/project/aioupnp/0.0.18/", "requires_dist": null, "requires_python": "", "summary": "UPnP for asyncio", "version": "0.0.18", "yanked": false, "yanked_reason": null }, "last_serial": 8566621, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "13e653e9f61a92cc054e105b6d34a119", "sha256": "89ba0a6f3c58e1fcea09fc616a73bfd5f0ca69cfb158bbacbffcb256d7ec50fb" }, "downloads": -1, "filename": "aioupnp-0.0.10.tar.gz", "has_sig": false, "md5_digest": "13e653e9f61a92cc054e105b6d34a119", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29117, "upload_time": "2018-10-30T17:44:03", "upload_time_iso_8601": "2018-10-30T17:44:03.658030Z", "url": "https://files.pythonhosted.org/packages/e3/ec/1c10824509e273ff902a67f0aaa5b7c9f5fa80a49b24014416fd598caa41/aioupnp-0.0.10.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "71cb9ed708ee262b45eceb6bee4513b6", "sha256": "f42dc0bfca91b4a47e0bcba1085c57717e303a66d6c6fb5abb7db2bfeac95ef2" }, "downloads": -1, "filename": "aioupnp-0.0.11.tar.gz", "has_sig": false, "md5_digest": "71cb9ed708ee262b45eceb6bee4513b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29569, "upload_time": "2018-11-08T15:42:33", "upload_time_iso_8601": "2018-11-08T15:42:33.471981Z", "url": "https://files.pythonhosted.org/packages/98/d6/bed961ccbd85debd9a0104f7c781753e5166698d43e2940249fc1eb7786a/aioupnp-0.0.11.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "5e23a21474042b167ab9594723546ade", "sha256": "f4effc1da4eb8f5c1c60a042f19622f4ab3d5061d60e13be3b0bd8089569dfe8" }, "downloads": -1, "filename": "aioupnp-0.0.12.tar.gz", "has_sig": false, "md5_digest": "5e23a21474042b167ab9594723546ade", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28485, "upload_time": "2019-02-15T23:21:35", "upload_time_iso_8601": "2019-02-15T23:21:35.648176Z", "url": "https://files.pythonhosted.org/packages/14/6e/f0f18ac96adb6c81bad574e6fd822a122f76647e75a86a30697a980ed0d2/aioupnp-0.0.12.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "c4de0d343455b4c5d8d6ed5d823fb3b1", "sha256": "5652d05f15b585aedea2fdd51930288c00f60d1f751755689a7799a77a97b5c3" }, "downloads": -1, "filename": "aioupnp-0.0.13.tar.gz", "has_sig": false, "md5_digest": "c4de0d343455b4c5d8d6ed5d823fb3b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34649, "upload_time": "2019-06-23T05:42:50", "upload_time_iso_8601": "2019-06-23T05:42:50.102019Z", "url": "https://files.pythonhosted.org/packages/af/21/27bf6ee40ffc6866079b8eda000947baf9fd1a3f69f6b53423c4beb92e34/aioupnp-0.0.13.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "6a4064a9525f5ce32416e33d10d0eef8", "sha256": "46df78c75d94bd94edab5a9cc8fbf8de3dd3736964945cad35c755486704307d" }, "downloads": -1, "filename": "aioupnp-0.0.14.tar.gz", "has_sig": false, "md5_digest": "6a4064a9525f5ce32416e33d10d0eef8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34989, "upload_time": "2019-08-19T14:50:23", "upload_time_iso_8601": "2019-08-19T14:50:23.411656Z", "url": "https://files.pythonhosted.org/packages/3d/3f/99e392aa36ff6a50fa0b437782b8d5b84b5e29549570ae49d0839fcc72a6/aioupnp-0.0.14.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "12a1d32d6961614716ab47cb2434108c", "sha256": "f253461d9d2d1f4321ae2ec91885bcb6d5fad5c60f4d272d626b97cc26d7ddf7" }, "downloads": -1, "filename": "aioupnp-0.0.15.tar.gz", "has_sig": false, "md5_digest": "12a1d32d6961614716ab47cb2434108c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34719, "upload_time": "2019-10-28T14:16:31", "upload_time_iso_8601": "2019-10-28T14:16:31.130775Z", "url": "https://files.pythonhosted.org/packages/c1/4f/bbaa5e3bbcea4f635526cafe4276a1510e7a30d44b682b1e1eff1eddc464/aioupnp-0.0.15.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "6ff21ca347536c8da57b25e475713140", "sha256": "2d8f9878d4ca7edc0992efe9639fcdf2b5bbeda6b4811c4d2c9405ccd8df6a00" }, "downloads": -1, "filename": "aioupnp-0.0.16.tar.gz", "has_sig": false, "md5_digest": "6ff21ca347536c8da57b25e475713140", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34990, "upload_time": "2019-11-15T15:53:11", "upload_time_iso_8601": "2019-11-15T15:53:11.703811Z", "url": "https://files.pythonhosted.org/packages/30/92/c92a78bd0e1d3b829ae92ad6407ff575ef8833666e4b4abd6dedc2062593/aioupnp-0.0.16.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.17": [ { "comment_text": "", "digests": { "md5": "4bf7cbc118b7b70e43271662741af936", "sha256": "6218762efc469ca6357b0edf4cfb812ce31d2b3e8f8b136782f5865c55082c54" }, "downloads": -1, "filename": "aioupnp-0.0.17.tar.gz", "has_sig": false, "md5_digest": "4bf7cbc118b7b70e43271662741af936", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35096, "upload_time": "2020-01-16T20:36:20", "upload_time_iso_8601": "2020-01-16T20:36:20.489839Z", "url": "https://files.pythonhosted.org/packages/88/3f/ba2048412304446e136e1fc8f5a677d246a198f56c420952d51613e856b6/aioupnp-0.0.17.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.18": [ { "comment_text": "", "digests": { "md5": "49fea8768503109b936b166adf4b997b", "sha256": "7871b0667dbce3a631fb19ac9be2e86056fdaac57d08783d68e6a3dcfdea946b" }, "downloads": -1, "filename": "aioupnp-0.0.18.tar.gz", "has_sig": false, "md5_digest": "49fea8768503109b936b166adf4b997b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37995, "upload_time": "2020-11-03T00:31:48", "upload_time_iso_8601": "2020-11-03T00:31:48.010114Z", "url": "https://files.pythonhosted.org/packages/b5/51/87076d97a1c55b28fe19f059143dcfa91791d51ab8a6c85f6c40e0b7404e/aioupnp-0.0.18.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "8ceb99f8eee646494e67450a3c4e104f", "sha256": "6d5595619a3df6f1303cc78751a95d6e6fd106a2f333ff080f58ca5406023ed9" }, "downloads": -1, "filename": "aioupnp-0.0.2.tar.gz", "has_sig": false, "md5_digest": "8ceb99f8eee646494e67450a3c4e104f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23253, "upload_time": "2018-10-19T14:37:35", "upload_time_iso_8601": "2018-10-19T14:37:35.929399Z", "url": "https://files.pythonhosted.org/packages/03/41/a447299764b7ffb2b903cdad6b9bcd220f64007fdc4cf48d9dd4806f00ac/aioupnp-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2a1": [ { "comment_text": "", "digests": { "md5": "4f21dec9579193393e6398a5accaeb88", "sha256": "474324d5ddd206ca854f9e9418bfca74b18fc2c897282bbd027ebb438c6bb7cb" }, "downloads": -1, "filename": "aioupnp-0.0.2a1.tar.gz", "has_sig": false, "md5_digest": "4f21dec9579193393e6398a5accaeb88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15438, "upload_time": "2018-10-08T04:49:42", "upload_time_iso_8601": "2018-10-08T04:49:42.543164Z", "url": "https://files.pythonhosted.org/packages/db/88/58eef0b2e8131ef26fd12b17f09502c61ac84f2c188b81f5068e41cf8bf2/aioupnp-0.0.2a1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2a2": [ { "comment_text": "", "digests": { "md5": "ca522f3760ab33306b668204182d111a", "sha256": "25321535ee046f32fccab6b5415ef7959dde5f07a7bc804cc033babd97c66256" }, "downloads": -1, "filename": "aioupnp-0.0.2a2.tar.gz", "has_sig": false, "md5_digest": "ca522f3760ab33306b668204182d111a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20939, "upload_time": "2018-10-16T13:46:59", "upload_time_iso_8601": "2018-10-16T13:46:59.499350Z", "url": "https://files.pythonhosted.org/packages/4b/8c/43576078998aa7906718504d3598c2aeb3522a8e6b59242fd88e646c71a8/aioupnp-0.0.2a2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2a3": [ { "comment_text": "", "digests": { "md5": "a967efcf2cd0a099cdee5666bb93ca7d", "sha256": "3710d21bb58125b012766f3c4b783874e88a8a5d77f2ab87ac68b3694ceb5f12" }, "downloads": -1, "filename": "aioupnp-0.0.2a3.tar.gz", "has_sig": false, "md5_digest": "a967efcf2cd0a099cdee5666bb93ca7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20955, "upload_time": "2018-10-17T14:16:27", "upload_time_iso_8601": "2018-10-17T14:16:27.572418Z", "url": "https://files.pythonhosted.org/packages/a1/80/70ebd1d2b73cff5adb833fa3210d44e6aff9a4f056c9581d318bf141c135/aioupnp-0.0.2a3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2a4": [ { "comment_text": "", "digests": { "md5": "da75e170dc5476a9df3077dfa417ae5e", "sha256": "b91b01b6a63f3b50d55019bf8a2ea45232c076429fe671c856746b6ea92bcfe0" }, "downloads": -1, "filename": "aioupnp-0.0.2a4.tar.gz", "has_sig": false, "md5_digest": "da75e170dc5476a9df3077dfa417ae5e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21455, "upload_time": "2018-10-17T23:01:27", "upload_time_iso_8601": "2018-10-17T23:01:27.203207Z", "url": "https://files.pythonhosted.org/packages/5c/74/821b6ccba0b9d53ec6880ba56d3c1fe099de2ff76d7e20195b1ae1cdadd0/aioupnp-0.0.2a4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2a5": [ { "comment_text": "", "digests": { "md5": "a4b25f6f71b1f83d130b6fb4ea71f696", "sha256": "618c53d454653aa23d46feaae973780c556c61531ba7319e027eecec43ddfd4f" }, "downloads": -1, "filename": "aioupnp-0.0.2a5.tar.gz", "has_sig": false, "md5_digest": "a4b25f6f71b1f83d130b6fb4ea71f696", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21987, "upload_time": "2018-10-18T01:17:22", "upload_time_iso_8601": "2018-10-18T01:17:22.526840Z", "url": "https://files.pythonhosted.org/packages/a3/86/8531b2a2a152459de324839b5e62c4d579f71ddca2756f47249e61af6ede/aioupnp-0.0.2a5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2a6": [ { "comment_text": "", "digests": { "md5": "2179cc1ce28146283bdb9c6f2e8bf90f", "sha256": "5351bd24804fa1607d970f29c7412e1cba90811dd69aca240c8748c716b9aaa7" }, "downloads": -1, "filename": "aioupnp-0.0.2a6.tar.gz", "has_sig": false, "md5_digest": "2179cc1ce28146283bdb9c6f2e8bf90f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22041, "upload_time": "2018-10-18T02:46:59", "upload_time_iso_8601": "2018-10-18T02:46:59.401645Z", "url": "https://files.pythonhosted.org/packages/4d/32/e787db0d3e3f1d13f88d15afd9330a4b8ddab0239eee738c69cbcdd87817/aioupnp-0.0.2a6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2a7": [ { "comment_text": "", "digests": { "md5": "b13e60e1e5f5edf8096afb8ce6fb0a8e", "sha256": "39453bf17c30ac926b452b648dece327bebd2e1b6b8b4502821845a97c2b1535" }, "downloads": -1, "filename": "aioupnp-0.0.2a7.tar.gz", "has_sig": false, "md5_digest": "b13e60e1e5f5edf8096afb8ce6fb0a8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21980, "upload_time": "2018-10-18T04:12:40", "upload_time_iso_8601": "2018-10-18T04:12:40.412877Z", "url": "https://files.pythonhosted.org/packages/32/2d/8a1dc68f0c5ae05c2de87b471f1eff7d8636ee9c97d6a89e6889291629ba/aioupnp-0.0.2a7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2a8": [ { "comment_text": "", "digests": { "md5": "5b59c55c229f2cad3f2731e4134d7ed8", "sha256": "68819b361419ff75784942d02485a5d4460ac484c0ba92f49891ee043c1bf761" }, "downloads": -1, "filename": "aioupnp-0.0.2a8.tar.gz", "has_sig": false, "md5_digest": "5b59c55c229f2cad3f2731e4134d7ed8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23182, "upload_time": "2018-10-18T16:59:18", "upload_time_iso_8601": "2018-10-18T16:59:18.800827Z", "url": "https://files.pythonhosted.org/packages/e5/d3/41e61ee988665359f03d1c147b3e57e7303fff9cf93b26f23e34a0a68223/aioupnp-0.0.2a8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2a9": [ { "comment_text": "", "digests": { "md5": "1f95732b5ceae42ab101c51a71596586", "sha256": "da1032df2ad5b2823f15138256c2b17c4a5116265e8ed6c89a7d78d5a3e99cd0" }, "downloads": -1, "filename": "aioupnp-0.0.2a9.tar.gz", "has_sig": false, "md5_digest": "1f95732b5ceae42ab101c51a71596586", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23259, "upload_time": "2018-10-18T19:11:25", "upload_time_iso_8601": "2018-10-18T19:11:25.382208Z", "url": "https://files.pythonhosted.org/packages/01/be/610ef89476c2c6ed9dcc9710489d8af2225839073688212e165f8206d0d0/aioupnp-0.0.2a9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "241a243d8bef32346e22b1377569fc5e", "sha256": "9f50a3dda3376cea2bdb36f9afcdc17a3e68120076b15bf0e312aa70188db239" }, "downloads": -1, "filename": "aioupnp-0.0.3.tar.gz", "has_sig": false, "md5_digest": "241a243d8bef32346e22b1377569fc5e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23251, "upload_time": "2018-10-19T14:53:24", "upload_time_iso_8601": "2018-10-19T14:53:24.656327Z", "url": "https://files.pythonhosted.org/packages/6a/54/3334502d26c9ed3c77f116eb83f6eed51f7359032769caa2bfd1d1a4d996/aioupnp-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "cebc55545632f67038662746f6833479", "sha256": "ac17493d771d2d4ce6618ed007d60de3b9eb5626fef050431f301bfca4d59236" }, "downloads": -1, "filename": "aioupnp-0.0.4.tar.gz", "has_sig": false, "md5_digest": "cebc55545632f67038662746f6833479", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23346, "upload_time": "2018-10-19T16:25:11", "upload_time_iso_8601": "2018-10-19T16:25:11.518922Z", "url": "https://files.pythonhosted.org/packages/7b/40/e6e5aad71826bc21f867b28063540906d235018418aa13bf0b22e77a465e/aioupnp-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "ab3f8a037311832bb9dc56b479726ce1", "sha256": "2b9a43bc8bb8d6178b4750477669fe1ac2516eee68aa80aa2173d397a6437923" }, "downloads": -1, "filename": "aioupnp-0.0.5.tar.gz", "has_sig": false, "md5_digest": "ab3f8a037311832bb9dc56b479726ce1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23514, "upload_time": "2018-10-19T20:25:58", "upload_time_iso_8601": "2018-10-19T20:25:58.844053Z", "url": "https://files.pythonhosted.org/packages/57/89/5f1ab9877a305401290c50fb23fbee59c70fb788829ff4456779830dad74/aioupnp-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "9c2bc3c6a11dd6462dc0b70f23f3e32e", "sha256": "feb22790da30a3d55f0bf2baabc4805a0bf1526f4c5804f0d2ba3df9caaeddb8" }, "downloads": -1, "filename": "aioupnp-0.0.6.tar.gz", "has_sig": false, "md5_digest": "9c2bc3c6a11dd6462dc0b70f23f3e32e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26430, "upload_time": "2018-10-22T13:07:17", "upload_time_iso_8601": "2018-10-22T13:07:17.954780Z", "url": "https://files.pythonhosted.org/packages/56/2f/cca291ee176ad8ec51ac55e6a3a6ef812d8806d7875634dbbcca3952cc09/aioupnp-0.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "afa363dfdb947c489f7ed84456914ede", "sha256": "67bd7a9d3db5fa8de44a4f50f2715ab6e89cb19ff76cdc914df7e7a8bb2cbe8c" }, "downloads": -1, "filename": "aioupnp-0.0.7.tar.gz", "has_sig": false, "md5_digest": "afa363dfdb947c489f7ed84456914ede", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28758, "upload_time": "2018-10-26T16:46:55", "upload_time_iso_8601": "2018-10-26T16:46:55.160561Z", "url": "https://files.pythonhosted.org/packages/64/13/ae18b2f425836973e93f24f3cbfb942ada701e671e23044017bc70fa0151/aioupnp-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "a1123817aaa744d15736235ea1e3267c", "sha256": "6d18346e4b57ba1b327dfe7d7fba602f70b6751011a76a1e2313cbb6f96ff67b" }, "downloads": -1, "filename": "aioupnp-0.0.8.tar.gz", "has_sig": false, "md5_digest": "a1123817aaa744d15736235ea1e3267c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29187, "upload_time": "2018-10-29T17:17:37", "upload_time_iso_8601": "2018-10-29T17:17:37.883726Z", "url": "https://files.pythonhosted.org/packages/82/62/5fe8f44770bdf15867226df4cc2a60e0f52edb4f820c9b13cc0deee38f29/aioupnp-0.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "ab879bdddc2894a047445fb5e010d7a0", "sha256": "3bf07eb24ec46a80448d68d53c13a9b75709ff15834357f064cd0b67dd1d3986" }, "downloads": -1, "filename": "aioupnp-0.0.9.tar.gz", "has_sig": false, "md5_digest": "ab879bdddc2894a047445fb5e010d7a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29181, "upload_time": "2018-10-29T18:43:00", "upload_time_iso_8601": "2018-10-29T18:43:00.118804Z", "url": "https://files.pythonhosted.org/packages/6a/0d/2f3df8d16d5810f45fc5c08aee802d31d39dd5ee19dc43f271b879db2d82/aioupnp-0.0.9.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "49fea8768503109b936b166adf4b997b", "sha256": "7871b0667dbce3a631fb19ac9be2e86056fdaac57d08783d68e6a3dcfdea946b" }, "downloads": -1, "filename": "aioupnp-0.0.18.tar.gz", "has_sig": false, "md5_digest": "49fea8768503109b936b166adf4b997b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37995, "upload_time": "2020-11-03T00:31:48", "upload_time_iso_8601": "2020-11-03T00:31:48.010114Z", "url": "https://files.pythonhosted.org/packages/b5/51/87076d97a1c55b28fe19f059143dcfa91791d51ab8a6c85f6c40e0b7404e/aioupnp-0.0.18.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }