Kerio产品的API

PyKerio的Python项目详细描述


皮克里奥

特拉维斯CI生成状态Circleci生成状态pypi-versionpypi-python version工作服状态

说明:Kerio产品的API

版权所有:2018 Fabio Castelli(muflone)muflone@muflone.com

许可证:GPL-2+

源代码:https://github.com/muflone/pykerio" rel="nofollow">https://github.com/muflone/pykerio

文档:http://www.muflone.com/pykerio/" rel="nofollow">http://www.muflone.com/pykerio/

说明

pykerio试图构建一个公共api来与任何 kerio服务器以便使用外部操作 工具和简单的设置脚本。

交互将使用集成Kerio Web上的HTTP请求 服务器的方式与经典的Kerio Web管理相同。

系统要求

  • python 3.x

pykerio类型

最初的kerio api 使用json数据与kerio服务器交互,但是在pykerio中可以找到 许多类将json原始数据映射到python对象,以简化 使用和检查无效数据类型。

pykerio数据类型分为4组:

  • 简单类型
  • 枚举
  • 结构
  • 列表

所有pykerio类型都可以使用 实例对象上的.dump()方法。

pykerio简单类型

pykerio简单类型可以在pykerio.types中找到,并且是简单的 映射到python原始数据的类。

pykerio简单类型背后的原因是将特定类型绑定到 功能。 例如,当一个方法需要ipaddress类型时,您可以 一个新的ipaddress对象,它基本上包装了表示ipv4的字符串 地址:

它们的用法相当简单:

>>> ip_address = pykerio.types.IpAddress('8.8.8.8')
>>> print(ip_address)
'8.8.8.8'

pykerio枚举

pykerio枚举可以在pykerio.enums中找到,并且很简单 引用完成的字符串集的类。它们可以用来代替 当一个函数需要一个特定的常量值时的字符串。

pykerio枚举背后的原因是限制invalid的使用 ST并知道一个论点的唯一允许值。 例如,当方法需要activetool数据类型时,您可以 实例一个新的activetool对象在对象期间传递其值 创造。将首先检查此值,并且不能检查无效值 指定。

它们的用法如下所示:

>>> tool = pykerio.enums.ActiveTool('ActiveToolDns')
>>> print(tool.dump())
'ActiveToolDns'

创建对象期间不能指定无效参数。以下 指令将引发断言错误。

>>> tool = pykerio.enums.ActiveTool('Invalid value')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pykerio/enums/BaseEnumeration.py", line 29, in __init__
    assert(name in self.VALUES)
AssertionError

这样,您就可以安全地将对象传递给函数,而不必冒任何风险 无效值,因为它们将被自动禁止。

Pykerio结构

pykerio结构可以在pykerio.structs中找到,并且是复杂的 有两个或更多成员的课程。

如果不解释pykerio结构的所有成员,则无法实例化它。 价值观。它们的使用需要通过一本字典,上面有所有的名字和 价值观。 例如,每当函数要求您传递APIApplication 对象您可以通过这种方式对其进行实例化:

application = pykerio.structs.ApiApplication({
    'name': 'My application',
    'vendor': 'Fabio Castelli',
    'version': '1.1.2'})

一些pykerio结构可能非常复杂,因为它们包含许多成员和 每个成员可以是另一个pykerio结构或许多其他python的列表 结构。

pykerio列表

pykerio列表可以在pykerio中找到。 固定和不可变数据类型的列表。

pykerio列表背后的原因是将列表分组为 相同类型。

例如,当函数需要ipaddresslist对象时,可以 实例一个ipaddresslist并用尽可能多的ipaddress对象填充它 你需要。

有两种方法可以用对象填充pykerio列表:

  • 创建时:

    iplist = pykerio.lists.IpAddressList([ip1], [ip2], [ip3])
    
  • 创建后:

    iplist = pykerio.lists.IpAddressList()
    iplist.append(ip1)
    iplist.append(ip2)
    iplist.append(ip3)
    

不能将不同类型的对象放入pykerio列表。

实现的接口

以下接口在pykerio.interfaces下实现:

  • 会话
  • 硬件信息
  • 接口
  • 端口
  • 文件名组
  • 服务器
  • 存储
  • iptools

每个需要实现或使用的简单类型、结构、枚举或列表 这些接口也可以使用。

用法示例

与Kerio服务器交互的第一步是 一个pykerio对象,但是不能直接实例化pykerio类 但需要通过pykeriocontrolpykerioconnect进行实例化 类,

下一步是使用有效的用户名和密码登录到服务器。 所有其他命令都需要成功的登录会话。

许多使用示例在使用时可以在tests文件夹中找到 测试API操作。

登录

>>> import pykerio
>>> import ssl
>>> ssl._create_default_https_context = ssl._create_unverified_context
>>> api = pykerio.PyKerioControl(server='control-demo.kerio.com',
                                 port=4081)
>>> application = pykerio.structs.ApiApplication({'name': pykerio.APP_NAME,
                                                  'vendor': pykerio.APP_AUTHOR,
                                                  'version': pykerio.APP_VERSION})
>>> session = pykerio.interfaces.Session(api)
>>> session.login('admin-en', 'kerio', application)

注销

>>> session.logout()

丢失的接口呢?< >

pykerio模块提供了一个名为request\u rpc的方法,该方法允许 只需提供以下方法,就可以向Kerio服务器启动直接命令 json数组中的名称及其输入参数。

成功登录后,您可以使用 以下方式:

>>> response = api.request_rpc(method='HardwareInfo.getBoxSerialNumber',
                               params={})
>>> print(response.result)
{'serialNumber': 'LNKR17123456'}

使用原始json输入参数的更复杂的示例:

>>> ip_address = pykerio.types.IpAddress('8.8.8.8')
>>> print(ip_address)
'8.8.8.8'
0

也可以编写使用pykeriohistogramtype类的相同示例 像这样:

>>> ip_address = pykerio.types.IpAddress('8.8.8.8')
>>> print(ip_address)
'8.8.8.8'
1

request-rpc方法将自动转换pykerio类型 (从pykerio.structspykerio.listspykerio.enumspykerio.types)到json原始数据。

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

推荐PyPI第三方库


热门话题
java希望直接扫描要上传到网页的文档   java JavaFX使对象可见,但不使用(忽略)点击   java LibGdx奇怪的纹理行为   java JavaFx ComboBox在第一次单击时未获得正确的值   api WebDav服务器库最好使用Java   java在Android中维护应用程序状态   java保存在Android中拖放RecyclerView后所做的更改我已经阅读了所有内容   无法读取项目中所需库tomcatembedwebsocket的java存档,或者该存档不是有效的ZIP文件   c#类在系统中有哪些关联?如何在UML中最好地表示它们?   java如何使用bazaar访问两台计算机上的同一文件夹   Java易失性与缓存一致性   java如何解决http11。校长:例外?   java liferaymavenplugin从maven Liferay 6.2.5(6.2 ga6)部署war   安卓的jar for java在哪里。木卫一。文件   java邻接矩阵中BFS的顺序是什么?   虚拟机如何从java启动linux虚拟机?   向DefaultListModel添加元素时java JList未更新   java JMSListener批注无法与REST服务一起使用   java DirectoryStream返回路径的顺序是什么?文件名,上次修改,文件大小?   java DropWizard Hibernate doc想说什么?