一个客户端库,用于与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),如titles
和title_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-api0
通过外部id获取标题
pip install --user bebanjo-api1
按外部id获取标题并包含扩展元数据和图像
pip install --user bebanjo-api2
按名称提取资产
pip install --user bebanjo-api3
使用父资源对象创建对象
无需首先获取集合资源,因为在此资源中创建对象只需要集合资源的url。
pip install --user bebanjo-api4 < Buff行情>
在上面的例子中,如果没有指定名称,movida将抱怨422响应,因为name
对于标题是必需的。同样,如果元数据键或值无效,也会产生422响应。
读取对象的元数据
像访问python字典一样访问元数据的值。
pip install --user bebanjo-api5