{"repo":"feluelle/airflint","free":true,"listed":false,"github":"https://github.com/feluelle/airflint","clone":"git clone https://github.com/feluelle/airflint.git","description":"Enforce Best Practices for all your Airflow DAGs. ⭐","language":"Python","stars":108,"topics":["airflow","best-practices","dag","formatter","linter"],"license":"Apache-2.0","category":"dev-tools","readme_excerpt":"airflint Enforce Best Practices for all your Airflow DAGs. ⭐ ⚠️ airflint is still in alpha stage and has not been tested with real world Airflow DAGs. Please report any issues you face via GitHub Issues, thank you. 🙏 🧑‍🏫 Rules - [x] Use function-level imports instead of top-level imports[^1][^2] (see Top level Python Code) - [x] Use jinja template syntax instead of Variable.get (see Airflow Variables) [^1]: There is a PEP for Lazy Imports targeted to arrive in Python 3.12 which would supersede this rule. [^2]: To remove top-level imports after running UseFunctionLevelImports rule, use a tool such as autoflake. based on official Best Practices Requirements airflint is tested with: Main version (dev) Released version (0.3.2-alpha) ---------------- ---------------------------------------- -------------------------------- Python 3.9, 3.10, 3.11, 3.12.0-alpha - 3.12.0 3.9, 3.10 Apache Airflow = 2.0.0 = 2.0.0 🚀 Get started To install it from PyPI run: NOTE: It is recommended to install airflint into your existing airflow environment with all your providers included. This way UseJinjaVariableGet rule can detect all template fields and airflint works as expected. Then just call it like this: pre-commit Alternatively you can add the following repo to your pre-commit-config.yaml : To complete the UseFunctionlevelImports rule, please add the autoflake hook after the airflint hook, as below: This will remove unused imports. ❤️ Contributing I am looking for contributors who are intere","default_branch":null,"files":null,"tree":[],"storefront":"/r/feluelle","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/feluelle/airflint/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}