一个非常简单的代码生成器。

agen的Python项目详细描述


一个非常简单的代码生成器。

Latest VersionTravis CI StatusCodecov StatusDoc Status

功能

  • 简单且非常简单的api
  • 支持自定义Jinja Env
  • 可以用作命令行工具

无模板

agen不提供任何模板。只是提供了一些功能, 使代码成为模板。如果您需要任何公共模板,请 使用很棒的开源工具, Cookiecutter

为什么是agen?

agen是如此轻巧,可以完美地集成到您的 在几分钟内完成项目。

我喜欢Cookiecutter(它是 太酷了,太棒了),但是它的大部分功能都太重了 为了我。

安装

使用pip安装:

pip install agen

使用源代码安装:

clone https://github.com/yufeiminds/agen.git
cd agen
python setup.py install

快速入门指南

agen中,使用jinja2作为 用于呈现的模板引擎,因此 jinja2模板将在 agen

文件生成

fromagenimport(string_render,render,generate,generate_dir)# Render text from a templated stringstring_render('{{key}}',{'key':'value'})>'value'cattemplate.py>{{key}}# Render text from a template filerender('template.py',{'key':'value'})>'value'# Generate file from a template filegenerate('template.py','output.py',{'key':'value'})# Content of output.pyvalue

目录生成

如果我们有这样的目录:

directory
├── __init__.py
└── {{key}}.py

调用generate_dir函数:

generate_dir('directory','mydir',{'key':'value'})

将生成

mydir
├── __init__.py
└── value.py

每个纯文本文件都将由模板引擎呈现。上下文{'key': 'value'}也将自动呈现。

命令行工具

基本用法

agen还实现了一个非常简单的命令行工具,用于 很容易呈现本地模板,但它只能在*unix上使用 操作系统。

Usage: agen [OPTIONS] [NAMES]...

Options:
  -o, --out PATH      Output path or directory
  -s, --source PATH   Source path or directory
  -c, --context PATH  Path of context file
  --help              Show this message and exit.

没有参数,agen将搜索本地模板目录,例如。 在*nix操作系统上,此目录通常位于:

$ agen
--------------------------------------------
  agen Library
  see -> /Users/yufeili/.agen/templates
--------------------------------------------
directory   repo        single.txt

最简单的呼叫方式:

$ agen -s template_path -o ouput_path -c context.json

当然,.yaml也可以用作context文件。如果out 未提供选项,它将在屏幕上提示输入(默认为 当前目录)。

完整示例

您可以指定三种目录或文件作为source

单个文件

$ agen -s single.txt -o output.txt -c context.json

目录

任何目录,如

directory
├── __init__.py
└── {{key}}.py

两者都可以是source,它还支持使用模板变量 呈现输出文件名。

$ agen -s directory -o myapp -c context.json

此命令将创建名为myapp的目录,并处理 递归地将directory下的所有文件输出到myapp基 关于起源结构。

存储库

注意

agen不是作为命令行工具设计的,因此对于生成存储库,建议使用awesomeCookiecutter

如果目录中有一个内部文件夹,并且该目录具有 agen.jsonagen.yaml,将被判断为 Repo

repo
├── README.md
├── agen.json
└── {{name}}
    ├── __init__.py
    └── {{name}}.py

此工具的默认行为将被更改,假设 repo

$ agen -s repo -o output -c context.json
  • 此命令将创建一个与inner同名的文件夹 目录到output目录,如果文件夹的名称是 模板字符串,它将被编译为标准字符串,然后创建 文件夹,其他行为与directory相同。
  • 不需要context。如果没有提供,它将加载 agen.[json|yaml]文件,并提示用户输入。

示例

对于context{'key': 'value'}output是当前的 目录,当前值:

.
└── value
    ├── __init__.py
    └── value.py
本地模板目录

使用选项参数NAMES,可以从本地模板获取文件路径 目录为source。以下两个调用在 *NIX系统:

$ agen -s ~/.agen/templates/single.txt
$ agen single.txt

学分

  • 作者:李宇飞yufeiminds@gmail.com
  • 联系我:@yufeiminds(facebook)、@yufeiminds(新浪微博)
贡献

欢迎与我一起发展!

分叉此回购并开发它。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener