跳转到主要内容

适用于Python 3.6+的现代化、声明式参数解析器

项目描述

Build Status Code Climate Coverage Status Documentation Status

适用于Python 3.6+的现代化、声明式参数解析器。功能强大如click,集成如argparse,声明式如sqlalchemy。MIT许可。在RTD上有文档Documented on RTD。使用以下命令安装

python3 -m pip install declarative_parser

与argparse一样简单

它构建在argparse之上 - 您已知道的一切仍然有效!

from declarative_parser import Parser, Argument

class MyParser(Parser):
    square = Argument(help='display a square of a given number')

parser = MyParser()
args = parser.parse_args()
print(args.square**2)

嵌套和并行

每个人都了解嵌套参数。那么并行组呢?

supported_formats = ['png', 'jpeg', 'gif']

class InputOptions(Parser):
    path = Argument(type=argparse.FileType('rb'), optional=False)
    format = Argument(default='png', choices=supported_formats)

class OutputOptions(Parser):
    format = Argument(default='jpeg', choices=supported_formats)
    scale = Argument(type=int, default=100, help='Rescale image to %% of original size')

class ImageConverter(Parser):
    description = 'This app converts images'

    verbose = Argument(action='store_true')
    input = InputOptions()
    output = OutputOptions()

parser = ImageConverter()

commands = '--verbose input image.png output --format gif --scale 50'.split()

namespace = parser.parse_args(commands)

assert namespace.input.format == 'png'
assert namespace.output.format == 'gif'

智能

利用Python 3类型提示来减少解析器编写中的繁琐任务,将解析器编写缩短到两行或三行。位置参数、关键字参数、类型提示、文档字符串 - 一切都可以有意义地转换为解析器。如果您决定接管控制,只需用定义为类变量的Argument()重写自动推断的参数。

import argparse
from declarative_parser import Argument
from declarative_parser.constructor_parser import ConstructorParser

class MyProgram:

    database = Argument(
        type=argparse.FileType('r'),
        help='Path to file with the database'
    )

    def __init__(self, text: str, threshold: float=0.05, database=None):
        """My program does XYZ.

        Arguments:
          threshold: a floating-point value defining threshold, default 0.05
          database: file object to the database if any
        """
        print(text, threshold, None)

parser = ConstructorParser(MyProgram)

options = parser.parse_args()
program = parser.constructor(**vars(options))

并且它工作得相当直观

$ ./my_program.py test --threshold 0.6
test 0.6 None
$ ./my_program.py test --threshold f
usage: my_program.py [-h] [--database DATABASE] [--threshold THRESHOLD] text {} ...
my_program.py: error: argument --threshold: invalid float value: 'f'
$ ./my_program.py --threshold 0.6
usage: my_program.py [-h] [--database DATABASE] [--threshold THRESHOLD] text {} ...
my_program.py: error: the following arguments are required: text

支持三种文档字符串格式:Google、NumPy和reStructuredText,默认为Google。

PS. 它也适用于函数;请参阅FunctionParser的文档。

实用

如果您只想显示程序的许可证或版本,是否需要编写单独的逻辑?DeclarativeParser提供了一个实用装饰器:@action,它利用了argparse.Action的强大功能,省去了其他情况下必需的样板代码。

__version__ = 2.0

import argparse
from declarative_parser import action
from declarative_parser.constructor_parser import ConstructorParser

class MyProgram:

    def __init__(self, threshold: float=0.05):
        """My program does XYZ.

        Arguments:
          threshold: a floating-point value, default 0.05
        """
        pass

    @action
    def version(options):
       print(__version__)

parser = ConstructorParser(MyProgram)

options = parser.parse_args()
program = parser.constructor(**vars(options))

默认情况下,执行操作会导致程序在完成后立即退出。

以下示例供参考

$ ./my_program.py --version
2.0

更多示例请参阅文档

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

declarative_parser-0.1.3.tar.gz (12.3 kB 查看哈希值)

上传时间

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面