Поддержка воздушного потока Шаблоны Jinja в операторах. Он встроен в BaseOperator и управляется полями template_fields
и template_ext
базового оператора, например:
class CustomEmailOperator(BaseOperator):
template_fields = ("html_content")
template_ext = (".html",)
@apply_defaults
def __init__(self, html_content, ...):
super().__init__(*args, **kwargs)
self.html_content = html_content
def execute(self, context):
# Rest of operator code, nothing special needs to happen to render the templates
Теперь поле html_content может быть либо путем к файлу шаблона jinja с .html
расширение или html строка напрямую. Параметры могут быть переданы в шаблон Jinja с помощью поля params
оператора:
task1 = CustomEmailOperator(
task_id = "task1",
html_content = "Hello, {{ params.name }}",
params = {
"name": "John",
},
...
)
Таким образом вы можете передать имя файла и количество параметров строк. Если вы не хотите полагаться на механизм BaseOperator для создания шаблонов содержимого электронной почты, например, потому что вам нужно немного больше контроля, вы также можете использовать вспомогательную функцию, доступную в Airflow:
from airflow.utils.helpers import parse_template_string
html_content = "Hello, {{ params.name }}"
_, template = parse_template_string(html_content)
body = template.render({"name": "John"})