Apache Airflow 任务中使用模板或上下文

本文大概记录一下在 Apache Airflow 的 Task 或 Operator(这两个基本是同一概念) 中如何使用 模板(Template) 和上下文(Context). Airflow 的模板引擎用的  Jinja Template, 它也被 FastAPI 和 Flask 所采纳。首先只有构造 Operator 时的参数或参数指定的文件内容中,或者调用 Operator render_template() 方法才能用模板语法,像 {{ ds }}.  Apache Airflow 有哪些模板变量可用请参考: Templates references / Variables, 本文将会打印出一个 Task 的 context 变量列出所有可用的上下文变量, 不断的深入,最后在源代码找到相关的定义。

通过使用模板或上下文,我们能能够在任务中使用到 Apache Airflow 一些内置的变量值,如 DAG 或任务当前运行时的状态等 。

当我们手动触发一个 DAG 时, 在 Configuration JSON 中输入的参数也能在 context 中找到. 所有的 Operator  继承链可追溯到 AbstractOperator -> Templater, 因此所有的 Operator(Task) 都能通过调用 Templater.render_template() 方法对模板进行渲染,该方法的原型是 阅读全文 >>

Play2 自定义模板类型 (Java&Scala)

Play2 默认支持的模板类型是 html, txt, xml 和 js,不在这些支持之列的模板文件即使放到 app/views 目录中,也不会被编译的。如果要支持自定义的模板类型就要些定制了,这比 Play1 复杂些。模板的定制包括在 Build.scala 或 build.sbt 中加上 templatesTypes 配置,并需创建 BufferedContent 和 Format 实现类。下面以增加 json 模板类型为例,兼顾 Scala 和 Java 的实现类,是基于 Play2.2 的,在 Play2.3 中又略有不同。

官方有相关的文档,参考:Custom formats on Scala, Custom formats on Java模板定义参考.

在较新一些的 2.2 的 PlaySettings 中,可以看到

弄清了上面的原理后,开始我们的步骤

第一步:修改项目构建文件

在构建文件 build.sbt 或 Build.scala 中增加下面的内容作为项目的 setting 阅读全文 >>

掌握一种 C#/.Net 模板技术 — Velocity

前面写过一篇关于 Java 中使用 Velocity 模板的文章:掌握一种Java模板技术 -- Velocity,现在要考究一下 C# 中怎么使用相应的 nVelocity 模板。

当目光转移到了 C#/.Net 之后,但凡想要找个某个功能组件时都会联想到,曾经在 Java 中用过什么,.Net 中应该会有它相应的实现,例如 Spring.Net, nHibernate, iTextSharp,还有这里的 nVelocity,特点就是组件名一般是 .Net 结尾或 n 字打头。

还是依照原来的例子,从 http://sourceforge.net/projects/nvelocity/files/ 下载 nVelocity 组件,当前版本是 NVelocity-0.4.2.8580。下载后解压,在你的项目中引入 build 目录中的 NVelocity.dll,如果是 web 项目中用 nVelocity,可附加引入 NVelocity.Http.dll。 阅读全文 >>