pyaxl是一个python库,通过axl接口访问cisco callmanger
pyaxl的Python项目详细描述
What is pyaxl
pyaxl是通过axl接口访问cisco callmanger的python 3库。这个库是建立的 受到the work of Sebastian Kratzert的启发,作为 肥皂水的第二层,包含了jurko的进一步改进。 我们使用SoupUI,如果您想使用这个库,建议使用它,因为它有助于 分析和理解Cisco CallManager中的WSDL是如何组成的。
Pyaxl是在zpl 2.1下获得许可的,有关详细信息,请参阅license.txt。
Import WSDL
由于许可条款,此库中不包括wsdl文件。Pyaxl提供 一个脚本,用于导入它,然后直接将缓存构建到库中。
首先需要下载wsdl文件。axl wsdl包含在axl sql工具包下载中, 在思科统一配置管理系统中提供。按照以下步骤从Cisco下载AXL SQL工具包 统一配置管理服务器:
- 登录到Cisco统一配置管理应用程序。
- 转到应用程序插件
- 单击Cisco CallManager AXL SQL工具包插件的下载链接。
axlsqltoolkit.zip文件包含不同版本Cisco Unified CM的完整架构定义。
- 每个版本的重要文件是:
- axlapi.wsdl
- axlenums.xsd
- axlmessage.xsd
- axlsoap.xsd
- axl.xsd
注意:所有文件必须位于同一目录中,并且与要使用的版本同名。
$ ./pyaxl_import_wsdl -p path_to_wsdl/10.5/AXLAPI.wsdl
提示:我们将所有这些文件放在buildout目录中。当buildout运行时,wsdl文件将自动导入。
[buildout]parts= pyaxl_import pyaxl_import_exec[pyaxl_import]recipe=zc.recipe.egg:scriptseggs=pyaxlscripts=pyaxl_import_wsdl=import_wsdl[pyaxl_import_exec]recipe=collective.recipe.cmdon_install=trueon_update=truecmds=${buildout:directory}/bin/import_wsdl -p ${buildout:directory}/wsdl/10.5/AXLAPI.wsdl
Configuration
>>> import pyaxl >>> from pyaxl import ccm >>> from pyaxl.testing import validate >>> from pyaxl.testing.transport import TestingTransport
对于这些测试,我们使用一个假传输层。为此,我们必须告诉 传输程序应该用于响应。
>>> transport = TestingTransport() >>> transport.define('10.5_user_riols') >>> transport_testing = TestingTransport() >>> transport_testing.define('8.0_user_riols')
>>> settings = pyaxl.AXLClientSettings(host='https://callmanger.fake:8443', ... user='super-admin', ... passwd='nobody knows', ... path='/axl/', ... version='10.5', ... suds_config=dict(transport=transport)) >>> pyaxl.registry.register(settings)
Pyaxl支持多种设置。要使用它,请将配置名称传递为 register方法中的第二个属性。
>>> settings_testing = pyaxl.AXLClientSettings(host='https://callmanger-testing.fake:8443', ... user='super-admin', ... passwd='nobody knows', ... path='/axl/', ... version='8.0', ... suds_config=dict(transport=transport_testing)) >>> pyaxl.registry.register(settings_testing, 'testing')
如果要使用自定义配置,还需要通过 当您获得对象时:
>>> user = ccm.User('riols', configname='testing')
如果不需要多个设置,可以使用默认设置。
>>> user = ccm.User('riols')
不要忘记为定义的配置名称构建缓存:
$ ./pyaxl_import_wsdl -p -c testing path_to_wsdl/10.5/AXLAPI.wsdl
Working with pyaxl
Get all information for a specific user.
>>> transport.define('10.5_user_riols') >>> user1 = ccm.User('riols')
>>> validate.printSOAPRequest(transport.lastrequest()) getUser: userid=riols
>>> user1.firstName Samuel >>> user1.lastName Riolo
Get the same user with his UUID.
>>> transport.define('10.5_user_riols') >>> user2 = ccm.User(uuid='{5B5C014F-63A8-412F-B793-782BDA987371}') >>> user1._uuid == user2._uuid True
Search and list information
>>> transport.define('10.5_user_armstrong') >>> users = ccm.User.list(dict(lastName='Armstrong'), ('firstName', 'lastName')) >>> validate.printSOAPRequest(transport.lastrequest()) listUser: searchCriteria: lastName=Armstrong returnedTags: firstName=True lastName=True
>>> list(users) [(Lance, Armstrong), (Neil, Armstrong)]
Search and fetch information as objects
>>> transport.define('10.5_user_riols') >>> users = ccm.User.list_obj(dict(lastName='Riolo', firstName='Samuel')) >>> for user in users: ... print(user.firstName, user.lastName) Samuel Riolo
Reload an object
>>> transport.define('10.5_user_riols') >>> user = ccm.User('riols') >>> user.firstName = 'Yuri' >>> user.lastName = 'Gagarin' >>> print(user.firstName, user.lastName) Yuri Gagarin >>> user.reload() Traceback (most recent call last): ... pyaxl.exceptions.ReloadException: Error because some field are already changed by the client. Use force or update it first. >>> user.reload(force=True) >>> print(user.firstName, user.lastName) Samuel Riolo
Update an object
>>> transport.define('10.5_user_riols') >>> user = ccm.User('riols') >>> user.firstName = 'Claude' >>> user.lastName = 'Nicollier' >>> user.update() >>> validate.printSOAPRequest(transport.lastrequest()) updateUser: uuid={5B5C014F-63A8-412F-B793-782BDA987371} firstName=Claude lastName=Nicollier
Remove an object
>>> transport.define('10.5_user_riols') >>> user = ccm.User('riols') >>> user.remove() >>> validate.printSOAPRequest(transport.lastrequest()) removeUser: uuid={5B5C014F-63A8-412F-B793-782BDA987371}
Create a new object
>>> transport.define('10.5_user_riols') >>> user = ccm.User() >>> user.lastName = 'Edison' >>> user.firstName = 'Thomas' >>> user.userid = 'tedison' >>> user.presenceGroupName = 'SC Presence Group' >>> user.ipccExtension = None >>> user.ldapDirectoryName = None >>> user.userProfile = None >>> user.serviceProfile = None >>> user.primaryDevice = None >>> user.pinCredentials = None >>> user.passwordCredentials = None >>> user.subscribeCallingSearchSpaceName = None >>> user.defaultProfile = None >>> user.convertUserAccount = None
>>> user.update() Traceback (most recent call last): ... pyaxl.exceptions.UpdateException: you must create a object with "create" before update
>>> user.create() {12345678-1234-1234-1234-123123456789} >>> validate.printSOAPRequest(transport.lastrequest()) addUser: user: firstName=Thomas lastName=Edison userid=tedison presenceGroupName=SC Presence Group
如果尝试创建用户两次,则会引发creationexception类型的异常:
>>> user.create() Traceback (most recent call last): ... pyaxl.exceptions.CreationException: this object are already attached
Clone an object
>>> transport.define('10.5_user_riols') >>> user = ccm.User('riols') >>> clone = user.clone() >>> clone.userid = 'riols2' >>> clone.update() Traceback (most recent call last): ... pyaxl.exceptions.UpdateException: you must create a object with "create" before update >>> clone.create() {12345678-1234-1234-1234-123123456789}
Running the doc tests
$ tox -- <path to axlsqltoolkit directory>
About us
我们是瑞士BIEL/BIENNE的IT服务。 http://foss.biel-bienne.ch/blog/