This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch v3-2-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-2-test by this push:
     new 7d69e7d4f79 Revert "[v3-2-test] Add prek hook to enforce conf import 
from compat SDK in providers (#64564) (#64567)" (#64602)
7d69e7d4f79 is described below

commit 7d69e7d4f7916c57891d5a89d95c4c69039b7570
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed Apr 1 20:19:24 2026 +0200

    Revert "[v3-2-test] Add prek hook to enforce conf import from compat SDK in 
providers (#64564) (#64567)" (#64602)
    
    This reverts commit ef3f9411c9ea992546005873e05507268cee23b9.
---
 providers/.pre-commit-config.yaml                  |   8 --
 scripts/ci/prek/check_conf_import_in_providers.py  | 128 -------------------
 .../ci/prek/test_check_conf_import_in_providers.py | 137 ---------------------
 3 files changed, 273 deletions(-)

diff --git a/providers/.pre-commit-config.yaml 
b/providers/.pre-commit-config.yaml
index 2cf29a4957e..4926188916f 100644
--- a/providers/.pre-commit-config.yaml
+++ b/providers/.pre-commit-config.yaml
@@ -240,14 +240,6 @@ repos:
         language: python
         files: ^.*/src/airflow/providers/.*version_compat.*\.py$
         require_serial: true
-      - id: check-conf-import-in-providers
-        name: Check conf is imported from compat SDK in providers
-        entry: ../scripts/ci/prek/check_conf_import_in_providers.py
-        language: python
-        types: [python]
-        files: ^.*/src/airflow/providers/.*\.py$
-        exclude: ^.*/common/compat/sdk\.py$
-        require_serial: false
       - id: provider-version-compat
         name: Check for correct version_compat imports in providers
         entry: ../scripts/ci/prek/check_provider_version_compat.py
diff --git a/scripts/ci/prek/check_conf_import_in_providers.py 
b/scripts/ci/prek/check_conf_import_in_providers.py
deleted file mode 100755
index b2186377a96..00000000000
--- a/scripts/ci/prek/check_conf_import_in_providers.py
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/env python
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# /// script
-# requires-python = ">=3.10,<3.11"
-# dependencies = [
-#   "rich>=13.6.0",
-# ]
-# ///
-"""
-Check that provider files import ``conf`` only from 
``airflow.providers.common.compat.sdk``.
-
-Providers must not import ``conf`` directly from ``airflow.configuration`` or
-``airflow.sdk.configuration``.  The compat SDK re-exports ``conf`` and ensures
-the code works across Airflow 2 and 3.
-"""
-
-from __future__ import annotations
-
-import argparse
-import sys
-from pathlib import Path
-
-from common_prek_utils import console, get_imports_from_file
-
-# Fully-qualified import names that are forbidden (as returned by 
get_imports_from_file)
-FORBIDDEN_CONF_IMPORTS = {
-    "airflow.configuration.conf",
-    "airflow.sdk.configuration.conf",
-}
-
-# Executor files run inside Airflow-Core, so they may use 
airflow.configuration directly.
-# Only airflow.sdk.configuration remains forbidden for them.
-EXECUTOR_ALLOWED_CONF_IMPORTS = {
-    "airflow.configuration.conf",
-}
-
-ALLOWED_IMPORT = "from airflow.providers.common.compat.sdk import conf"
-
-
-def is_excluded(path: Path) -> bool:
-    """Check if a file is the compat SDK module itself (which must define the 
re-export)."""
-    return path.as_posix().endswith("airflow/providers/common/compat/sdk.py")
-
-
-def is_executor_file(path: Path) -> bool:
-    """Check if a file is an executor module (lives under an ``executors/`` 
directory)."""
-    return "executors" in path.parts
-
-
-def find_forbidden_conf_imports(path: Path) -> list[str]:
-    """Return forbidden conf imports found in *path*."""
-    imports = get_imports_from_file(path, only_top_level=False)
-    forbidden = FORBIDDEN_CONF_IMPORTS
-    if is_executor_file(path):
-        forbidden = forbidden - EXECUTOR_ALLOWED_CONF_IMPORTS
-    return [imp for imp in imports if imp in forbidden]
-
-
-def parse_args():
-    parser = argparse.ArgumentParser(
-        description="Check that provider files import conf only from the 
compat SDK."
-    )
-    parser.add_argument("files", nargs="*", type=Path, help="Python source 
files to check.")
-    return parser.parse_args()
-
-
-def main() -> int:
-    args = parse_args()
-
-    if not args.files:
-        console.print("[yellow]No files provided.[/]")
-        return 0
-
-    provider_files = [path for path in args.files if not is_excluded(path)]
-
-    if not provider_files:
-        return 0
-
-    errors: list[str] = []
-
-    for path in provider_files:
-        try:
-            forbidden = find_forbidden_conf_imports(path)
-        except Exception as e:
-            console.print(f"[red]Failed to parse {path}: {e}[/]")
-            return 2
-
-        if forbidden:
-            errors.append(f"\n[red]{path}:[/]")
-            for imp in forbidden:
-                errors.append(f"  - {imp}")
-
-    if errors:
-        console.print("\n[red]Some provider files import conf from forbidden 
modules![/]\n")
-        console.print(
-            "[yellow]Provider files must import conf from the compat SDK:[/]\n"
-            f"  {ALLOWED_IMPORT}\n"
-            "\n[yellow]The following imports are forbidden:[/]\n"
-            "  - from airflow.configuration import conf\n"
-            "  - from airflow.sdk.configuration import conf\n"
-        )
-        console.print("[red]Found forbidden imports in:[/]")
-        for error in errors:
-            console.print(error)
-        return 1
-
-    console.print("[green]All provider files import conf from the correct 
module![/]")
-    return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main())
diff --git a/scripts/tests/ci/prek/test_check_conf_import_in_providers.py 
b/scripts/tests/ci/prek/test_check_conf_import_in_providers.py
deleted file mode 100644
index 647739ac448..00000000000
--- a/scripts/tests/ci/prek/test_check_conf_import_in_providers.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from __future__ import annotations
-
-from pathlib import Path
-
-import pytest
-from check_conf_import_in_providers import find_forbidden_conf_imports, 
is_excluded, is_executor_file
-
-
-class TestIsExcluded:
-    @pytest.mark.parametrize(
-        "path, expected",
-        [
-            pytest.param(
-                
"providers/common/compat/src/airflow/providers/common/compat/sdk.py",
-                True,
-                id="compat-sdk-module",
-            ),
-            pytest.param(
-                "providers/amazon/src/airflow/providers/amazon/hooks/s3.py",
-                False,
-                id="regular-provider-file",
-            ),
-        ],
-    )
-    def test_is_excluded(self, path: str, expected: bool):
-        assert is_excluded(Path(path)) is expected
-
-
-class TestIsExecutorFile:
-    @pytest.mark.parametrize(
-        "path, expected",
-        [
-            pytest.param(
-                
"providers/edge3/src/airflow/providers/edge3/executors/edge_executor.py",
-                True,
-                id="executor-file",
-            ),
-            pytest.param(
-                
"providers/celery/src/airflow/providers/celery/executors/celery_executor.py",
-                True,
-                id="celery-executor-file",
-            ),
-            pytest.param(
-                "providers/amazon/src/airflow/providers/amazon/hooks/s3.py",
-                False,
-                id="regular-provider-file",
-            ),
-        ],
-    )
-    def test_is_executor_file(self, path: str, expected: bool):
-        assert is_executor_file(Path(path)) is expected
-
-
-class TestFindForbiddenConfImports:
-    @pytest.mark.parametrize(
-        "code, expected",
-        [
-            pytest.param(
-                "from airflow.configuration import conf\n",
-                ["airflow.configuration.conf"],
-                id="from-airflow-configuration",
-            ),
-            pytest.param(
-                "from airflow.sdk.configuration import conf\n",
-                ["airflow.sdk.configuration.conf"],
-                id="from-airflow-sdk-configuration",
-            ),
-            pytest.param(
-                "from airflow.configuration import conf as global_conf\n",
-                ["airflow.configuration.conf"],
-                id="aliased-conf",
-            ),
-            pytest.param(
-                "def foo():\n    from airflow.configuration import conf\n",
-                ["airflow.configuration.conf"],
-                id="inside-function",
-            ),
-            pytest.param(
-                "from __future__ import annotations\n"
-                "from typing import TYPE_CHECKING\n"
-                "if TYPE_CHECKING:\n"
-                "    from airflow.sdk.configuration import conf\n",
-                ["airflow.sdk.configuration.conf"],
-                id="inside-type-checking",
-            ),
-        ],
-    )
-    def test_forbidden_imports(self, tmp_path: Path, code: str, expected: 
list[str]):
-        f = tmp_path / "example.py"
-        f.write_text(code)
-        assert find_forbidden_conf_imports(f) == expected
-
-    @pytest.mark.parametrize(
-        "code",
-        [
-            pytest.param("from airflow.providers.common.compat.sdk import 
conf\n", id="compat-sdk"),
-            pytest.param("from airflow.configuration import has_option\n", 
id="other-config-attr"),
-            pytest.param("from airflow.configuration import 
AirflowConfigParser\n", id="config-parser"),
-            pytest.param("from airflow.providers.amazon.hooks.s3 import 
S3Hook\n", id="provider-import"),
-            pytest.param("import os\nimport sys\n", id="stdlib-only"),
-            pytest.param("x = 1\n", id="no-imports"),
-        ],
-    )
-    def test_allowed_imports(self, tmp_path: Path, code: str):
-        f = tmp_path / "example.py"
-        f.write_text(code)
-        assert find_forbidden_conf_imports(f) == []
-
-    def test_executor_allows_airflow_configuration_conf(self, tmp_path: Path):
-        executor_dir = tmp_path / "executors"
-        executor_dir.mkdir()
-        f = executor_dir / "my_executor.py"
-        f.write_text("from airflow.configuration import conf\n")
-        assert find_forbidden_conf_imports(f) == []
-
-    def test_executor_still_forbids_sdk_configuration_conf(self, tmp_path: 
Path):
-        executor_dir = tmp_path / "executors"
-        executor_dir.mkdir()
-        f = executor_dir / "my_executor.py"
-        f.write_text("from airflow.sdk.configuration import conf\n")
-        assert find_forbidden_conf_imports(f) == 
["airflow.sdk.configuration.conf"]

Reply via email to