{ "info": { "author": "Xin Huang", "author_email": "xinhuang.abc@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "************\npyupnp-async\n************\n\nA Python library for UPnP operations using asyncio.\n\nCurrently this library only provided convenience for port forwarding using UPnP. For other UPnP features, it is\npossible, but manual construction of request parameters is needed. (I.E. the SOUP request XML.)\n\nInstallation\n============\n\nTo install the latest development version, run:\n\n::\n\n git clone https://github.com/xinhuang/pyupnp-async.git\n cd pyupnp-async\n python setup.py install\n\n*This package is not on pypi.*\n\nQuick Tutorial\n==============\n\nCreate a port forwarding using UPnP:\n\n.. code:: python\n\n from pyupnp_async import msearch_first\n \n async def forward_port(local_ip, local_port, ext_port, protocol):\n resp = await msearch_first('urn:schemas-upnp-org:device:InternetGatewayDevice:1')\n device = await resp.get_device()\n service = device.find_first_service('urn:schemas-upnp-org:service:WANIPConnection:1')\n ext_ip = await service.get_external_ip_address()\n try:\n await service.add_port_mapping(local_port, ext_port, local_ip, protocol)\n print('Data to external Port {} will be forwarded to {}:{}'.format(ext_port, local_ip, local_port))\n except UpnpSoapError as e:\n print(e)\n\nDelete a port forwarding using UPnP:\n\n.. code:: python\n\n from pyupnp_async import msearch_first\n \n async def stop_forwarding(ext_port, protocol):\n resp = await msearch_first('urn:schemas-upnp-org:device:InternetGatewayDevice:1')\n device = await resp.get_device()\n service = device.find_first_service('urn:schemas-upnp-org:service:WANIPConnection:1')\n ext_ip = await service.get_external_ip_address()\n try:\n await service.delete_port_mapping(ext_port, protocol)\n print('Data to external Port {} will not be forwarded any more.')\n except UpnpSoapError as e:\n print(e)\n\nAPI Reference\n=============\n\n``msearch_first(search_target='upnp:rootdevice', max_wait=2, loop=None)``\n\nSearches for UPnP target specified, and returns the first responsed target.\n\n :Args:\n * ``search_target``: Search target. For details please reference to UPnP spec.\n * ``max_wait``: Specify max waiting time in seconds.\n * ``loop``: Specify the event loop to be used. Default is ``asyncio.get_event_loop()``\n\n``msearch_first(search_target='upnp:rootdevice', max_wait=2, loop=None)``\n\nSearches for UPnP target specified, and returns all targets responded in given time range as an async iterator.\n\n :Args:\n * ``search_target``: Search target. For details please reference to UPnP spec.\n * ``max_wait``: Specify max waiting time in seconds.\n * ``loop``: Specify the event loop to be used. Default is ``asyncio.get_event_loop()``\n\nLicensing\n=========\n\nThis project is released under the terms of the MIT Open Source License. View\n*LICENSE.txt* for more information.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/xinhuang/pyupnp-async", "keywords": "", "license": "License :: OSI Approved :: MIT License", "maintainer": "", "maintainer_email": "", "name": "pyupnp-async", "package_url": "https://pypi.org/project/pyupnp-async/", "platform": "", "project_url": "https://pypi.org/project/pyupnp-async/", "project_urls": { "Homepage": "https://github.com/xinhuang/pyupnp-async" }, "release_url": "https://pypi.org/project/pyupnp-async/0.1.1.1/", "requires_dist": null, "requires_python": "", "summary": "Python Library for UPnP operations using asyncio", "version": "0.1.1.1" }, "last_serial": 4217770, "releases": { "0.1.0.0": [ { "comment_text": "", "digests": { "md5": "a728fc018f37b6eed9d571bc80974cd0", "sha256": "622094f12f7c772d1327f07981e8b814215f0c6629d1736aca9d434b57987343" }, "downloads": -1, "filename": "pyupnp-async-0.1.0.0.tar.gz", "has_sig": false, "md5_digest": "a728fc018f37b6eed9d571bc80974cd0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6020, "upload_time": "2018-04-03T05:18:12", "url": "https://files.pythonhosted.org/packages/28/66/559ef3c882af8c0fc1b6ec5df8fe8abca323183f1d323714f890347dc39b/pyupnp-async-0.1.0.0.tar.gz" } ], "0.1.0.1": [ { "comment_text": "", "digests": { "md5": "be861120a0ac73defe66bdc3c0f943a2", "sha256": "4ebd24204f44f2bbde38e8ec0fe44597decc95f66d6f6d3feda872751279c2b4" }, "downloads": -1, "filename": "pyupnp-async-0.1.0.1.tar.gz", "has_sig": false, "md5_digest": "be861120a0ac73defe66bdc3c0f943a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6105, "upload_time": "2018-04-03T08:31:32", "url": "https://files.pythonhosted.org/packages/5a/8d/e7ca56d0eb8ea9c68d9bd836c8c60d0ececace7aa587d563d055ac5c3266/pyupnp-async-0.1.0.1.tar.gz" } ], "0.1.0.2": [ { "comment_text": "", "digests": { "md5": "caf558fbff9a7629f98ace73410f5d04", "sha256": "78104cb2161ab281848c287d6185adda5b853cb806c54d757cf409b7f84fc7f9" }, "downloads": -1, "filename": "pyupnp-async-0.1.0.2.tar.gz", "has_sig": false, "md5_digest": "caf558fbff9a7629f98ace73410f5d04", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6146, "upload_time": "2018-04-30T22:56:14", "url": "https://files.pythonhosted.org/packages/40/bb/6910d449afa62b7a8906e72b213fb94c25a1f91214bc383e44a881eff3ba/pyupnp-async-0.1.0.2.tar.gz" } ], "0.1.1.0": [ { "comment_text": "", "digests": { "md5": "b7988b9c3bf5ca36a5114b00fb42271e", "sha256": "7de4b32608457ccc5f54331fcae497c421a0d91394788f21519664bee02640c8" }, "downloads": -1, "filename": "pyupnp_async-0.1.1.0-py3.6.egg", "has_sig": false, "md5_digest": "b7988b9c3bf5ca36a5114b00fb42271e", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 21425, "upload_time": "2018-08-29T06:03:56", "url": "https://files.pythonhosted.org/packages/4c/fc/675c4e507503b1b941f2e59932605b9a1b3f35aeec09f807cf1e66d8da0f/pyupnp_async-0.1.1.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "0c05692a180c5aa2870bf23930293949", "sha256": "0fdbf4123f1410ed98f14f7d6c342fe49310bd124532d20645f3fc6a7d947c6e" }, "downloads": -1, "filename": "pyupnp-async-0.1.1.0.tar.gz", "has_sig": false, "md5_digest": "0c05692a180c5aa2870bf23930293949", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6233, "upload_time": "2018-08-16T13:01:18", "url": "https://files.pythonhosted.org/packages/bb/43/ee0a3b52a2d36d9c04649ed000ab77a2fecb42f852a0b38783b4ffa92569/pyupnp-async-0.1.1.0.tar.gz" } ], "0.1.1.1": [ { "comment_text": "", "digests": { "md5": "ce895a970381b00d4e11eb2c8dd62909", "sha256": "a384818c809841f9efeb8d9e4578599c33efc8675c357d22b9eb3cbe8867d793" }, "downloads": -1, "filename": "pyupnp-async-0.1.1.1.tar.gz", "has_sig": false, "md5_digest": "ce895a970381b00d4e11eb2c8dd62909", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6358, "upload_time": "2018-08-29T06:10:45", "url": "https://files.pythonhosted.org/packages/b1/a4/0f734fb63c26fb449ec647a0b1e251aacdc37d6aba599bc54601d04d38d2/pyupnp-async-0.1.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ce895a970381b00d4e11eb2c8dd62909", "sha256": "a384818c809841f9efeb8d9e4578599c33efc8675c357d22b9eb3cbe8867d793" }, "downloads": -1, "filename": "pyupnp-async-0.1.1.1.tar.gz", "has_sig": false, "md5_digest": "ce895a970381b00d4e11eb2c8dd62909", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6358, "upload_time": "2018-08-29T06:10:45", "url": "https://files.pythonhosted.org/packages/b1/a4/0f734fb63c26fb449ec647a0b1e251aacdc37d6aba599bc54601d04d38d2/pyupnp-async-0.1.1.1.tar.gz" } ] }