#python #pretty-print #command-line-tool #dataclasses

bin+lib m-o

一个用于解析 Python 数据类 repr 并进行美化输出的命令行工具

7 个版本 (1 个稳定版)

1.0.0 2019 年 11 月 18 日
0.1.5 2019 年 9 月 3 日
0.1.4 2019 年 8 月 30 日

#539 in 调试

每月下载量:24

GPL-3.0 许可证

25KB
340

m-o

m-o 是一个命令行工具,用于解析 Python 数据类reprs 并进行美化输出。名称基于 WALL-E 角色 M-O,一个喜欢整理东西的机器人。

安装

$ cargo install m-o

示例

# my_data.py

@dataclass
class Dog:
    name: str
    age: int
    friends: List[str]

pip = Dog("Pip", 7, ["Quincy", "Digger"])
print(pip)
$ # without m-o:
$ python my_data.py
Dog(name="Pip", age=7, friends=["Quincy", "Digger"])

$ # with m-o:
$ python my_data.py | m-o --columns 20
Dog(
    name="Pip",
    age=7,
    friends=[
        "Quincy",
        "Digger",
    ],
)

命令行选项

USAGE:
    m-o [OPTIONS]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -c, --columns <columns>    Specifies the width of the terminal or file that
                               the results will be printed to. If unspecified,
                               `m-o` will try to use the width of the current
                               terminal window. Defaults to 80 columns.
    -i, --indent <indent>      The number of spaces used for a single
                               indentation in the output. [default: 4]

动机

Python 的 pprint.pprint 函数允许常见值(元组、列表、字典等)进行美化输出,但不知道如何格式化 Python 3.7 的 dataclasses。我经常使用数据类,并且经常需要调试深层嵌套的数据类树。数据类的 __repr__ 方法将所有内容显示在一行上,难以阅读。

与其为你的数据类实现 pprint.pprint(谁又知道如何做这件事?),不如直接打印值并将其通过管道输入此工具。数据结构将被美化输出到你的终端。

(计划/当前) 功能

  • 解析字符串转义字符(0.1.5)
  • 使用 "Wadler-style" 美化输出算法(0.1.6)
  • 使用 pretty.rs 的稳定版本(1.0.0)
  • 添加命令行选项
    • 缩进级别(目前为 4 个空格)(0.1.7)
    • 目标宽度(列数)(0.1.7)
  • 解析失败时提供更好的错误信息
  • 允许在构造函数中包含非关键字参数(例如:Dog('Pip', age=7))(0.1.7)
  • 支持符号中的多标识符路径(例如:datetime.datetime)(0.1.7)

依赖关系

~7.5MB
~128K SLoC