шаблон потока воздуха становится строкой - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь использовать шаблоны jinja, чтобы проанализировать некоторые json, найденные в xcom, в словарь.Обратите внимание, что Operator и templated_field являются псевдо-кодом.

def xcom_from_json(xcom):
    xcom_loaded = json.loads(xcom)
    logging.info(pformat(f'xcom loaded: {xcom_loaded}', indent=3))
    return xcom_loaded

PythonOperator(python_callable=some_callable,
           op_args=[f'{{{{ (ti.xcom_pull("{task_id}") | xcom_from_json)["data"]["stats"] }}}}'])

Выше работает почти.В методе some_callable я получаю анализируемое дзиндзя, но оно получается как строковый, а не необработанный.Это не имеет смысла, потому что вы можете видеть структуру, проходящую как dict в шаблоне jinja.Джинджа преобразует в строку все, что выходит из шаблона?Если да, есть ли способ этого не делать?

1 Ответ

0 голосов
/ 22 сентября 2018

Визуализированный шаблон jinja всегда будет возвращать строку.Вместо этого вы можете вместо этого извлечь значение XCom из метода python.

def some_callable(task_id, **context):
    stats = json.loads(context['ti'].xcom_pull(task_id)['data']['stats'])

PythonOperator(
    ...
    python_callable=some_callable,  
    op_args=[f'{task_id}'],
    provide_context=True)

Обратите внимание, что вы должны предоставить контекст, который дает методу python такой же доступ к значениям, которые имеет шаблон jinja.

...