作为软依赖项与p4交互的python接口
xpf的Python项目详细描述
概述
xpf是perforce的一个接口,它提供以下好处:
纯python,无编译依赖项(允许在python 2、python 3、max、maya&;motion builder等中使用)
故障保护呼叫-如果Perforce服务器处于可访问状态,则此模块不会引发错误。
PYPI分发使与外包商共享工具变得更容易
安装
下载并放到pythonpath中的某个位置,或者通过pypi安装:
pip安装xpf
为什么不使用p4python
perforce提供了自己的p4python模块,这是一个很好的 稳定库。
p4python的缺点是它是一个编译库,因此需要 如果在python 2.x和python 3.x之间跳转,则使用不同的发行版
如果要将perforce集成到 内置在嵌入式解释器(如autodesk maya/max/motionbuilder)中的工具 它们都是根据与本机不同的编译器版本编译的 python发行版。
xpf带来的另一个好处是它对性能有一个软性要求。 将perforce支持嵌入到 应用程序,如max/maya,但它开启了允许您的工具 当perforce服务器 可进入。
xpf通过确保所有perforce调用都可以返回默认值来解决这个问题。 在无法访问perforce服务器的情况下的变量类型。这个 允许工具在主studio环境之外操作,并且 通过在PYPI上自由访问xpf更容易。
xpf直接
图书馆试图使那些习惯于使用的人易于使用。
p4python或perforce命令行。考虑到这一点,您可以利用
xpf.direct
模块模拟调用类型和
p4python.
在这方面,您可以访问每个perforce命令和 你可以提出任何你想提出的论点。按照p4python约定 将返回一个表示结果的词典列表。
例如:
importxpf# -- Sync to the head revision of a directoryxpf.direct.sync(['/usr/my_files/...'])# -- Force sync, passing the usual perforce argument switches, but# -- define the clientxpf.direct.sync(['/usr/my_files/...'],'-f',client='my_client_name',)
除了定义的函数(是自动生成的)之外,还有一个 更通用的运行函数,您可以直接使用:
importxpf# -- Sync to the head revision of a directoryresult=xpf.direct.run('describe',13569,# -- Change list to describe'Os',# -- Shorten output by excluding client workspace data'Rc',# -- Limit output to files mapped into the current workspace.)
使用xpf.direct
对使用过
p4python或perforce命令行。
xpf辅助系统
在xpf.direct
级别工作在
然而,情况是多种多样的
为回答稍高一级的问题而进行的查询。
这些示例可能是将文件添加到变更列表中,而不管 它是一个添加或编辑操作。另一个例子可能是您想要管理的位置 更改列表的描述稍微简单一些。
xpf.assist
模块旨在提供更高级别的功能,其中
有问题的函数将执行多个调用并将数据打包以解决
一个特殊的请求。
例如:
importxpf# -- Given a chnagelist description, find the most likely changelist# -- number for the current user. In this case, if that changelist# -- does not exist it will be created for youresult=xpf.assist.get_changelist('My change description')
下面的示例公开了一个提交方法,该方法强制所有 提交要添加到变更列表的文件 说明并一起提交:
importxpfxpf.assist.submit_files(['/usr/my_files/...'],description='My submission description',)
xpf变量
xpf在模块级工作。它不是基于类的,它包装了性能 命令行。考虑到这一点,它有一些变量 全局,在第一次运行时查询(基于p4集),但可以 由您更改。
importxpf# -- Get the hosthost=xpf.variables.get_host()# -- Set the host to something specificxpf.variables.set_host(host)
可以通过这种方式检索和设置的变量包括:
* host
* client
* user
* port (server)
* timeout
可以打开/关闭的一个特殊变量是调试
变量。
当调试打开时,xpf将打印任何命令行
过程在最终的格式中,它被构造成。这特别有用
如果你得到了一个你不期望的结果并且想要重新创建步骤
使用命令行。
要启用此选项,请执行以下操作:
importxpfxpf.variables.set_debug(True)
故障保护
xpf的一大优点是它包括内置的故障保护机制
在服务器处于可访问状态时保护功能。在第一次
xpf调用(不管是通过xpf.direct
还是
xpf.assist
)将运行p4 info
查询。如果超时,则
xpf变量设置为将服务器标记为不可访问。
当服务器不可访问时,所有函数都将返回一个默认值 是由他们的故障保护装饰器定义的。这允许您的代码继续 无需直接处理服务器故障。
在许多情况下,当调用xpf.direct中的函数时
服务器故障时返回空列表-这是因为它们的功能
通常返回一个列表。考虑到这一点,同时您不必处理服务器
失败您应该处理被赋予正确(预期)的空数据
类型:
一个很好的例子是:
description=xpf.direct.describe(13569)ifnotdescription:pass...
在上面的例子中,我们必须处理没有给出描述,但是 我们不必处理意外的异常,因为 性能服务器。
从根本上说,这意味着您可以在工具中安全地嵌入xpf依赖项。 提供丰富的用户体验,让用户知道即使使用了 场外。
超时
xpf提供了在所有perforce查询上定义超时的能力。默认情况下
此超时通过xpf.set_timeout(value)
公开,并且是默认的
到一秒钟。如果您的服务器速度特别慢,可以使用该调用
增加全局超时。
或者,您也可以在每次调用的基础上设置超时。这是
当你知道你的电话要比预期的时间长的时候特别有用
时间。这是用timeout
参数完成的,如下所示:
importxpfxpf.direct.info(timeout=10)
编组
默认情况下,通过xpf运行的所有查询都被封送处理,因此返回 蟒蛇的东西。如果您想要原始输出(字符串),而不是 字典您可以根据每次调用将封送处理设置为false 此处显示:
importxpf# -- Sync to the head revision of a directoryxpf.direct.sync(['/usr/my_files/...'])# -- Force sync, passing the usual perforce argument switches, but# -- define the clientxpf.direct.sync(['/usr/my_files/...'],'-f',client='my_client_name',)0
表格
perforce中使用表单传递多个用户输入。什么时候? 通过命令行运行perforce这通常会弹出一个文本 编辑器-在与perforce交互时不是特别有用 通过python库。
因此,由特定p4命令请求的所有表单都可以是 以字典的形式给出的。此处显示:
importxpf# -- Sync to the head revision of a directoryxpf.direct.sync(['/usr/my_files/...'])# -- Force sync, passing the usual perforce argument switches, but# -- define the clientxpf.direct.sync(['/usr/my_files/...'],'-f',client='my_client_name',)1
兼容性
xpf已经在windows和ubuntu上的python 2.7和python 3.7下进行了测试。
注意:本模块使用p4集合
环境变量并期望
至少要定义p4port、p4user和p4client。