airflow docs建议对DAG文件进行基本的健全性检查来解释它。即:
$ python ~/path/to/my/dag.py
我发现这很有用。但是,现在我已在MordorOperator
下创建了一个插件$AIRFLOW_HOME/plugins
:
from airflow.plugins_manager import AirflowPlugin from airflow.utils.decorators import apply_defaults from airflow.operators import BaseOperator from airflow.exceptions import AirflowException import pika import json class MordorOperator(BaseOperator): JOB_QUEUE_MAPPING = {"testing": "testing"} @apply_defaults def __init__(self, job, *args, **kwargs): super().__init__(*args, **kwargs) # stuff def execute(self, context): # stuff class MordorPlugin(AirflowPlugin): name = "MordorPlugin" operators = [MordorOperator]
我可以导入插件并在示例DAG中查看它:
from airflow import DAG from airflow.operators import MordorOperator from datetime import datetime dag = DAG('mordor_dag', description='DAG with a single task', start_date=datetime.today(), catchup=False) hello_operator = MordorOperator(job="testing", task_id='run_single_task', dag=dag)
然而,当我尝试解释这个文件时,我会遇到失败,我怀疑自从插件成功运行以来我不应该这样做。我怀疑这是因为在运行时发生了一些动态代码生成,当DAG被自身解释时,它是不可用的。我还发现PyCharm在导入插件时无法执行任何自动完成功能。
(venv) 3:54PM /Users/paymahn/solvvy/scheduler mordor.operator ✱ ❮❮❮ python dags/mordor_test.py section/key [core/airflow-home] not found in config Traceback (most recent call last): File "dags/mordor_test.py", line 2, in from airflow.operators import MordorOperator ImportError: cannot import name 'MordorOperator'
使用插件的DAG如何进行健全性测试?是否有可能让PyCharm为自定义运算符提供自动完成功能?
答案 0 :(得分:2)
我在docker容器中运行airflow并且有一个作为容器入口点运行的脚本。事实证明,当我运行测试时,plugins
文件夹对我的容器不可用。作为安装脚本的一部分,我不得不在容器中添加符号链接。我的问题的解决方案对我来说是非常具体的,如果其他人偶然发现这个问题,除了以下情况之外我没有一个好的答案:确保你的插件文件夹正确可用。