{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "##############\nPylint-Airflow\n##############\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg\n :alt: Code style: Black\n :target: https://github.com/ambv/black\n\n.. image:: https://img.shields.io/badge/License-MIT-blue.svg\n :alt: License: MIT\n :target: https://github.com/BasPH/airflow-examples/blob/master/LICENSE\n\n.. image:: https://img.shields.io/circleci/project/github/BasPH/pylint-airflow/master.svg\n :target: https://circleci.com/gh/BasPH/workflows/pylint-airflow/tree/master\n\n.. image:: images/pylint-airflow.png\n :align: right\n\nPylint plugin for static code analysis on Airflow code.\n\n*****\nUsage\n*****\n\nInstallation:\n\n.. code-block:: bash\n\n pip install pylint-airflow\n\nUsage:\n\n.. code-block:: bash\n\n pylint --load-plugins=pylint_airflow [your_file]\n\nThis plugin runs on Python 3.6 and higher.\n\n***********\nError codes\n***********\n\nThe Pylint-Airflow codes follow the structure ``{I,C,R,W,E,F}83{0-9}{0-9}``, where:\n\n- The characters show:\n\n - ``I`` = Info\n - ``C`` = Convention\n - ``R`` = Refactor\n - ``W`` = Warning\n - ``E`` = Error\n - ``F`` = Fatal\n\n- ``83`` is the base id (see all here https://github.com/PyCQA/pylint/blob/master/pylint/checkers/__init__.py)\n- ``{0-9}{0-9}`` is any number 00-99\n\nThe current codes are:\n\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| Code | Symbol | Description |\n+=======+===================================+=================================================================================================================================================================+\n| C8300 | different-operator-varname-taskid | For consistency assign the same variable name and task_id to operators. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| C8301 | match-callable-taskid | For consistency name the callable function '_[task_id]', e.g. PythonOperator(task_id='mytask', python_callable=_mytask). |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| C8302 | mixed-dependency-directions | For consistency don't mix directions in a single statement, instead split over multiple statements. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| C8303 | task-no-dependencies | Sometimes a task without any dependency is desired, however often it is the result of a forgotten dependency. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| C8304 | task-context-argname | Indicate you expect Airflow task context variables in the \\*\\*kwargs argument by renaming to \\*\\*context. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| 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. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| C8306 | match-dagid-filename | For consistency match the DAG filename with the dag_id. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| R8300 | unused-xcom | Return values from a python_callable function or execute() method are automatically pushed as XCom. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| 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. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| E8300 | duplicate-dag-name | DAG name should be unique. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| E8301 | duplicate-task-name | Task name within a DAG should be unique. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| E8302 | duplicate-dependency | Task dependencies can be defined only once. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| E8303 | dag-with-cycles | A DAG is acyclic and cannot contain cycles. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| E8304 | task-no-dag | A task must know a DAG instance to run. |\n+-------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\n*************\nDocumentation\n*************\n\nDocumentation is available on `Read the Docs `_.\n\n************\nContributing\n************\n\nSuggestions for more checks are always welcome, please create an issue on GitHub. Read `CONTRIBUTING.rst `_ for more details.\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/BasPH/pylint-airflow", "keywords": "pylint,airflow,plugin", "license": "", "maintainer": "", "maintainer_email": "", "name": "pylint-airflow", "package_url": "https://pypi.org/project/pylint-airflow/", "platform": "", "project_url": "https://pypi.org/project/pylint-airflow/", "project_urls": { "Homepage": "https://github.com/BasPH/pylint-airflow" }, "release_url": "https://pypi.org/project/pylint-airflow/0.1.0a1/", "requires_dist": [ "pylint" ], "requires_python": "", "summary": "A Pylint plugin to lint Apache Airflow code.", "version": "0.1.0a1" }, "last_serial": 5259334, "releases": { "0.1.0a1": [ { "comment_text": "", "digests": { "md5": "c8fba07d31ad7d45b16f91212414c971", "sha256": "530a43e902831f2806dc3f672c7eb46ac1378106c400a04dce2ea1ccd5c4d0c3" }, "downloads": -1, "filename": "pylint_airflow-0.1.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "c8fba07d31ad7d45b16f91212414c971", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9520, "upload_time": "2019-05-12T16:39:56", "url": "https://files.pythonhosted.org/packages/5f/79/5fff2161bfecfc249eb8050685e2403488d83290ac4e6237781176f3968e/pylint_airflow-0.1.0a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d8d8fa0b1ad4f553a1cfd2ab59141e51", "sha256": "a0e3edb13932f35b24b24e66ebe596541600575b755b78a2a33d74d8bf94b620" }, "downloads": -1, "filename": "pylint-airflow-0.1.0a1.tar.gz", "has_sig": false, "md5_digest": "d8d8fa0b1ad4f553a1cfd2ab59141e51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7038, "upload_time": "2019-05-12T16:39:57", "url": "https://files.pythonhosted.org/packages/ff/55/619e9e6b5710eee8439c725ab18e10ca6da47d1c6b90c7a43770debd1915/pylint-airflow-0.1.0a1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c8fba07d31ad7d45b16f91212414c971", "sha256": "530a43e902831f2806dc3f672c7eb46ac1378106c400a04dce2ea1ccd5c4d0c3" }, "downloads": -1, "filename": "pylint_airflow-0.1.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "c8fba07d31ad7d45b16f91212414c971", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9520, "upload_time": "2019-05-12T16:39:56", "url": "https://files.pythonhosted.org/packages/5f/79/5fff2161bfecfc249eb8050685e2403488d83290ac4e6237781176f3968e/pylint_airflow-0.1.0a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d8d8fa0b1ad4f553a1cfd2ab59141e51", "sha256": "a0e3edb13932f35b24b24e66ebe596541600575b755b78a2a33d74d8bf94b620" }, "downloads": -1, "filename": "pylint-airflow-0.1.0a1.tar.gz", "has_sig": false, "md5_digest": "d8d8fa0b1ad4f553a1cfd2ab59141e51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7038, "upload_time": "2019-05-12T16:39:57", "url": "https://files.pythonhosted.org/packages/ff/55/619e9e6b5710eee8439c725ab18e10ca6da47d1c6b90c7a43770debd1915/pylint-airflow-0.1.0a1.tar.gz" } ] }