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

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第三方库


热门话题
java广播接收器未检测到按键事件   java不为特定列更改创建修订   java采用了更实用的方法   java桌面窗格HTML呈现   java处理internet连接丢失   java在调整JFrame的大小时,如何防止JTable的列调整大小?   如何用Java中的“Scanner.hasNext”完成程序   具有模块名称的java停止IntelliJ项目工具窗口?   执行已编译的Rails-Warbler JAR文件时发生java加载错误   java Spring数据redis存储库不支持集合查询?   每个客户端的java队列请求   获取Java中的JSON嵌套数组元素   java GWT,Vaadin ConcurrentModificationException   firebase存储中的java在保存照片之前,我需要发送两次照片   JavaSpringEleaf如何在容器外使用变量