Samples demonstrating how to use the Python Zeep SOAP library to manage Cisco Unified Communications Voice Operating System (VOS) nodes with the Platform Adminstration Web Service (PAWS).
https://developer.cisco.com/site/paws
paws_getAPIVersion.py
- Retrieves the current version of the PAWS API service from the VOS
node. ( <getAPIVersion>
).
paws_getMyClusterNode.py
- Retrieves details about the VOS cluster node to which the PAWS request
is made. ( <getMyClusterNode>
).
Install Python 3
On Windows, choose the option to add to PATH environment variable
If installing on Linux, you may need to install dependencies for python3-lxml
, see Installing lxml
E.g. for Debian/Ubuntu:
sudo apt build-dep python3-lxml
(Optional) Create/activate a Python virtual environment named venv
:
python3 -m venv venv
source venv/bin/activate
Install needed dependency packages:
pip install -r requirements.txt
Rename .env.example
to .env
, and edit it to specify your VOS host address, version, and PAWS user credentials.
PAWS v15 WSDL files are included in this project. If you'd like to use a different version, replace with the PAWS WSDL files for your VOS product version.
These can be downloaded from the VOS host at:
https://<server>/platform-services/services/<Service Name>?wsdl
To run a specific sample, in Visual Studio Code open the sample .py
file you want to run, then press F5
, or open the Debugging panel and click the green 'Launch' arrow.
You can get a 'dump' of a specific service WSDL to see how Zeep interprets it by running, for example (Mac/Linux):
python3 -mzeep schema/15/APIVersionService.wsdl > APIVersionService_wsdl.txt
This can help with identifying the proper object structure to send to Zeep (see example).
Elements which contain a list, such as:
<members> <member> <subElement1/> <subElement2/> </member> <member> <subElement1/> <subElement2/> </member> </members>
are represented a little differently by Zeep than might be expected: note that <member>
becomes an array, not <members>
:
{ 'members': { 'member': [ { 'subElement1': 'value', 'subElement2': 'value' }, { 'subElement1': 'value', 'subElement2': 'value' } ] } }
Zeep expects elements with attributes and values to be constructed as below:
To generate this XML...
<startChangeId queueId='foo'>bar</startChangeId>
Define the object like this...
startChangeId = { 'queueId': 'foo', '_value_1': 'bar' }
xsd:SkipValue When building the XML to send to the PAWS host, Zeep may include empty elements that are part of the schema but that you didn't explicity specify. This may result in PAWS interpreting the empty element as indication to set the value to empty/nil/null. To force Zeep to skip including an element from the request XML, set its value to xsd:SkipValue
:
updatePhoneObj = { "description": "New Description", "lines": xsd:SkipValue }
Be sure to import the xsd
module: from zeep import xsd
Requests Sessions Creating and using a requests Session object to use with Zeep allows setting global request parameters like auth
/verify
/headers
.
In addition, Session retains PAWS API JSESSION
cookies to bypass expensive backend authentication checks per-request, and HTTP persistent connections to keep network latency and networking CPU usage lower.
Owner
Contributors
Categories
CollaborationProducts
Cisco Unified Communications Manager (CUCM)Programming Languages
PythonLicense
Code Exchange Community
Get help, share code, and collaborate with other developers in the Code Exchange community.View Community