diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index eda184522d3ca..60da9658e36c0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -219,7 +219,7 @@ repos: # __future__ annotations, so it should be left without automated upgrade # BaseOperator is disabled because replacing ClassVar[List[Type with corresponding list/type causes the attr to fail # see https://github.com/apache/airflow/pull/26290#issuecomment-1246014807 - exclude: ^airflow/_vendor/|^airflow/providers/google/cloud/hooks/gcs.py$|^test/decorators/test_python.py$|^airflow/models/baseoperator.py$ + exclude: ^airflow/_vendor/|^airflow/providers/google/cloud/hooks/gcs.py$|^tests/decorators/test_python.py$|^airflow/models/baseoperator.py$ - repo: https://github.com/pre-commit/pygrep-hooks rev: v1.9.0 hooks: @@ -242,18 +242,6 @@ repos: hooks: - id: isort name: Run isort to sort imports in Python files - files: \.py$|\.pyi$ - # To keep consistent with the global isort skip config defined in setup.cfg - exclude: ^airflow/_vendor/|^build/.*$|^venv/.*$|^\.tox/.*$ - args: - # These -p options are duplicated to known_first_party in setup.cfg, - # Please keep these in sync for now. (See comments there for details.) - - -p=airflow - - -p=airflow_breeze - - -p=docker_tests - - -p=docs - - -p=kubernetes_tests - - -p=tests - repo: https://github.com/pycqa/pydocstyle rev: 6.1.1 hooks: diff --git a/airflow/migrations/versions/0009_1_6_0_dagrun_config.py b/airflow/migrations/versions/0009_1_6_0_dagrun_config.py index 4c1ced0b9dda6..365af4bc6e668 100644 --- a/airflow/migrations/versions/0009_1_6_0_dagrun_config.py +++ b/airflow/migrations/versions/0009_1_6_0_dagrun_config.py @@ -22,6 +22,8 @@ Create Date: 2015-10-29 08:36:31.726728 """ +from __future__ import annotations + import sqlalchemy as sa from alembic import op diff --git a/dev/airflow-github b/dev/airflow-github index 6a115054963f9..d9e4afbe775fc 100755 --- a/dev/airflow-github +++ b/dev/airflow-github @@ -20,10 +20,11 @@ # This tool is based on the Spark merge_spark_pr script: # https://github.com/apache/spark/blob/master/dev/merge_spark_pr.py +from __future__ import annotations + import re import sys from collections import Counter, defaultdict -from typing import List, Optional import git import rich_click as click @@ -70,7 +71,7 @@ def get_issue_type(issue): return issue_type -def get_commit_in_main_associated_with_pr(repo: git.Repo, issue: Issue) -> Optional[str]: +def get_commit_in_main_associated_with_pr(repo: git.Repo, issue: Issue) -> str | None: """For a PR, find the associated merged commit & return its SHA""" if issue.pull_request: commit = repo.git.log(f"--grep=#{issue.number}", "origin/main", "--format=%H") @@ -84,7 +85,7 @@ def get_commit_in_main_associated_with_pr(repo: git.Repo, issue: Issue) -> Optio return None -def is_cherrypicked(repo: git.Repo, issue: Issue, previous_version: Optional[str] = None) -> bool: +def is_cherrypicked(repo: git.Repo, issue: Issue, previous_version: str | None = None) -> bool: """Check if a given issue is cherry-picked in the current branch or not""" log_args = ['--format=%H', f"--grep=#{issue.number}"] if previous_version: @@ -100,12 +101,12 @@ def is_pr(issue: Issue) -> bool: return "apache/airflow/pull/" in issue.html_url -def files_touched(repo, commit_id: str) -> List[str]: +def files_touched(repo, commit_id: str) -> list[str]: real_commit = repo.commit(commit_id) return real_commit.stats.files.keys() -def is_core_commit(files: List[str]) -> bool: +def is_core_commit(files: list[str]) -> bool: # We list out things that _aren't_ core files, # and we want to know if the commit changes anything # outside of these designated-non-core files @@ -219,7 +220,7 @@ def compare(target_version, github_token, previous_version=None, show_uncherrypi repo = git.Repo(".", search_parent_directories=True) github_handler = Github(github_token) - milestone_issues: List[Issue] = list( + milestone_issues: list[Issue] = list( github_handler.search_issues(f"repo:apache/airflow milestone:\"Airflow {target_version}\"") ) diff --git a/dev/airflow-license b/dev/airflow-license index 6007612342d85..a38edc8a2fffc 100755 --- a/dev/airflow-license +++ b/dev/airflow-license @@ -17,6 +17,8 @@ # specific language governing permissions and limitations # under the License. +from __future__ import annotations + import os import re import string diff --git a/docs/apache-airflow/img/airflow_erd.sha256 b/docs/apache-airflow/img/airflow_erd.sha256 index c4e1cb00b1604..eab880ad31f55 100644 --- a/docs/apache-airflow/img/airflow_erd.sha256 +++ b/docs/apache-airflow/img/airflow_erd.sha256 @@ -1 +1 @@ -866390aad1d155c75b4283c4d50ff56fb1f210f21dcd0e0955984bd08f26ac5c \ No newline at end of file +b3211bf16ef6ae93fc4a4cfeb2acffc0e2f3a8f476d76148d543f2751aff2c5d \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 3fdc6a39ef219..0f6a2dd230155 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,3 +26,15 @@ skip-string-normalization = true [build-system] requires = ['setuptools==63.4.3'] build-backend = "setuptools.build_meta" +[tool.isort] +add_imports = ["from __future__ import annotations"] +append_only = true +line_length = 110 +combine_as_imports = true +default_section = "THIRDPARTY" +known_first_party = ["airflow", "airflow_breeze", "docker_tests", "docs", "kubernetes_tests", "tests"] +# The test_python.py is needed because adding __future__.annotations breaks runtime checks that are +# needed for the test to work +skip = ["build", ".tox", "venv", "tests/decorators/test_python.py"] +skip_glob = ["*.pyi"] +profile = "black" diff --git a/scripts/ci/runners/sync_authors.py b/scripts/ci/runners/sync_authors.py index 8fc9717e5baba..0fecf4b6a56eb 100644 --- a/scripts/ci/runners/sync_authors.py +++ b/scripts/ci/runners/sync_authors.py @@ -17,6 +17,8 @@ # specific language governing permissions and limitations # under the License. +from __future__ import annotations + import re import requests diff --git a/setup.cfg b/setup.cfg index 986eb13f30db1..f558826dc68eb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -202,15 +202,3 @@ ignore_errors = True # Most of them don't but even if they do, it does not matter [mypy-google.cloud.*] no_implicit_optional = False - -[isort] -line_length=110 -combine_as_imports = true -default_section = THIRDPARTY -# This is duplicated with arguments in .pre-commit-config.yaml because isort is -# having some issues picking up these config files. Please keep these in sync -# for now and track the isort issue: https://github.com/PyCQA/isort/issues/1889 -known_first_party = airflow,airflow_breeze,docker_tests,docs,kubernetes_tests,tests -# Need to be consistent with the exclude config defined in pre-commit-config.yaml -skip = build,.tox,venv -profile = black diff --git a/tests/task/__init__.py b/tests/task/__init__.py index 9e7116e7f735c..865dd751b425d 100644 --- a/tests/task/__init__.py +++ b/tests/task/__init__.py @@ -16,4 +16,6 @@ # specific language governing permissions and limitations # under the License. # flake8: noqa +from __future__ import annotations + from .task_runner import *