выполнение_Джинджа разрешается в виде строки - PullRequest
0 голосов
/ 09 июля 2019

У меня есть знак потока воздуха, который использует следующий шаблон дзиндзя: "{{ execution_date.astimezone('Etc/GMT+6').subtract(days=1).strftime('%Y-%m-%dT00:00:00') }}"

Этот шаблон работает в других пакетах и ​​работает, когда schedule_interval для тега установлен на timedelta(hours=1). Однако, когда мы устанавливаем интервал расписания на 0 8 * * *, он генерирует следующую трассировку во время выполнения:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/airflow/models/__init__.py", line 1426, in _run_raw_task
    self.render_templates()
  File "/usr/lib/python2.7/site-packages/airflow/models/__init__.py", line 1790, in render_templates
    rendered_content = rt(attr, content, jinja_context)
  File "/usr/lib/python2.7/site-packages/airflow/models/__init__.py", line 2538, in render_template
    return self.render_template_from_field(attr, content, context, jinja_env)
  File "/usr/lib/python2.7/site-packages/airflow/models/__init__.py", line 2520, in render_template_from_field
    for k, v in list(content.items())}
  File "/usr/lib/python2.7/site-packages/airflow/models/__init__.py", line 2520, in <dictcomp>
    for k, v in list(content.items())}
  File "/usr/lib/python2.7/site-packages/airflow/models/__init__.py", line 2538, in render_template
    return self.render_template_from_field(attr, content, context, jinja_env)
  File "/usr/lib/python2.7/site-packages/airflow/models/__init__.py", line 2514, in render_template_from_field
    result = jinja_env.from_string(content).render(**context)
  File "/usr/lib64/python2.7/site-packages/jinja2/environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "/usr/lib64/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "<template>", line 1, in top-level template code
TypeError: astimezone() argument 1 must be datetime.tzinfo, not str

Похоже, что дата выполнения передается в виде строки, а не объекта datetime; но я могу поразить эту ошибку только на этом конкретном даге, а не на других. Я попытался полностью удалить метку и воссоздать ее безуспешно.

1 Ответ

1 голос
/ 11 июля 2019

Похоже, что astimezone(..) функция работает неправильно, она ожидает datetime.tzinfo, пока вы передаете ей аргумент str ('Etc/GMT+6')

TypeError: astimezone() argument 1 must be datetime.tzinfo, not str

Хотя я не мог заставить работать точную вещь, я считаю, что следование дает почти тот же эффект, что и то, что вы пытаетесь

{{ execution_date.in_timezone("US/Eastern") - timedelta(days=1) }}

Вспомните, что

  • execution_date макрос это Pendulum объект
  • in_timezone(..) преобразует его в datetime.datetime(..)
  • , тогда мы просто добавляем к нему datetime.timedelta(days=1)
...