Skip to content
Pylint plugin for static code analysis on Airflow code
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Rename Apr 6, 2019
docker Set correct build arg name Mar 20, 2019
docs Black formatting Apr 5, 2019
images Organize code Mar 10, 2019
scripts Escape * in rst table Mar 22, 2019
tests Fix test_duplicate_dag Apr 5, 2019
.gitignore Sort gitignore Mar 22, 2019
.pylintrc Don't fail on TODOs Apr 5, 2019
Makefile Bump version & add make command for publishing May 12, 2019
README.rst Move image in readme May 12, 2019
requirements.txt Ordered requirements alphabetically Apr 6, 2019 Bump version & add make command for publishing May 12, 2019



Code style: Black License: MIT


Pylint plugin for static code analysis on Airflow code.



pip install pylint-airflow


pylint --load-plugins=pylint_airflow [your_file]

This plugin runs on Python 3.6 and higher.

Error codes

The Pylint-Airflow codes follow the structure {I,C,R,W,E,F}83{0-9}{0-9}, where:

The current codes are:

Code Symbol Description
C8300 different-operator-varname-taskid For consistency assign the same variable name and task_id to operators.
C8301 match-callable-taskid For consistency name the callable function '_[task_id]', e.g. PythonOperator(task_id='mytask', python_callable=_mytask).
C8302 mixed-dependency-directions For consistency don't mix directions in a single statement, instead split over multiple statements.
C8303 task-no-dependencies Sometimes a task without any dependency is desired, however often it is the result of a forgotten dependency.
C8304 task-context-argname Indicate you expect Airflow task context variables in the **kwargs argument by renaming to **context.
C8305 task-context-separate-arg To avoid unpacking kwargs from the Airflow task context in a function, you can set the needed variables as arguments in the function.
C8306 match-dagid-filename For consistency match the DAG filename with the dag_id.
R8300 unused-xcom Return values from a python_callable function or execute() method are automatically pushed as XCom.
W8300 basehook-top-level Airflow executes DAG scripts periodically and anything at the top level of a script is executed. Therefore, move BaseHook calls into functions/hooks/operators.
E8300 duplicate-dag-name DAG name should be unique.
E8301 duplicate-task-name Task name within a DAG should be unique.
E8302 duplicate-dependency Task dependencies can be defined only once.
E8303 dag-with-cycles A DAG is acyclic and cannot contain cycles.
E8304 task-no-dag A task must know a DAG instance to run.


Documentation is available on Read the Docs.


Suggestions for more checks are always welcome, please create an issue on GitHub. Read CONTRIBUTING.rst for more details.

You can’t perform that action at this time.