Python库与UCS@学校开尔文REST API。

kelvin-rest-api-client的Python项目详细描述


PythonUCS@学校Kelvin REST API客户端

Python 3.7+GNU AGPL V3 licenseCode style: blackSecurity: banditCode coverageDocumentation Statustraviscigh Code Lintinggh Integration tests

UCS@school Kelvin REST API交互的Python库。在

特点

  • 异步
  • 自动处理HTTP(S)会话
  • 类型批注
  • 97%的测试覆盖率(单元测试+集成测试)
  • Python 3.7、3.8、3.9

用法

Session上下文管理器打开和关闭HTTP会话:

>>>importasyncio>>>fromucsschool.kelvin.clientimportSession,User,UserResource>>>>>>asyncdefget_user(username:str)->User:...asyncwithSession(..."USERNAME",..."PASSWORD",..."master.ucs.local",...verify="ucs-root-ca.crt"...)assession:...returnawaitUserResource(session=session).get(name=username)...>>>obj=asyncio.run(get_user("demo_student"))>>>>>>print(obj)User('name'='test_user',dn='uid=test_user,cn=schueler,cn=users,ou=DEMOSCHOOL,dc=example,dc=com')>>>print(obj.firstname,obj.lastname)TestUser

docsusage部分有更多示例。在

要使HTTPS工作,目标系统(UCS主服务器)的SSL CA必须是公开签名的,安装在客户机系统上,或者作为文件提供(如上面的示例所示)。 如果SSL CA证书不可用verify=False。 显然这是不安全!任何UCS服务器的CA都可以从http://FQDN.OF.UCS/ucs-root-ca.crt下载。在

安装

安装UCS@学校Kelvin REST API客户端通过来自PyPI的pip:

^{pr2}$

测试

有一些独立的单元测试,但是大多数测试都是针对一个实际的^{em1}运行的$UCS@学校开尔文REST API。 已经为此准备了一个UCS Docker容器(除了Kelvin API Docker容器)。 Makefile自动下载并启动Docker容器(3.2GB)并运行测试。 也可以将现有的UCS DC主控形状与UCS@学校安装了开尔文API。在

测试预计目标系统上存在两个学校(OUs)(kelvinapi还不支持创建学校)。 学校是DEMOSCHOOL和{tt7}$。 第一个通常已经存在,但是尝试重新创建它是安全的。 要在UCS DC主机上创建运行的学校:

$ /usr/share/ucs-school-import/scripts/create_ou DEMOSCHOOL
$ /usr/share/ucs-school-import/scripts/create_ou DEMOSCHOOL2

提供的UCS Docker容器已包含这两个OU。 可以使用Makefile启动它们:

$ make start-docker-containers

Downloading Docker image '..-ucsschool-udm-rest-api-only:stable-4.4-4'...
Downloading Docker image '../ucsschool-kelvin-rest-api:1.1.0'...
Starting UCS docker container...
Waiting for UCS docker container to start...
Waiting for IP address of UCS container...
Waiting for UDM REST API...........
Creating Kelvin REST API container...
Configuring Kelvin REST API container...
Rebuilding the OpenAPI client library in the Kelvin API Container...
Starting Kelvin REST API server...
Waiting for Kelvin docker container to start...
Waiting for IP address of Kelvin container...
Waiting for Kelvin API...
Fixing log file permissions...
Setting up reverse proxy...
==> UDM REST API log file: /tmp/udm-rest-api-log/directory-manager-rest.log
==> UDM REST API: http://172.17.0.2/univention/udm/
==> Kelvin API configs: /tmp/kelvin-api/configs/
==> Kelvin API hooks: /tmp/kelvin-api/kelvin-hooks/
==> Kelvin API log file: /tmp/kelvin-api/log/http.log
==> Kelvin API: http://172.17.0.3:8911/ucsschool/kelvin/v1/docs
==> Kelvin API: https://172.17.0.2/ucsschool/kelvin/v1/docs

Docker容器可以通过运行以下命令停止和移除:

$ make stop-and-remove-docker-containers

Docker镜像不会被移除,只会移除正在运行的容器。在

使用当前Python解释器运行测试:

$ make test

使用tox可以使用所有受支持的Python版本执行测试:

$ make test-all

要将现有UCS服务器用于测试,请将文件tests/test_server_example.yaml复制到tests/test_server.yaml,并在开始测试之前调整设置:

$ cp tests/test_server_example.yaml tests/test_server.yaml
$$EDITOR tests/test_server.yaml
# check settings with a single test:
$ python -m pytest tests/test_user.py::test_get
#if OK, run all tests:
$ make test

日志

标准日志记录用于跟踪库活动。 要捕获此项目的日志消息,请订阅名为ucsschool.kelvin.client的记录器。 注意:密码和会话令牌将记录在日志级别DEBUG!在

UCS@学校UCS服务器上的kelvinrestapi记录到文件/var/log/univention/ucsschool-kelvin-rest-api/http.log。 UCS服务器上的udmrestapi登录到文件/var/log/univention/directory-manager-rest.log。在

回购权限

  • Github:@dansan和@JuergenBS
  • 吉特实验室:@JuergenBS
  • 皮皮:@dansan和@SamuelYaron
  • RTD:@dansan和@SamuelYaron

学分

历史

0.2.2(2020-11-09)

  • 用户支持

0.2.1(2020-08-07)

  • 修正JWT令牌有效性计算:时间戳使用UTC
  • 文档修复
  • 依赖项更新
  • 测试也在python3.9-dev上运行

0.2.0(2020-04-17)

  • 将毒物转移到测试要求
  • 使用默认参数修复用户对象创建
  • 将“as-dict”更改为方法而不是属性
  • 修复片状测试
  • 提高测试覆盖率
  • 把更多的环境参数传给毒物
  • 用rep修复AttributeErrorr(角色)
  • 添加完整的使用文档

0.1.0(2020-04-16)

  • 第一次发布。在

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

推荐PyPI第三方库


热门话题
java何时可以运行。toString()是否有可能返回重复的字符串?   使用REST进行Java应用程序登录验证?   java测试onErrorResume()Spring Webflux   java设置一个单元格样式,使数字显示为百分比ApachePOI   java仅替换regex az09   java将字符串附加到文件   java Hibernate:如何在集合中查找对象   当独立客户端为Web服务实例化代理时,java WebSphere会生成ClassNotFoundException   java简单算法。我做不好   java我的代码有什么问题?我想用Android制作一个“cardflip”动画   java如何模拟Springbean及其自动连接的参数?   java在Android中将arraylist对象的某些参数显示到列表视图中   java setOnclickListener(此)错误   java自动连接未按类型连接bean   java如何禁止在Viewpager上滑动?   java代码检查每个if语句吗?   java NIO选择器OP_READ和OP_WRITE,关于处理它们的一些问题   java如何在不锁定文件的情况下获取文件大小   Oculus Rift的Java API?   java是一种选择。仍然需要fork来设置bootClasspath