首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不支持简单的http运算符头值jinja模板

不支持简单的http运算符头值jinja模板
EN

Stack Overflow用户
提问于 2019-06-25 20:03:35
回答 1查看 579关注 0票数 0

我尝试使用我的自定义http操作符(扩展simpleHttpOperator )在我的http请求的headers值中使用模板。似乎只在数据字段中支持模板。如何在headers字段中实现同样的功能。我想要传递模板化的授权头。请在下面找到我的代码。

import airflow
from airflow import DAG
from airflow.configuration import conf
from airflow.operators.python_operator import PythonOperator
from airflow.operators.auth_plugins import SipAuthOperator
from airflow.operators.util_plugins import AuthUtility


DEFAULT_VERSION = '2.0'

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': airflow.utils.dates.days_ago(2),
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False

}

DAG_ID = 'test_dag'
dag = DAG(DAG_ID, default_args=default_args,
          schedule_interval=None,
          catchup=False)
dag.doc_md = __doc__

auth_endpoint = conf['auth_apis']['authenticate_end_point']

def inspect_params(**context):
    token = context['task_instance'].xcom_push(key='JWT_TOKEN',value='helloooo'
                                       )
    print(token)

test_operator = PythonOperator(dag=dag,task_id='init_api',
                                       python_callable=inspect_params,
                                       provide_context=True, )

# data={'token':'{{task_instance.xcom_pull(key=\'JWT_TOKEN\')}}'}
# {'Authorization':'Bearer '+'{{task_instance.xcom_pull(key=\'JWT_TOKEN\')}}'
http_operator = SipAuthOperator( dag=dag,task_id='authenticate_api',http_conn_id='auth_api',endpoint=auth_endpoint,headers={'token':'{{task_instance.xcom_pull(key=\'JWT_TOKEN\')}}'})

test_operator >> http_operator

标头值以{'token': "{{task_instance.xcom_pull(key='JWT_TOKEN')}}"}的形式出现,但不像描述的那样。如果我在数据字段中输入相同的值,它就会像预期的那样正常工作。头文件是否支持jinja模板?有没有解决这个问题的办法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-26 08:39:57

运算符中的template_fields属性决定了哪些参数可以模板化。例如,在原始SimpleHttpOperator中,您可以看到以下内容

class SimpleHttpOperator(BaseOperator):
    ...
    template_fields = ('endpoint', 'data',)
    ...

这就是为什么endpointdata是受支持的模板字段。类似地,在您的自定义操作符中,您将希望包含header

class SipAuthOperator(SimpleHttpOperator):
    ...
    template_fields = ('endpoint', 'data', 'header',)
    ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56753633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档