我有一个自定义DAG(即将被子类化),我们将其命名为MyDAG
。在__enter__
方法中,我想基于子类DAG添加(或不添加)运算符。我对使用BranchPythonOperator
不感兴趣。
class MyDAG(DAG):
def __enter__(self, context):
start = DummyOperator(taks_id=start)
end = DummyOperator(task_id=end)
op = self.get_additional_operator()
if op:
start >> op
else:
start >> end
retrun self
def get_additional_operator(self):
# None if the subclass doesn't add any operator. A reference to another operator otherwise
如果get_additional_operator
返回一个引用,则说明我获得了这个形状(两个分支):
* start --> op
* end
否则,如果它返回None
,我就可以得到它(一个分支):
* start --> end
如果end
不返回MyDAG
,我想要的是get_additional_operator
继承的子类中根本没有None
,如下所示:
* start --> op
而不是我在上面获得的两个分支。
答案 0 :(得分:0)
气流以某种方式解析了__enter__
子类的MyDAG
方法中声明的每个运算符。根据该假设,为了没有运算符,只需要在正确的位置声明该运算符即可。下面的代码:
class MyDAG(DAG):
def __enter__(self, context):
start = DummyOperator(taks_id=start)
op = self.get_additional_operator()
if op:
start >> op
else:
end = DummyOperator(task_id=end)
start >> end
retrun self
def get_additional_operator(self):
# None if the subclass doesn't add any operator. A reference to another operator otherwise
在end
节中进行else
运算符的声明。我认为只有在else
被评估为true时,它才会被解析。