{
"info": {
"author": "Stephen Stack",
"author_email": "Stephen.Stack@digi.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 2.7",
"Topic :: Software Development :: Libraries"
],
"description": "Python wpa\\_supplicant Library\n==============================\n\n|Build Status| |Coverage Status| |Code Climate| |Latest Version|\n|License|\n\n- `Full\n Documentation `__\n\nMotivation\n----------\n\nThis library provides an interface to the wpa\\_supplicant D-Bus\ninterface. As of now, there is really no good option for interfacing\nwith wpa\\_supplicant from Python and to go a step further, the existing\nD-Bus libraries are difficult to work with. This library abstracts all\nof that away into a very clean API based on `wpa\\_supplicant D-Bus\ndocumentation `__.\n\nOverview\n--------\n\nThis library is more than just a library that can be used\nprogrammatically, it also serves as a command-line tool for easily using\nwpa\\_supplicant and exercising the library.\n\nHere is a quick example of creating an wireless interface (wlan0) and\nperforming a scan.\n\nWith the library:\n\n.. code:: py\n\n from wpa_supplicant.core import WpaSupplicantDriver\n from twisted.internet.selectreactor import SelectReactor\n import threading\n import time\n\n # Start a simple Twisted SelectReactor\n reactor = SelectReactor()\n threading.Thread(target=reactor.run, kwargs={'installSignalHandlers': 0}).start()\n time.sleep(0.1) # let reactor start\n\n # Start Driver\n driver = WpaSupplicantDriver(reactor)\n\n # Connect to the supplicant, which returns the \"root\" D-Bus object for wpa_supplicant\n supplicant = driver.connect()\n\n # Register an interface w/ the supplicant, this can raise an error if the supplicant\n # already knows about this interface\n interface = supplicant.create_interface('wlan0')\n\n # Issue the scan\n scan_results = interface.scan(block=True)\n for bss in scan_results:\n print bss.get_ssid()\n\nWith the CLI, you can do it in 2 commands:\n\n::\n\n $ wpa create_interface wlan0\n Interface(Path: /fi/w1/wpa_supplicant1/Interfaces/5, Name: wlan0, State: disconnected)\n OK\n $ wpa interface wlan0 scan\n BSS(Path: /fi/w1/wpa_supplicant1/Interfaces/3/BSSs/13, SSID: WINKHUB-107, BSSID: B4:79:A7:17:38:B5, Signal: -75dBm),\n BSS(Path: /fi/w1/wpa_supplicant1/Interfaces/3/BSSs/20, SSID: Stage, BSSID: 04:18:D6:67:2A:9C, Signal: -67dBm),\n BSS(Path: /fi/w1/wpa_supplicant1/Interfaces/3/BSSs/22, SSID: DAP-GUEST, BSSID: 00:07:7D:34:DB:BD, Signal: -73dBm),\n BSS(Path: /fi/w1/wpa_supplicant1/Interfaces/3/BSSs/24, SSID: HaberHive, BSSID: E0:1C:41:B5:6F:D5, Signal: -71dBm),\n BSS(Path: /fi/w1/wpa_supplicant1/Interfaces/3/BSSs/25, SSID: CMLS Guest WiFi, BSSID: 02:18:4A:91:E9:50, Signal: -79dBm),\n BSS(Path: /fi/w1/wpa_supplicant1/Interfaces/3/BSSs/26, SSID: Shout Public, BSSID: 0A:18:D6:67:27:9E, Signal: -77dBm),\n BSS(Path: /fi/w1/wpa_supplicant1/Interfaces/3/BSSs/29, SSID: ThinkTank, BSSID: 00:12:5F:03:AD:B4, Signal: -79dBm)]\n OK\n\nInstallation\n------------\n\n.. code:: sh\n\n $ pip install wpa_supplicant\n\nFeature Coverage Map\n--------------------\n\nOften times adding a command or method to the library is very trivial\nhowever due to the finicky-ness of D-Bus in my experience, it is better\nto have an explicit method in the library that maps to a method in the\nD-Bus interface, even if the implementation is very cookie-cutter.\n\nHere is the current feature coverage:\n\n+-----------------------+---------------------------------+-------------+\n| Object | Method | Supported |\n+=======================+=================================+=============+\n| root | CreateInterface | Yes |\n+-----------------------+---------------------------------+-------------+\n| | RemoveInterface | Yes |\n+-----------------------+---------------------------------+-------------+\n| | GetInterface | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Get (properties) | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Set (properties) | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Register (signal) | Yes |\n+-----------------------+---------------------------------+-------------+\n| Interface | Scan | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Disconnect | Yes |\n+-----------------------+---------------------------------+-------------+\n| | AddNetwork | Yes |\n+-----------------------+---------------------------------+-------------+\n| | RemoveNetwork | Yes |\n+-----------------------+---------------------------------+-------------+\n| | RemoveAllNetworks | Yes |\n+-----------------------+---------------------------------+-------------+\n| | SelectNetwork | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Reassociate | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Reattach | \\* |\n+-----------------------+---------------------------------+-------------+\n| | AddBlob | \\* |\n+-----------------------+---------------------------------+-------------+\n| | RemoveBlob | \\* |\n+-----------------------+---------------------------------+-------------+\n| | GetBlob | \\* |\n+-----------------------+---------------------------------+-------------+\n| | AutoScan | \\* |\n+-----------------------+---------------------------------+-------------+\n| | TDLSDiscover | \\* |\n+-----------------------+---------------------------------+-------------+\n| | TDLSSetup | \\* |\n+-----------------------+---------------------------------+-------------+\n| | TDLSStatus | \\* |\n+-----------------------+---------------------------------+-------------+\n| | TDLSTeardown | \\* |\n+-----------------------+---------------------------------+-------------+\n| | EAPLogoff | \\* |\n+-----------------------+---------------------------------+-------------+\n| | EAPLogon | \\* |\n+-----------------------+---------------------------------+-------------+\n| | NetworkReply | \\* |\n+-----------------------+---------------------------------+-------------+\n| | SetPKCS11EngineAndModulePath | \\* |\n+-----------------------+---------------------------------+-------------+\n| | SignalPoll | \\* |\n+-----------------------+---------------------------------+-------------+\n| | FlushBSS | \\* |\n+-----------------------+---------------------------------+-------------+\n| | SubscribeProbReq | \\* |\n+-----------------------+---------------------------------+-------------+\n| | UnsubscribeProbReq | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Get (properties) | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Set (properties) | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Register (signal) | Yes |\n+-----------------------+---------------------------------+-------------+\n| Interface.WPS | Start | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Get (properties) | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Set (properties) | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Register (signal) | \\* |\n+-----------------------+---------------------------------+-------------+\n| Interface.P2PDevice | Find | \\* |\n+-----------------------+---------------------------------+-------------+\n| | StopFind | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Listen | \\* |\n+-----------------------+---------------------------------+-------------+\n| | ExtendedListen | \\* |\n+-----------------------+---------------------------------+-------------+\n| | PresenceRequest | \\* |\n+-----------------------+---------------------------------+-------------+\n| | ProvisionDiscoveryRequest | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Connect | \\* |\n+-----------------------+---------------------------------+-------------+\n| | GroupAdd | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Invite | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Disconnect | \\* |\n+-----------------------+---------------------------------+-------------+\n| | RejectPeer | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Flush | \\* |\n+-----------------------+---------------------------------+-------------+\n| | AddService | \\* |\n+-----------------------+---------------------------------+-------------+\n| | DeleteService | \\* |\n+-----------------------+---------------------------------+-------------+\n| | FlushService | \\* |\n+-----------------------+---------------------------------+-------------+\n| | ServiceDiscoveryRequest | \\* |\n+-----------------------+---------------------------------+-------------+\n| | ServiceDiscoveryResponse | \\* |\n+-----------------------+---------------------------------+-------------+\n| | ServiceDiscoveryCancelRequest | \\* |\n+-----------------------+---------------------------------+-------------+\n| | ServiceUpdate | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Register (signal) | \\* |\n+-----------------------+---------------------------------+-------------+\n| BSS | Get (properties) | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Set (properties) | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Register (signal) | Yes |\n+-----------------------+---------------------------------+-------------+\n| Network | Get (properties) | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Set (properties) | Yes |\n+-----------------------+---------------------------------+-------------+\n| | Register (signal) | Yes |\n+-----------------------+---------------------------------+-------------+\n| Peer | Get (properties) | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Set (properties) | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Register (signal) | \\* |\n+-----------------------+---------------------------------+-------------+\n| Group | Get (properties) | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Set (properties) | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Register (signal) | \\* |\n+-----------------------+---------------------------------+-------------+\n| PersistentGroup | Get (properties) | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Set (properties) | \\* |\n+-----------------------+---------------------------------+-------------+\n| | Register (signal) | \\* |\n+-----------------------+---------------------------------+-------------+\n\nLicense\n-------\n\nThis software is open-source. Copyright (c), Digi International Inc.,\n2015.\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, you can obtain one at http://mozilla.org/MPL/2.0/.\n\nDigi, Digi International, the Digi logo, the Digi website, and Digi\nDevice Cloud are trademarks or registered trademarks of Digi\nInternational, Inc. in the United States and other countries worldwide.\nAll other trademarks are the property of their respective owners.\n\nTHE SOFTWARE AND RELATED TECHNICAL INFORMATION IS PROVIDED \"AS IS\"\nWITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT\nLIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL DIGI OR ITS SUBSIDIARIES\nBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\nACTION IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE AND TECHNICAL INFORMATION HEREIN, INCLUDING\nALL SOURCE AND OBJECT CODES, IRRESPECTIVE OF HOW IT IS USED. YOU AGREE\nTHAT YOU ARE NOT PROHIBITED FROM RECEIVING THIS SOFTWARE AND TECHNICAL\nINFORMATION UNDER UNITED STATES AND OTHER APPLICABLE COUNTRY EXPORT\nCONTROL LAWS AND REGULATIONS AND THAT YOU WILL COMPLY WITH ALL\nAPPLICABLE UNITED STATES AND OTHER COUNTRY EXPORT LAWS AND REGULATIONS\nWITH REGARD TO USE AND EXPORT OR RE-EXPORT OF THE SOFTWARE AND TECHNICAL\nINFORMATION.\n\n.. |Build Status| image:: https://img.shields.io/travis/digidotcom/python-wpa-supplicant.svg\n :target: https://travis-ci.org/digidotcom/python-wpa-supplicant\n.. |Coverage Status| image:: https://img.shields.io/coveralls/digidotcom/python-wpa-supplicant.svg\n :target: https://coveralls.io/r/digidotcom/python-wpa-supplicant\n.. |Code Climate| image:: https://img.shields.io/codeclimate/github/digidotcom/python-wpa-supplicant.svg\n :target: https://codeclimate.com/github/digidotcom/python-wpa-supplicant\n.. |Latest Version| image:: https://img.shields.io/pypi/v/wpa_supplicant.svg\n :target: https://pypi.python.org/pypi/wpa_supplicant/\n.. |License| image:: https://img.shields.io/badge/license-MPL%202.0-blue.svg\n :target: https://github.com/digidotcom/python-wpa-supplicant/blob/master/LICENSE",
"description_content_type": null,
"docs_url": null,
"download_url": "UNKNOWN",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "UNKNOWN",
"keywords": null,
"license": "UNKNOWN",
"maintainer": null,
"maintainer_email": null,
"name": "wpa_supplicant",
"package_url": "https://pypi.org/project/wpa_supplicant/",
"platform": "UNKNOWN",
"project_url": "https://pypi.org/project/wpa_supplicant/",
"project_urls": {
"Download": "UNKNOWN",
"Homepage": "UNKNOWN"
},
"release_url": "https://pypi.org/project/wpa_supplicant/0.2/",
"requires_dist": null,
"requires_python": null,
"summary": "WPA Supplicant wrapper for Python",
"version": "0.2"
},
"last_serial": 1580405,
"releases": {
"0.1": [
{
"comment_text": "",
"digests": {
"md5": "c65608fff622ef840ed90b8bf08d8caf",
"sha256": "8b57ba158c3aee5d383501afb88c8a60c6be002874c75104b748957ce2f5c7a6"
},
"downloads": -1,
"filename": "wpa_supplicant-0.1.tar.gz",
"has_sig": false,
"md5_digest": "c65608fff622ef840ed90b8bf08d8caf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20879,
"upload_time": "2015-06-03T20:51:47",
"url": "https://files.pythonhosted.org/packages/0b/09/82ca3057716354c47cac045b723b91be9c18ffdfc71c722ddd0dbc68c7cc/wpa_supplicant-0.1.tar.gz"
}
],
"0.2": [
{
"comment_text": "",
"digests": {
"md5": "c21c7841f5e03ff709a0564b2e094010",
"sha256": "3ad0f40a696763bb0f4d4dec5b51f6b53ccfeb7c16ebb5897349303045f94776"
},
"downloads": -1,
"filename": "wpa_supplicant-0.2.tar.gz",
"has_sig": false,
"md5_digest": "c21c7841f5e03ff709a0564b2e094010",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 21835,
"upload_time": "2015-06-05T19:54:02",
"url": "https://files.pythonhosted.org/packages/3b/8c/7a278d06e9592a6f5b963e069be35eac634e25d572ba4498eb2ad58f7d19/wpa_supplicant-0.2.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "c21c7841f5e03ff709a0564b2e094010",
"sha256": "3ad0f40a696763bb0f4d4dec5b51f6b53ccfeb7c16ebb5897349303045f94776"
},
"downloads": -1,
"filename": "wpa_supplicant-0.2.tar.gz",
"has_sig": false,
"md5_digest": "c21c7841f5e03ff709a0564b2e094010",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 21835,
"upload_time": "2015-06-05T19:54:02",
"url": "https://files.pythonhosted.org/packages/3b/8c/7a278d06e9592a6f5b963e069be35eac634e25d572ba4498eb2ad58f7d19/wpa_supplicant-0.2.tar.gz"
}
]
}