用于python的dnanexus平台api绑定

dxp的Python项目详细描述


dxpy:dnanexus python api

API Documentation

建筑

从dx toolkit根目录:

make python

调试

在前面将_DX_DEBUG环境变量设置为正整数 运行基于dxpy的程序(例如dx)来显示输入和 每个api调用的输出。支持的值为1、2和3,其中 不断增加的数字连续产生更详细的输出。

示例:

$ _DX_DEBUG=1 dx ls

python编码风格

  • 符合PEP-8
    • 将行长度要求放宽到每行120个字符,这样就可以判断可读性不会受到影响。
    • 如果PEP-8简化了代码或需要遵循约定,请自行放宽其他需求 在dnanexus的其他地方建立。
  • Sphinx Autodoc可用的格式记录代码。
  • 在签入代码之前对代码运行pylint -E
  • 不要引入模块导入时间的副作用。
    • 不要将模块级属性添加到api中,除非您绝对确定它们将保持不变。为了 例如,不要声明属性dxpy.foodxpy._foo可以),或者 任何模块的全局范围。这是因为除非该值是常量,否则可能需要由 初始化方法,它可能需要延迟运行以避免在模块加载时出现副作用。相反,使用 可在调用时执行更新的访问器方法:

      _foo=Nonedefget_foo():initialize()return_foo

其他有用资源:

python版本兼容性

进入python代码库的代码应该使用python 3.3风格编写,并且应该与python3.3、3.4兼容, 和2.7。为了促进python 2的兼容性,我们在https://github.com/dnanexus/dx-toolkit/blob/master/src/python/dxpy/compat.py中有compat模块。另外,下面的样板文件应该是 插入到所有python源文件中:

from __future__ import absolute_import, division, print_function, unicode_literals
  • dxpy.compat有一些简单的填隙片,它们反映了python 3.3的内置代码,当启用python 2.7时,将它们重定向到python2.7的等效版本。最关键的是,from dxpy.compat import str将导入2.7上的unicode内置和3.3上的str内置。使用str无论您在何处使用unicode。要将unicode字符串转换为字节,请使用.encode('utf-8')
  • 使用from __future__ import print_function并使用print作为函数。写print >>sys.stderr,而不是print(..., file=sys.stderr)
  • 字节/unicode转换之后的下一个最麻烦的问题是许多iterables操作符返回python 3中的生成器。例如,map()返回生成器。这会打断期望列表的位置,并要求使用list()进行显式强制转换,或者使用列表理解(通常是首选)。
  • 不要使用raw_input,而是使用from dxpy.compat import input
  • 使用.iteritems(),而不是.items()。如果这是2.7上的性能问题,请在compat.py中引入一个垫片。
  • 不要使用StringIO.StringIO,而是使用from dxpy.compat import BytesIO(这是2.7上的stringio)。
  • 不要使用<iterator>.next(),而是使用next(<iterator>)
  • 不要使用x.has_key(y),而是使用y in x
  • 不要使用sort(x, cmp=lambda x, y: ...),而是使用x=sorted(x, key=lambda x: ...)

其他有用资源:

同时也是模块的python脚本的约定

有些脚本(如格式转换器)既可用作独立的可执行文件,也可用作可导入模块。

对于这些脚本,我们有以下约定:

  • 使用类似于dx_useful_script.py的名称将脚本安装到src/python/dxpy/scripts中。这将允许 使用import dxpy.scripts.dx_useful_script导入。

  • 在脚本中包含一个名为main()的顶级函数,它应该是入口点处理器,并且 用以下小节结束脚本:

    if__name__=='__main__':main()
  • dxpy安装过程(通过setup.py调用,或者通过make -C src python在顶层调用) 将自动找到脚本并将其启动程序安装到可执行路径中。使用 entry_pointssetuptools/distribute的工具。

    • 注:Install脚本将用启动程序名称中的破折号替换模块名称中的下划线 脚本。
  • 通常,在命令行上调用时,main()将首先解析命令行参数(sys.argv)。然而, 当作为模块导入时,需要将参数作为输入传递给函数。以下是 关于如何在只有一个入口点的情况下同时容纳两种样式的建议(main):

    defmain(**kwargs):iflen(kwargs)==0:kwargs=vars(arg_parser.parse_args(sys.argv[1:]))...if__name__=='__main__':main()

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

推荐PyPI第三方库


热门话题
图形Java仿射变换以旋转通用路径   IntelliJ IDEA中的java代码标记为编译器错误,在Eclipse中可以正常工作   java ArrayList的containsAll返回了错误的值   如何在安卓中的片段活动中添加java代码   java通过使用netbeans调用jbutton,将带有行的jbutton添加到jtable中   java在更新arrayAdapter/listView之前更新最终列表   java如何在另一个项目中导入包含AspectJ方面和注释的项目   为什么我的java布尔测试总是失败?   Eclipse中的java自动激活   在Bluetooth for Java(更具体地说是Android)之上是否有TCP/IP协议栈实现?   java Android Studio通过intent传递ArrayList并填充ListView