一个客户端库,用于与bebanjo的movida和sequeuence api交互。

bebanjo-api-hi2meuk的Python项目详细描述


bebanjo api客户端

与bebanjo的movida和sequence api接口的客户端库,允许集成开发人员关注其应用程序的业务逻辑,而不是底层细节。

该库为常见任务的身份验证、异常处理、日志记录和实用程序提供支持。它可以在交互会话中使用。在设计上,它与movida/序列模式的耦合非常松散。

示例应用程序

为了演示一些功能,下面是一个应用程序,它可以在平台android gb上计划的所有标题上上载图像,并将其作为该平台的目标,并在movida ui中将其设置为该标题的post art

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
< Buff行情>

尽管这可以如前所述工作,但设计良好的应用程序还将包括异常处理、检查图像是否已存在以及登录到文件。

安装

PYPI

pip install --user bebanjo-api

GIT

访问gitlab中的bebanjo-api,克隆并参与项目。

使用bebanjo客户端库

设置应用程序

frombebanjoimportMovidaAPI,install_auth_handlers

robot帐户凭据

必须使用所使用的bebanjo环境的登录数据初始化身份验证处理程序。库假定sequence和movida凭证之间没有区别。要提供给处理程序初始化的凭据的格式是一个嵌套的dict,如下所示:

config={'staging':{'user':'robot_hi2meuk','password':'mypassword'}}
< Buff行情>

环境键必须是以下项之一:暂存预生产生产

如前所述,在实例化提供配置数据结构的api之前设置身份验证处理程序:

install_auth_handlers(config)

库提供了一个函数,用于根据本地json文件设置auth config。

frombebanjo.utilsimportread_local_configconfig=read_local_config(CONFIG_FILE)
< Buff行情>

配置文件必须为json格式。如果未提供文件路径,则在用户主目录(Windows或Linux)中默认为".bebanjo.json"。

为所选环境创建movida api实例

mapi=MovidaAPI(env='staging')

为了进行组件测试,可以指定一个本地wiremock服务器来模拟movida/序列:

mock_url='http://localhost:8080/api'mapi=MovidaAPI(url=mock_url)

日志记录

使用python日志框架记录api调用和响应。

日志在调试级别生成,其中包含发送和接收的XML有效负载。控制台输出仅包括严重性警告及以上的日志。这是日志框架的一个特点。应用程序中放置的以下代码将按照指定的格式启用对控制台的调试。

ch=logging.StreamHandler()ch.setLevel(logging.DEBUG)formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')ch.setFormatter(formatter)logger.addHandler(ch)

使用原则

首先获取以发现下一件事的作用

假设您要浏览movida api,而您的知识和起点是根:/api。您首先需要执行一个get调用,找到该资源包含其他集合资源(rest collection),如titlestitle_groups和其他资源。如果您对标题资源进行get调用,您会注意到它有许多元数据键和值,以及指向其他集合资源(包括扩展的元数据)的链接。同样,您也需要对这些资源进行get调用,例如资产以了解它拥有什么类型的资源。

同样的情况也适用于使用这个客户机库,通常我们必须进行一次提取以访问api根以外的属性。

这种方法意味着库与movida是松耦合的。如果movida模式中有更改,则不太可能需要对此库进行更新。这也意味着您不必告诉库有关公司自定义元数据的信息;库您将发现它并将其提供给您的应用程序。

除了,不需要获取根/api资源

此"先取"主体有例外。因为获取api是一个共同的起点,而且它包含的内容是非常可预测的,所以库会预先填充根api对象的属性,例如它已经有一个标题属性:

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
0

除此之外,不需要获取计划资源-请改用add_link()

如果您想在知道当前url路径之外的下一个项目时避免不必要的get调用,可以将其修补到对象中。一个常见的用例是schedule资源;当您获取它时,您发现它只包含到schedulings资源的链接,而不包含其他内容。我们可以直接添加计划资源并保存一个get呼叫。

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
1

功能

内存高效的收集处理

集合资源(例如titles)的get_paginated()方法是一个python生成器。它将遍历每次返回每个标题的资源的每个标题。它将在需要时一次对movida调用一个页面(默认页面大小为50)。在任何时候,收藏对象中的内存中都只保存项目页。

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
2

创建图像并设置目标平台

图像可以从本地文件或远程服务器位置上传,方法将根据create_image()方法指定的文件路径确定。返回值是表示创建的图像的图像对象。可以从预取或后取对象创建图像。默认情况下,编码类型和文件名是从给定的图像文件名提取的,但可以通过传入dict对象来重写。其他元数据也可以传入。当文件被处理时,movida将为size和md5校验和设置值-对于远程来源的图像,这是异步完成的,并且在本地创建的对象中是空的。

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
3

还支持远程路径。

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
4

对于现有图像,如果目标平台已经存在于图像上,则添加该平台可能会失败。

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
5

要避免可能的故障,请执行以下操作:

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
6

注意上面的长代码行:

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
7

当目标平台是类fetcher时,这是必需的;它不能将自己的类升级到集合。有一个助手可以使代码更简洁。

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
8

在movida和sequence之间无缝切换

只要您加载了对movida和sequence有效的有效凭据,那么库就不知道对象属性中引用的资源。例如,movida调度中的jobs资源是指按顺序访问的资源,访问该资源将自动按顺序触发身份验证。

对象的字符串表示形式

检查实用程序

检查标题的属性;一级元数据、扩展元数据和指向相关对象的链接,这些对象可以提取以供进一步检查。它直接打印到控制台。它用于调试和交互式会话。

frombebanjoimportMovidaAPImapi=MovidaAPI(env='staging')IMAGE_URL='tests/image/1yeVJox3rjo2jBKrrihIMj7uoS9.JPEG'platforms=mapi.platforms.fetch()target_platform=filter(lambdap:p.name=='Android GB',platforms)[0]fortitleintarget_platform.titles.get_paginated():image=title.images.create_image(IMAGE_URL,meta1={'IsPosterArt':True})image.target_platforms.create(target_platform.url)
9

输出:

pip install --user bebanjo-api
0

通过外部id获取标题

pip install --user bebanjo-api
1

按外部id获取标题并包含扩展元数据和图像

pip install --user bebanjo-api
2

按名称提取资产

pip install --user bebanjo-api
3

使用父资源对象创建对象

无需首先获取集合资源,因为在此资源中创建对象只需要集合资源的url。

pip install --user bebanjo-api
4 < Buff行情>

在上面的例子中,如果没有指定名称,movida将抱怨422响应,因为name对于标题是必需的。同样,如果元数据键或值无效,也会产生422响应。

读取对象的元数据

像访问python字典一样访问元数据的值。

pip install --user bebanjo-api
5

在movida中更新标题

啊!

为ids构建一个平台名目录

是啊。

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

推荐PyPI第三方库


热门话题
SpringWeb中的java更新/通知其他用户   java Lambda性能测试   java Bukkit插件:空白符号   java在按下按钮后改变彩色正方形的大小   javajavac相当于“D”?   java序列化接口   属性无法从属性文件返回值   java我应该使用什么查询来使用Jsoup从html页面提取符号?   java Android Studio项目结构问题   JAVA方法和返回值/公共变量(基础)   java将NativeQuery映射到POJO   java如何在下面的程序中消除NumberFormatException?   在java中获取链表与数组中的对象   java Android Firebase将用户发送到聊天室