Ivan Vergiliev created AIRFLOW-1108:
---------------------------------------

             Summary: DAG.fileloc is wrong when DAG is created from a factory 
method
                 Key: AIRFLOW-1108
                 URL: https://issues.apache.org/jira/browse/AIRFLOW-1108
             Project: Apache Airflow
          Issue Type: Bug
          Components: DAG, models
    Affects Versions: Airflow 1.8
            Reporter: Ivan Vergiliev
         Attachments: dag_factory_fileloc.patch

When using a factory method that creates DAGs, the created DAG's `fileloc` is 
set to the file that contains the factory method instead of the file that 
declares the DAG. For example:

# dag_factory.py
    def create_dag(dag_id):
       dag = DAG(dag_id=dag_id, [...])
       [...]
       return dag

# dag_from_factory.py
    dag1 = create_dag('dag1')

In this case, dag1.fileloc will be `dag_factory.py` instead of the correct 
`dag_from_factory.py`. This causes the Code tab to display the factory code 
instead of the definition code. More importantly though, it also causes 
problems when refreshing the DAG in `DagBag.get_dag` - it tries to reload the 
file that contains the factory method, however this file doesn't contain any 
DAG definitions itself. This causes the webserver to think that the DAG does 
not actually exist.

AFAICT this is a regression from this fix for SubDAGs: 
https://issues.apache.org/jira/browse/AIRFLOW-365 . I'm attaching a patch that 
adds a test for this. (Not creating it as a PR as it will obviously cause the 
unit tests to fail.) If I have time, I might try fixing it as well.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to