#dataset #template #generator #random #json #command-line-tool

bin+lib jen

用于创建大型数据集的简单 CLI 生成工具

11 个稳定版本

1.7.0 2024年1月5日
1.6.0 2023年4月30日
1.5.0 2022年6月7日
1.3.1 2021年11月29日
1.0.0 2019年6月13日

#57 in 模板引擎


用于 runiq

MIT 许可协议

31KB
360

Jen

Build Status Crates.io

Jen 是一个简单的(但可扩展的)用于生成大型随机数据集的工具。

Jen 是一个核心库和 CLI 的组合,用于根据模板生成随机数据集。虽然已经存在一些这样的工具,但它们大多数都在浏览器中运行,自然不足以生成大量数据。Jen 的创建是为了填补创建大量数据的空白,例如用于单元测试和数据库状态。

Jen 的底层模板语法由 Tera 驱动,以帮助熟悉并避免重新发明模板语言。在此之上,Jen 提供了许多围绕随机化数据的功能。其中一些功能基于 fake,并在存在空白的地方提供额外的功能。您在使用 Jen 时可以自然地附加自己的功能。

安装

Jen 可通过 Crates.io 获得,因此可以直接从那里安装。您可以将 Jen 作为命令行工具或直接通过程序 API 使用。

如果您想将 Jen 安装为命令行工具,您可以通过终端中的一行轻松安装

$ cargo install jen

如果您想将其作为库使用,可以将它添加到您的 Cargo.toml 中,作为您应用程序的依赖项

[dependencies]
jen = { version = "1.6", default-features = false }

您应该禁用默认功能,因为它包含多个依赖项,这些依赖项是 CLI 用例所需的。当禁用这些功能时,不会将依赖项包含在您的应用程序中。

用法

第一步是构建一个模板文件,Jen在生成数据时会使用这个文件。默认情况下,提供了许多模板助手,这些助手通过内部的jen::helpers模块提供。您可以查看文档以获取最新的助手列表,尽管可以在下面找到相当最新的助手表。以下。一旦有了这个模板,您可以通过CLI或编程方式使用Jen。

命令行

CLI相当简单,其基本结构为

$ jen <template>

使用此语法将基于提供的模板(必须是一个有效的Tera模板)生成随机文档。在example目录中有一个基本文档可以进行测试。

您可以通过提供以下选项来调整输出(在撰写本文时,可能有更多)

USAGE:
    jen [FLAGS] [OPTIONS] <template>

FLAGS:
    -h, --help       Prints help information
    -t, --textual    Treat the input as textual, rather than JSON
    -V, --version    Prints version information

OPTIONS:
    -l, --limit <limit>        An upper limit of documents to generate

ARGS:
    <template>    Template to control JSON generation

尽管Jen可以处理任何输入格式,但它最初是针对JSON文档编写的。因此,Jen将自动尝试解析输入(生成后)为JSON,以便压缩并按行输出文档。这种检测有一定量的开销,可以通过提供-t来跳过,如果您明确不希望将传入的数据视为JSON。

有关完整且最新的选项列表,请在终端中使用jen -h

编程API

编程API非常简单。一切通过使用Generator结构体来处理,它实现了Iterator特质以提供连续(懒)文档。

生成器通过磁盘上模板的路径构建,然后您可以使用以下所示的Iterator方法生成文档。

let mut generator = Generator::load("./example/example.tera")
    .expect("provided a value template");

for document in generator.take(5) {
    println!("{}", document);
}

这将从提供的模板生成五个文档并将它们打印到终端。

模板助手

以下是在撰写本文时的当前助手列表。请参阅上传到Crates.io的文档以获取最新列表。

助手 描述
bool() 生成随机布尔值
city() 生成随机城市名称
company() 生成随机公司名称
domain() 生成随机域名
email() 生成随机电子邮件地址
firstName() 生成随机名字
float(start=f64::MIN, end=f64::MAX) 在两个边界之间生成随机浮点数
index() 检索生成文档的当前索引
industry() 生成随机行业类型
integer(start=i64::MIN, end=i64::MAX) 在两个边界之间生成随机整数
lastName() 生成随机姓氏
latitude() 生成随机纬度位置值
longitude() 生成随机经度位置值
name() 生成随机全名
nanoid(length=21) 生成给定长度的随机nanoid
objectId() 生成随机对象标识符
paragraph() 生成随机Lorem Ipsum段落
phone() 生成随机电话号码
postcode() 生成随机邮政编码
profession() 生成随机职业
random(values=["red","blue","yellow"]) 从提供的值中检索随机值
sentence() 生成随机Lorem Ipsum句子
state() 检索随机美国州名
stateCode() 检索随机美国州代码
street() 生成随机街道名称
timestamp() 生成一个以秒为单位的随机时间戳值
title() 生成一个随机的职位名称
userAgent() 生成一个随机的浏览器用户代理
username() 生成一个随机的账户用户名
uuid() 生成一个 v4 UUID
word() 检索一个 Lorem Ipsum 随机单词
zip() 生成一个随机的美国邮政编码

依赖项

~12–22MB
~314K SLoC