This is WS-Discovery implementation for Python 3. It allows to both discover services and publish discoverable services. For Python 2 support, use the latest 1.x version of this package.
Extensive package documentation is available at ReadTheDocs.
Install from PyPI: pip install WSDiscovery
.
A simple wsdiscover
command-line client is provided for discovering
WS-Discovery compliant devices and systems. Run wsdiscover --help
for
usage instructions.
Here's an example of how to use the package in your Python code. The following code first publishes a service and then discovers it:
from wsdiscovery.discovery import ThreadedWSDiscovery as WSDiscovery
from wsdiscovery.publishing import ThreadedWSPublishing as WSPublishing
from wsdiscovery import QName, Scope
# Define type, scope & address of service
ttype1 = QName("http://www.onvif.org/ver10/device/wsdl", "Device")
scope1 = Scope("onvif://www.onvif.org/Model")
xAddr1 = "localhost:8080/abc"
# Publish the service
wsp = WSPublishing()
wsp.start()
wsp.publishService(types=[ttype1], scopes=[scope1], xAddrs=[xAddr1])
# Discover it (along with any other service out there)
wsd = WSDiscovery()
wsd.start()
services = wsd.searchServices()
for service in services:
print(service.getEPR() + ":" + service.getXAddrs()[0])
wsd.stop()
To fix a bug or develop this package, it is recommended to use a virtual environment and set up a development environment. For example:
$ python3 -m venv venv
$ . venv/bin/activate
(venv) $ pip3 install -e .
Then you can call wsdiscover
and wspublish
from within this virtual
environment. Any code changes to the package will be available and testable
immediately.
This is not 100% complete and correct WS-Discovery implementation. It doesn't verify data received from the network. It may crash, and might contain security holes. No guarantees - test it carefully for your use case.
Original version created by L.A. Fernando.
Code was then forked and maintained by Andrei Kopats.
Python2 support fixes by Michael Leinartas.
Python3 port done by Pieter Jordaan.
Packaging, major refactoring & command-line clients and reStructuredText package documentation by Petri Savolainen.