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工具包 统一配置管理服务器:

  1. 登录到Cisco统一配置管理应用程序。
  2. 转到应用程序插件
  3. 单击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/

1.1 (2016-11-25)

  • 添加Windows支持

1.0.1 (2015-08-03)

  • 添加PGP签名

1.0 (2015-08-03)

  • 首字母[codeix]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要64位jdk 1.5 for windows   eclipse运算符+对于参数类型java是未定义的。双,爪哇。双人   未下载文件扩展名为的java文件   java不支持带有POST的媒体类型   从动态创建的多个EditText读取文本时发生java错误   java无法为同一xpath单击多个按钮   如何在Java中动态格式化字符串   java Android Clear Middle活动   多线程Java内存模型volatile和x86   git在Java中通过Jgit忽略文件或文件夹   java“决策无法区分输入的备选方案1、2…”   子类的javajpa继承   java需要弄清楚如何操作mutator来弄清楚一个类,教授说,我对如何操作感到困惑   java如何使用JDBC将数据从文件复制到PostgreSQL?