[英]Airflow custom jinja2 filters
我正在尝试为我的气流jinja2模板添加自定义过滤器。
因为我在S3中的文件夹就像
/年月日/
,我的目的是在变量屏幕中使用yesterday_ds,如下所示:
s3://logs.web.com/AWSLogs/ {{yesterday_ds | get_year}} / {{yesterday_ds | get_month}} / {{yesterday_ds | get_day}} /
我见过的PR(我认为这是已经合并..),你可以在DAG对象创建的dag_args参数参数“user_defined_filters”做到这一点这里
问题是,即使这样做,它也会说“没有名为get_year的过滤器”。
这是我的代码:
dag.py
dag = DAG(
dag_id='dag-name',
default_args=utils.get_dag_args(user_defined_filters=utils.get_date_filters()),
template_searchpath=tmpl_search_path,
schedule_interval=timedelta(days=1),
max_active_runs=1,
)
utils.py
def get_dag_args(**kwargs):
return {
'owner' : kwargs.get('owner', 'owner_name'),
'depends_on_past' : kwargs.get('depends_on_past', False),
'start_date' : kwargs.get('start_date', datetime.now() - timedelta(1)),
'email' : kwargs.get('email', ['blabla@blabla.com']),
'retries' : kwargs.get('retries', 5),
'provide_context' : kwargs.get('provide_context', True),
'retry_delay' : kwargs.get('retry_delay', timedelta(minutes=5)),
'user_defined_filters': get_date_filters()
}
def get_date_filters():
return dict(
get_year=lambda date_string: date_string.strftime('%Y'),
get_month=lambda date_string: date_string.strftime('%m'),
get_day=lambda date_string: date_string.strftime('%d'),
)
有人看到我弄错了吗? 谢谢!
编辑
在dag定义后打印这个,不幸的是显示没有自定义过滤器:(。
jinja_env = dag.get_template_env()
print(jinja_env.filters)
此外,如果我尝试将其直接添加为DAG对象参数,如test @ tests / models.py中所示:
Broken DAG: [/home/ubuntu/airflow/dags/dag.py] __init__() got an unexpected keyword argument 'user_defined_filters'
编辑2
好吧,我看到的是我有1.8.0版本,而且这个没有过滤器。 有谁知道如何通过点子下载1.8.2rc? 或者我们不能?
Airflow现在支持自定义过滤器和宏
工作代码示例:
from airflow import DAG
from datetime import datetime, timedelta
def first_day_of_month(any_day):
return any_day.replace(day=1)
def last_day_of_month(any_day):
next_month = any_day.replace(day=28) + timedelta(days=4) # this will never fail
return next_month - timedelta(days=next_month.day)
def isoformat_month(any_date):
return any_date.strftime("%Y-%m")
with DAG(
dag_id='generate_raw_logs',
default_args=default_args,
schedule_interval=timedelta(minutes=120),
catchup=False,
user_defined_macros={
'first_day_of_month': first_day_of_month,
'last_day_of_month': last_day_of_month,
},
user_defined_filters={
'isoformat_month': isoformat_month
}
)
气流包装名称已在点子上更改。 1.8.2rc1可以使用pip install apache-airflow下载。
另请注意,根据填充列表,他们目前正在努力将1.8.2rc4发布为1.8.2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.