一个扩展模块,用于单击以启用通过setuptools入口点注册cli命令。

click-plugins的Python项目详细描述


https://travis-ci.org/click-contrib/click-plugins.svg?branch=masterhttps://coveralls.io/repos/click-contrib/click-plugins/badge.svg?branch=master&service=github

用于click注册的扩展模块 通过setuptools入口点的外部cli命令。

为什么?

假设您开发了一个命令行接口,有人请求一个新功能 这与你的项目绝对相关,但会产生负面影响 像其他的依赖关系,主要的重构,或者可能只是它的域 特定于直接支持。而不是单独开发一个独立的 你可以提供一个setuptools entry point 它允许其他人使用您的命令行实用程序作为他们相关的 子命令。您可以选择这些子命令或子组的位置 已注册,但插件开发人员可以选择它们已注册。你 可以让所有插件在核心命令旁边注册,在一个特殊的 子组,跨多个子组,或某些组合。

启用插件

有关更详细的示例,请参见examples部分。

唯一的要求是用^{tt2}装饰click.group()。$ 它处理附加外部命令和组。在本例中,核心cli开发人员 从core_package.cli_plugins注册cli插件。

frompkg_resourcesimportiter_entry_pointsimportclickfromclick_pluginsimportwith_plugins@with_plugins(iter_entry_points('core_package.cli_plugins'))@click.group()defcli():"""Commandline interface for yourpackage."""@cli.command()defsubcommand():"""Subcommand that does something."""

开发插件

插件开发人员需要将其子命令或子组注册到 核心包加载的入口点setup.py

fromsetuptoolsimportsetupsetup(name='yourscript',version='0.1',py_modules=['yourscript'],install_requires=['click',],entry_points='''
        [core_package.cli_plugins]
        cool_subcommand=yourscript.cli:cool_subcommand
        another_subcommand=yourscript.cli:another_subcommand
    ''',)

损坏且不兼容的插件

任何无法加载的子命令或子组都将被捕获并转换为 一个click_plugins.core.BrokenCommand(),而不是把整个 克利。短帮助将转换为警告消息,如:

Warning: could not load plugin. See ``<CLI> <command/group> --help``.

如果执行子命令或组,则打印整个回溯。

最佳实践和额外积分

向插件打开cli可以鼓励其他开发人员独立扩展 功能独立,但不能保证这些新功能 要“有品牌”。插件开发人员几乎肯定已经在使用功能了 在核心包中,cli属于定义常用参数和 一个地方的选项允许插件开发人员重用这些标志来生成更多 内聚cli。如果cli很简单,可以在 yourpackage/cli.py或更复杂的包,如 yourpackage/cli/options.py。这些常见的选项需要容易找到 并且有很好的文档记录,以便插件开发人员知道要给什么变量 他们的子命令的功能,以及他们期望接收的对象。不要 忘记记录不明显的回调。

请记住,插件开发人员也可以访问父组的 ctx.obj,对于传递详细级别或 配置子命令周围的值。

下面是一些子命令可以重用的代码:

frommultiprocessingimportcpu_countimportclickjobs_opt=click.option('-j','--jobs',metavar='CORES',type=click.IntRange(min=1,max=cpu_count()),default=1,show_default=True,help="Process data across N cores.")

插件开发人员可以使用:

importclickimportparent_cli_package.cli.options@click.command()@parent_cli_package.cli.options.jobs_optdefsubcommand(jobs):"""I do something domain specific."""

安装

使用pip

$ pip install click-plugins

来源:

$ git clone https://github.com/click-contrib/click-plugins.git
$cd click-plugins
$ python setup.py install

开发

$ git clone https://github.com/click-contrib/click-plugins.git
$cd click-plugins
$ pip install -e .\[dev\]$ pytest tests --cov click_plugins --cov-report term-missing

更改日志

CHANGES.txt

作者

AUTHORS.txt

许可证

LICENSE.txt

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

推荐PyPI第三方库


热门话题
java如何提高我的软件项目的速度?   java将Jetty嵌入JavaSE项目   数组中的java重复字符   java我的Shell排序没有按预期工作,我需要一些帮助来找出我做错了什么   java如何在JBoss EAP6/AS7中应用先过滤后安全约束   java使用一个随机运算符来处理多个变量   java为什么我不能在文件中写我的二叉树?   java应用程序不会在Eclipse emulator上运行   我第一次尝试制作一个简单的基于瓷砖的java游戏   java为TermVectors安装Solr修补程序   java无法将更新的对象值从客户端发送到服务器,服务器读取不存在的值   Azure,java sdk,使用ARM模板部署无法转换参数文件   是否有一个Java等价于空合并运算符(?)在C#?   java如果只初始化了超类对象,是否可以调用特定于子类的方法?   向类文件传递值时出现java NullPointerException   java模不起作用   java Android TranslateAnimation动态更新布局的大小   数据结构如何在java中实例化队列对象?   java如果用户选择一些随机的相机应用程序,如何在安卓中正确处理相机意图?