让原木流动

aina的Python项目详细描述


艾娜

https://img.shields.io/travis/ilovetux/aina.svgdocumentation status

aina是一个通用的流处理框架。它包括 一个简单但强大的模板系统,它可以执行versitle命令 线路实用程序。

注意:这是新代码。师父在不断变化,缺少文件, 但在某种程度上,它可能对某人有用。如果 这对你很有用,帮助我们达到1.0.0。你可以从阅读开始 投稿指南,网址:https://github.com/ilovetux/aina/contribution.rst" rel="nofollow">https://github.com/ilovetux/aina/contribution.rst

  • 自由软件:GNU通用公共许可v3
  • 文档:https://aina.readthedocs.io rel="nofollow">https://aina.readthedocs.io

功能

  • 简单、强大的模板系统
  • 命令行实用程序
  • python的所有功能
  • 没有黑客或魔法
  • 可接近的源代码
  • 测试
  • 待办事项:Web用户界面
  • TOdo:涵盖了许多默认用例
  • 待办事项:–无覆盖选项

安装

您可以使用以下命令安装最新的稳定版本:

$ pip install aina

或者,要克隆最新的开发版本:

$ git clone https://github.com/ilovetux/aina
$ cd aina
# Optional
$ python setup.py test
$ pip install .

概念

内置的模板引擎非常简单,它包括 命名空间和模板的。模板在 命名空间的上下文。

渲染包括两个阶段:

< Buff行情>
  1. 扫描模板以查找与模式匹配的字符串 {%<;source>;%} 其中, <;source>; 是执行的python源代码( exec ) 在命名空间的上下文中。在执行期间,stdout是 捕获。执行后, {%<;source>;%} 将替换为字符串 包含输出。
  2. 扫描剩余输出以查找与模式匹配的字符串 {{<;expression>;} 其中 <;expression>; 是一个python表达式,它 替换为其计算的值( eval

例如,让我们看一下下面的模板:

{%
me = "iLoveTux"
name = "Bill"
age = 35
%}
hello {{name}}:

I heard that you just turned {{str(age)}}. Congratulations!

Sincerely:

{% print(me) %}

如果已呈现,则输出如下:

Hello Bill,

I heard that you just turned 35. Congratulations!

Sincerely:

iLoveTux

这个概念应用于各种用例,具体表现为 包含许多常见用例的命令行实用程序。

用法

aina可以直接从python中使用,就像这样:

from aina import render

namespace = {"foo": "bar"}
template = "The value of foo is {{foo}}"

result = render(template, namespace)

这种用法有一流的支持,但更简单的解决方案是使用 提供的cli。

命令行实用程序aina可以在两种模式下运行:

< Buff行情>
  1. 流模式:数据流式传输并用于填充模板
  2. 文档模式:呈现文件src并将结果写入dst

流模式

流模式按以下方式运行:

< Buff行情>
  1. 接受 文件名列表 (接受通配符),默认为stdin
  2. 此时,任何传递到 –begins的表达式都将执行
  3. 指定的文件按顺序处理
< Buff行情>
  1. 传递到 –begin files 的任何表达式都将执行
  2. <李>当前文件中的数据是逐行读取的
< Buff行情>
  1. 通过 测试的任何语句都将被评估
  2. 如果所有测试都通过,则执行以下过程。
< Buff行情>
  1. 任何传递到 –开始行的表达式都将执行
  2. 任何模板都是通过python日志系统呈现的
  1. 任何传递到 的表达式都将执行结束行
  1. 传递到 的任何表达式都将执行结束文件
  1. 传递到 –ends 的任何表达式都将执行

下面是几个例子。有关详细信息,请参阅文档:

# Like grep
$ aina stream --test "'error' in line.lower()" --template "{{line}}" *.log

# Like wc -l
$ aina stream --end-files "print(fnr, filename)" *.log

# Like wc -wl
$ aina stream --begins "words=0" --begin-lines "words += nf" --end-files "print(words, fnr, filename)"

# Find all numbers "\d+" for each line
$ aina stream --begins "import re" --begin-lines "print(re.findall(r'\d+', line))" *.log

# Run an XPath
$ aina stream --begins "from lxml import etree" --begin-lines "tree = etree.fromstring(line)" --templates "{{"\n".join(tree.xpath("./*"))}}"

请参阅文档了解更多信息并尝试:

$ aina stream --help

重要提示:

如果传递给任何钩子的任何内容被 os.path.exists确定为存在 然后,它将被读取并执行,就像该文本是在cli上传入的一样。这个 有助于快速解决字符转义问题。

文档模式

文档模式将一个或多个文件和/或目录呈现到 另一个位置。它的用法如下:

$ aina doc <src> <dst>

有控制行为的选项,但要点是:

< Buff行情>
  1. 如果src是文件
< Buff行情>
  1. 如果dst是文件名,则src将呈现并写入dst
  2. 如果dst是一个目录,src将被呈现并写入dst中与src具有相同基名的文件中
  1. 如果src是一个目录
< Buff行情>
  1. dst必须是一个目录,src中的每个文件都呈现为dst中与src中的文件同名的文件
  2. 如果指定了 –recursive ,则子目录将在dst中复制

一些重要注意事项:

  • 如果 –interval 被传递了一个整数值,程序将休眠那么多秒并检查模板的更改(基于文件的mtime),在这种情况下,它们将被重新呈现

用例

流模式非常适合处理 tail–follow=name的传入日志文件 或用于文本文件的特殊分析。

文档模式对于强大的配置模板非常有用 系统。 –interval 选项非常有用,因为它只会重新呈现 在文件更改时,这对于开发模板非常有用,因为您可以查看 结果几乎是实时的。

文档模式对于静态 网络资源,如图表、表格、仪表板等。

如果您发现更多的用例,请打开一个问题或请求添加它 在这里和wiki中

学分

作者:伊洛维托 这个包是用cookiecutter和项目模板创建的。

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

推荐PyPI第三方库


热门话题
在通过REST Api发送之前,java是否会操纵map中键的顺序?   java实时代码编译?   java在尝试使用JavaFX制作东西时获得0xC0000409   java截图并返回servlet?   java哪个用户认证集成安全性?   SpringJavaMailSender和MS Exchange:java。lang.noclassdeffounderror:com。太阳邮政uti。邮件记录器   Linux上的Java小程序无法获得权限   java如何获得一行(范围)中字符串的组合?   媒体播放器的java意图过滤器(Youtube视频播放)   java如何明确地确定文件是否不是我想要的类型?   Java 8中并发异步方法后跟并行执行方法