跳转到主要内容

轻量级控制台打印和格式化工具包

项目描述

wasabi: 轻量级控制台打印和格式化工具包

多年来,我为我们的库(如spaCyThincProdigy)编写了无数种着色和格式化工具的实现,用于输出消息。尽管有许多其他优秀的开源选项,但我始终希望有稍微不同或稍微定制的东西。

此包仍在开发中,旨在以标准化的方式捆绑这些工具,以便可以在我们的其他项目中共享。它非常轻量,没有依赖项,并且与Python 3.6+兼容。

tests PyPi conda GitHub Code style: black

💬 常见问题解答

您会添加更多功能吗?

是的,还有一些辅助功能和特性需要移植。然而,新功能将主要取决于我们(认为)需要的东西。我非常欢迎对现有功能的改进的pull请求——但我希望保持这个库尽可能简单、轻量级和具体。

我可以将其用于我的项目吗?

当然,如果你喜欢,请随意使用它!但请记住,这个包非常特定,并不旨在成为一个功能齐全且可完全自定义的格式化库。如果你在寻找这样的库,你可能需要尝试其他包——例如,coloredcrayonscolorfultabulateconsolepy-term,仅举几个例子。

为什么叫wasabi

我在寻找一个简短且描述性的名字,但所有的好名字都已经有人使用了。所以,我最终决定以我的其中一只仓鼠的名字Wasabi来命名这个包。🐀

⌛️ 安装

pip install wasabi

🎛 API

函数 msg

Printer的一个实例,使用默认配置初始化。如果不需要自定义初始化,这是一个有用的快速快捷方式。

from wasabi import msg

msg.good("Success!")

Printer

方法 Printer.__init__

from wasabi import Printer

msg = Printer()
参数 类型 描述 默认值
pretty bool 使用颜色和图标进行美化输出。 True
no_print bool 实际上不打印,只返回。 False
colors dict 添加或覆盖颜色值,名称映射到0-256 None
icons dict 添加或覆盖图标。名称映射到unicode。 None
line_max int 最大行长度(用于分隔符)。 80
animation str Printer.loading的加载动画步骤。 "⠙⠹⠸⠼⠴⠦⠧⠇⠏"
animation_ascii str ASCII终端的替代动画。 "|/-\\"
hide_animation bool 不显示动画,例如用于日志。 False
ignore_warnings bool 不输出MESSAGE.WARN类型的消息。 False
env_prefix str 环境变量的前缀,例如WASABI_LOG_FRIENDLY "WASABI"
timestamp bool 在输出前添加时间戳。 False
返回值 Printer 初始化后的打印机。 -

方法 Printer.text

msg = Printer()
msg.text("Hello world!")
参数 类型 描述 默认值
title str 要打印的主要文本。 ""
text str 可选的附加文本。 ""
color  unicode / int 颜色名称或值。 None
icon str 要添加的图标的名称。 None
show bool 是否打印。可用于仅在设置某些条件时输出消息,例如如果设置了--verbose标志。 True
spaced bool 是否在输出周围添加换行符。 False
no_print bool 实际上不打印,只返回。覆盖全局设置。 False
exits int 如果设置,则在打印后执行系统退出,并带有给定的代码。 None

方法 Printer.goodPrinter.failPrinter.warnPrinter.info

打印特殊格式的消息。

msg = Printer()
msg.good("Success")
msg.fail("Error")
msg.warn("Warning")
msg.info("Info")
参数 类型 描述 默认值
title str 要打印的主要文本。 ""
text str 可选的附加文本。 ""
show bool 是否打印。可用于仅在设置某些条件时输出消息,例如如果设置了--verbose标志。 True
exits int 如果设置,则在打印后执行系统退出,并带有给定的代码。 None

方法 Printer.divider

打印格式化的分隔符。

msg = Printer()
msg.divider("Heading")
参数 类型 描述 默认值
text str 标题文本。如果为空,则只打印行。 ""
char str 重复的单行字符。 "="
show bool 是否打印。可用于仅在设置某些条件时输出消息,例如如果设置了--verbose标志。 True
icon str 可选的与标题一起使用的图标。 None

上下文管理器 Printer.loading

msg = Printer()
with msg.loading("Loading..."):
    # Do something here that takes longer
    time.sleep(10)
msg.good("Successfully loaded something!")
参数 类型 描述 默认值
text str 加载时显示的文本。 "加载..."

方法 Printer.tablePrinter.row

表格

属性 Printer.counts

获取特殊打印器被触发的次数,例如MESSAGES.GOOD。可用于打印概览,如"X个警告"。

msg = Printer()
msg.good("Success")
msg.fail("Error")
msg.warn("Error")

print(msg.counts)
# Counter({'good': 1, 'fail': 2, 'warn': 0, 'info': 0})
参数 类型 描述
返回值 Counter 单个特殊消息类型的计数。

表格

函数 table

格式化表格数据的轻量级辅助函数。

from wasabi import table

data = [("a1", "a2", "a3"), ("b1", "b2", "b3")]
header = ("Column 1", "Column 2", "Column 3")
widths = (8, 9, 10)
aligns = ("r", "c", "l")
formatted = table(data, header=header, divider=True, widths=widths, aligns=aligns)
Column 1   Column 2    Column 3
--------   ---------   ----------
      a1      a2       a3
      b1      b2       b3
参数 类型 描述 默认值
data iterable / dict 要渲染的数据。可以是每行一个列表的列表,也可以是用于两列表的字典。
header iterable 可选的标题列。 None
footer iterable 可选的页脚列。 None
分隔符 bool 在标题/页脚和主体之间显示分隔线。 False
宽度 可迭代 / "auto" 列宽度顺序。如果为 "auto",则宽度将根据最大值自动计算。 "auto"
max_col int 最大列宽度。 30
间距 int 列之间的空格数。 3
对齐 可迭代 / unicode 列对齐顺序。 "l"(左,默认),"r"(右)或 "c"(居中)。如果为字符串,则用于所有列。 None
多行 bool 如果单元格值是列表或元组,则在多行上渲染,每行一个值。 False
env_prefix unicode 环境变量的前缀,例如 WASABI_LOG_FRIENDLY。 "WASABI"
color_values dict 添加或覆盖颜色值,名称映射到值。 None
fg_colors iterable 前景颜色,每列一个。可以为单个列指定 None 以保留默认背景颜色。 None
bg_colors iterable 背景颜色,每列一个。可以为单个列指定 None 以保留默认背景颜色。 None
返回值 str 格式化的表格。

function row

from wasabi import row

data = ("a1", "a2", "a3")
formatted = row(data)
a1   a2   a3
参数 类型 描述 默认值
data iterable 要格式化的单个列。
宽度 list / int / "auto" 列宽度,可以是所有列的一个整数或值的可迭代序列。如果为 "auto",则宽度将根据最大值自动计算。 "auto"
间距 int 列之间的空格数。 3
对齐 list 列对齐顺序。 "l"(左),"r"(右)或 "c"(居中)。 None
env_prefix unicode 环境变量的前缀,例如 WASABI_LOG_FRIENDLY。 "WASABI"
fg_colors list 列的前景颜色,顺序。可以为单个列指定 None 以保留默认前景颜色。 None
bg_colors list 列的背景颜色,顺序。可以为单个列指定 None 以保留默认背景颜色。 None
返回值 str 格式化的行。

class TracebackPrinter

输出自定义格式化的回溯和错误消息的辅助工具。目前在 Thinc 中使用。

method TracebackPrinter.__init__

初始化回溯打印器。

from wasabi import TracebackPrinter

tb = TracebackPrinter(tb_base="thinc", tb_exclude=("check.py",))
参数 类型 描述 默认值
color_error str / int 错误的颜色名称或代码(传递给 color 辅助工具)。 "red"
color_tb str / int 回溯标题的颜色名称或代码(传递给 color 辅助工具)。 "blue"
color_highlight str / int 高亮文本的颜色名称或代码(传递给 color 辅助工具)。 "yellow"
indent int 缩进使用的空格数。 2
tb_base str 用于显示相对路径的目录名称。例如,"thinc" 将在路径中查找 "/thinc/" 的最后出现,并仅显示该路径右侧的部分。 None
tb_exclude tuple 要排除回溯的文件名列表。 tuple()
返回值 TracebackPrinter 回溯打印器。

method TracebackPrinter.__call__

输出自定义格式化的回溯和错误。

from wasabi import TracebackPrinter
import traceback

tb = TracebackPrinter(tb_base="thinc", tb_exclude=("check.py",))

error = tb("Some error", "Error description", highlight="kwargs", tb=traceback.extract_stack())
raise ValueError(error)
  Some error
  Some error description

  Traceback:
  ├─ <lambda> [61] in .env/lib/python3.6/site-packages/pluggy/manager.py
  ├─── _multicall [187] in .env/lib/python3.6/site-packages/pluggy/callers.py
  └───── pytest_fixture_setup [969] in .env/lib/python3.6/site-packages/_pytest/fixtures.py
         >>> result = call_fixture_func(fixturefunc, request, kwargs)
参数 类型 描述 默认值
title str 消息标题。
*texts str 可选文本,每行打印一个。
highlight str 可选的序列,用于在回溯中高亮显示,例如导致错误的坏值。 False
tb iterable 回溯,例如由 traceback.extract_stack() 生成。 None
返回值 str 格式化的回溯。可以通过自定义异常打印或抛出。

class MarkdownRenderer

创建 Markdown 格式化内容的辅助工具。将按顺序存储添加到 Markdown 文档中的块。

from wasabi import MarkdownRenderer

md = MarkdownRenderer()
md.add(md.title(1, "Hello world"))
md.add("This is a paragraph")
print(md.text)

method MarkdownRenderer.__init__

初始化 Markdown 渲染器。

from wasabi import MarkdownRenderer

md = MarkdownRenderer()
参数 类型 描述 默认值
no_emoji bool 不在标题中包含表情符号。 False
返回值 MarkdownRenderer 渲染器。

method MarkdownRenderer.add

将块添加到 Markdown 文档中。

from wasabi import MarkdownRenderer

md = MarkdownRenderer()
md.add("This is a paragraph")
参数 类型 描述 默认值
text str 要添加的内容。

property MarkdownRenderer.text

渲染的 Markdown 文档。

md = MarkdownRenderer()
md.add("This is a paragraph")
print(md.text)
参数 类型 描述 默认值
返回值 str 单个字符串的文档。

method MarkdownRenderer.table

创建 Markdown 格式化的表格。

md = MarkdownRenderer()
table = md.table([("a", "b"), ("c", "d")], ["Column 1", "Column 2"])
md.add(table)
| Column 1 | Column 2 |
| --- | --- |
| a | b |
| c | d |
参数 类型 描述 默认值
data Iterable[Iterable[str]] 主体,每行一个可迭代对象,包含列内容的可迭代对象。
header Iterable[str] 列名。
对齐 Iterable[str] 列对齐顺序。 "l"(左,默认),"r"(右)或 "c"(居中)。 None
返回值 str 表格。

方法 MarkdownRenderer.title

创建Markdown格式的标题。

md = MarkdownRenderer()
md.add(md.title(1, "Hello world"))
md.add(md.title(2, "Subheading", "💖"))
# Hello world

## 💖 Subheading
参数 类型 描述 默认值
级别 int 标题级别,例如 3 对应 ###
text str 标题文本。
表情符号 str 可选的表情符号,用于在标题前显示。 None
返回值 str 渲染的标题。

方法 MarkdownRenderer.list

创建Markdown格式的非嵌套列表。

md = MarkdownRenderer()
md.add(md.list(["item", "other item"]))
md.add(md.list(["first item", "second item"], numbered=True))
- item
- other item

1. first item
2. second item
参数 类型 描述 默认值
项目 Iterable[str] 列表项。
编号 bool 是否使用编号列表。 False
返回值 str 渲染的列表。

方法 MarkdownRenderer.link

创建Markdown格式的链接。

md = MarkdownRenderer()
md.add(md.link("Google", "https://google.com"))
[Google](https://google.com)
参数 类型 描述 默认值
text str 链接文本。
url str 链接URL。
返回值 str 渲染的链接。

方法 MarkdownRenderer.code_block

创建Markdown格式的代码块。

md = MarkdownRenderer()
md.add(md.code_block("import spacy", "python"))
```python
import spacy
```
参数 类型 描述 默认值
text str 代码文本。
lang str 可选的代码语言。 ""
返回值 str 渲染的代码块。

方法 MarkdownRenderer.codeMarkdownRenderer.boldMarkdownRenderer.italic

创建Markdown格式的文本。

md = MarkdownRenderer()
md.add(md.code("import spacy"))
md.add(md.bold("Hello!"))
md.add(md.italic("Emphasis"))
`import spacy`

**Hello!**

_Emphasis_

工具

函数 color

from wasabi import color

formatted = color("This is a text", fg="white", bg="green", bold=True)
参数 类型 描述 默认值
text str 要格式化的文本。 -
fg str / int 前景色。字符串名称或 0 - 256 None
bg str / int 背景色。字符串名称或 0 - 256 None
粗体 bool 将文本格式化为粗体。 False
下划线 bool 通过下划线格式化文本。 False
返回值 str 格式化的字符串。

函数 wrap

from wasabi import wrap

wrapped = wrap("Hello world, this is a text.", indent=2)
参数 类型 描述 默认值
text str 要包装的文本。 -
wrap_max int 最大行宽,包括缩进。 80
indent int 用于缩进的空格数。 4
返回值 str 带有换行的包装文本。

函数 diff_strings

from wasabi import diff_strings

diff = diff_strings("hello world!", "helloo world")
参数 类型 描述 默认值
a str 要比较的第一个字符串。
b str 要比较的第二个字符串。
fg str / int 前景色。字符串名称或 0 - 256 "black"
bg tuple 背景颜色作为 (插入, 删除) 的字符串名称或 0 - 256 的元组。 ("green", "red")
返回值 str 格式化的差异。

环境变量

Wasabi 还尊重以下环境变量。可以在 Printer 中通过 env_prefix 参数自定义前缀。例如,将 env_prefix="SPACY" 设置为将期望环境变量 SPACY_LOG_FRIENDLY

名称 描述
ANSI_COLORS_DISABLED 禁用颜色。
WASABI_LOG_FRIENDLY 使输出更美观(无颜色,无动画)。
WASABI_NO_PRETTY 禁用美化打印,例如颜色和图标。

🔔 运行测试

分叉或克隆存储库,确保您已安装 pytest 并在包目录上运行它。测试位于 /wasabi/tests

pip install pytest
cd wasabi
python -m pytest wasabi

项目详情


下载文件

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

源分布

wasabi-1.1.3.tar.gz (30.4 KB 查看散列值

上传时间

构建分布

wasabi-1.1.3-py3-none-any.whl (27.9 KB 查看散列值

上传时间 Python 3

支持