轻量级控制台打印和格式化工具包
项目描述
wasabi: 轻量级控制台打印和格式化工具包
多年来,我为我们的库(如spaCy、Thinc和Prodigy)编写了无数种着色和格式化工具的实现,用于输出消息。尽管有许多其他优秀的开源选项,但我始终希望有稍微不同或稍微定制的东西。
此包仍在开发中,旨在以标准化的方式捆绑这些工具,以便可以在我们的其他项目中共享。它非常轻量,没有依赖项,并且与Python 3.6+兼容。
💬 常见问题解答
您会添加更多功能吗?
是的,还有一些辅助功能和特性需要移植。然而,新功能将主要取决于我们(认为)需要的东西。我非常欢迎对现有功能的改进的pull请求——但我希望保持这个库尽可能简单、轻量级和具体。
我可以将其用于我的项目吗?
当然,如果你喜欢,请随意使用它!但请记住,这个包非常特定,并不旨在成为一个功能齐全且可完全自定义的格式化库。如果你在寻找这样的库,你可能需要尝试其他包——例如,colored
、crayons
、colorful
、tabulate
、console
或py-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.good
、Printer.fail
、Printer.warn
、Printer.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.table
、Printer.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.code
,MarkdownRenderer.bold
,MarkdownRenderer.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 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878 |
|
MD5 | d189050c427aa0a03c8a56bab99f5dbe |
|
BLAKE2b-256 | acf9054e6e2f1071e963b5e746b48d1e3727470b2a490834d18ad92364929db3 |
wasabi-1.1.3-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c |
|
MD5 | c3b201e4bab300cafbae2c4b63cc6243 |
|
BLAKE2b-256 | 067c34330a89da55610daa5f245ddce5aab81244321101614751e7537f125133 |