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

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


The following commit(s) were added to refs/heads/v3-1-test by this push:
     new 4795da45007 upgrade CI environment (#60929)
4795da45007 is described below

commit 4795da45007ff7a86ab40ea198e0a19ccba77122
Author: Henry Chen <[email protected]>
AuthorDate: Thu Jan 22 17:22:08 2026 +0800

    upgrade CI environment (#60929)
    
    Co-authored-by: Rahul Vats <[email protected]>
---
 .github/actions/install-prek/action.yml            |  2 +-
 .pre-commit-config.yaml                            |  3 +-
 Dockerfile.ci                                      |  2 +-
 dev/breeze/doc/ci/02_images.md                     |  2 +-
 dev/breeze/pyproject.toml                          |  2 +-
 .../commands/release_management_commands.py        |  2 +-
 dev/breeze/uv.lock                                 | 74 +++++++++++-----------
 .../common/compat/module_loading/__init__.py       | 16 +++++
 8 files changed, 59 insertions(+), 44 deletions(-)

diff --git a/.github/actions/install-prek/action.yml 
b/.github/actions/install-prek/action.yml
index 2c4db323bdb..73b4ad4cae9 100644
--- a/.github/actions/install-prek/action.yml
+++ b/.github/actions/install-prek/action.yml
@@ -27,7 +27,7 @@ inputs:
     default: "0.9.26"  # Keep this comment to allow automatic replacement of 
uv version
   prek-version:
     description: 'prek version to use'
-    default: "0.2.30"  # Keep this comment to allow automatic replacement of 
prek version
+    default: "0.3.0"  # Keep this comment to allow automatic replacement of 
prek version
   save-cache:
     description: "Whether to save prek cache"
     required: true
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 1ac406eceff..4c810df568d 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -31,8 +31,7 @@ repos:
       - id: check-hooks-apply
         name: Check if all hooks apply to the repository
   - repo: https://github.com/eclipse-csi/octopin
-    # We need this commit because if supports two spaces before comments 
(yamllint compatibility)
-    rev: 74fd075c7b326c771cd95ca86c59cbe65f0dda37
+    rev: 4cf60063ce94dc61e8760462a9b223aa89676544
     hooks:
       - id: pin-versions
         name: Pin versions of dependencies in CI workflows (manual)
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 53a058aac82..2a848074ef1 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1710,7 +1710,7 @@ COPY --from=scripts common.sh install_packaging_tools.sh 
install_additional_depe
 ARG AIRFLOW_PIP_VERSION=25.3
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main";
 ARG AIRFLOW_UV_VERSION=0.9.26
-ARG AIRFLOW_PREK_VERSION="0.2.30"
+ARG AIRFLOW_PREK_VERSION="0.3.0"
 
 # UV_LINK_MODE=copy is needed since we are using cache mounted from the host
 ENV AIRFLOW_PIP_VERSION=${AIRFLOW_PIP_VERSION} \
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index 86f03913d11..23ef22e93b4 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -444,7 +444,7 @@ can be used for CI images:
 | `ADDITIONAL_DEV_APT_ENV`          |                             | Additional 
env variables defined when installing dev deps                                  
                       |
 | `AIRFLOW_PIP_VERSION`             | `25.3`                      | `pip` 
version used.                                                                   
                            |
 | `AIRFLOW_UV_VERSION`              | `0.9.26`                    | `uv` 
version used.                                                                   
                             |
-| `AIRFLOW_PREK_VERSION`            | `0.2.30`                    | `prek` 
version used.                                                                   
                           |
+| `AIRFLOW_PREK_VERSION`            | `0.3.0`                     | `prek` 
version used.                                                                   
                           |
 | `AIRFLOW_USE_UV`                  | `true`                      | Whether to 
use UV for installation.                                                        
                       |
 | `PIP_PROGRESS_BAR`                | `on`                        | Progress 
bar for PIP installation                                                        
                         |
 
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index 21157ef146e..25d79b2afb2 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -59,7 +59,7 @@ dependencies = [
     "jinja2>=3.1.5",
     "jsonschema>=4.19.1",
     "packaging>=25.0",
-    "prek>=0.2.30",
+    "prek>=0.3.0",
     "psutil>=5.9.6",
     "pygithub>=2.1.1",
     "pytest-xdist>=3.3.1",
diff --git 
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py 
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 881fbfd6cab..d686662a994 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -258,7 +258,7 @@ AIRFLOW_UV_VERSION = "0.9.26"
 AIRFLOW_USE_UV = False
 GITPYTHON_VERSION = "3.1.46"
 RICH_VERSION = "14.2.0"
-PREK_VERSION = "0.2.30"
+PREK_VERSION = "0.3.0"
 HATCH_VERSION = "1.16.3"
 PYYAML_VERSION = "6.0.3"
 
diff --git a/dev/breeze/uv.lock b/dev/breeze/uv.lock
index 695b03d203b..616618915c1 100644
--- a/dev/breeze/uv.lock
+++ b/dev/breeze/uv.lock
@@ -74,7 +74,7 @@ requires-dist = [
     { name = "jinja2", specifier = ">=3.1.5" },
     { name = "jsonschema", specifier = ">=4.19.1" },
     { name = "packaging", specifier = ">=25.0" },
-    { name = "prek", specifier = ">=0.2.30" },
+    { name = "prek", specifier = ">=0.3.0" },
     { name = "psutil", specifier = ">=5.9.6" },
     { name = "pygithub", specifier = ">=2.1.1" },
     { name = "pytest", specifier = ">=9.0.0" },
@@ -260,30 +260,30 @@ wheels = [
 
 [[package]]
 name = "boto3"
-version = "1.42.31"
+version = "1.42.32"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "botocore" },
     { name = "jmespath" },
     { name = "s3transfer" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/a4/da/d81abc51bd35c2d2154f1caa0040843ada7df1689ea17d51c116c793b8f0/boto3-1.42.31.tar.gz";,
 hash = 
"sha256:b2038fc5dbcd6746a16ada8d55fe73659b8cf95c7b6aeb63fe782e831485edaa", size 
= 112803, upload-time = "2026-01-20T21:04:45.292Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/68/73/2a8065918dcc9f07046f7e87e17f54a62914a8b7f1f9e506799ec533d2e9/boto3-1.42.32.tar.gz";,
 hash = 
"sha256:0ba535985f139cf38455efd91f3801fe72e5cce6ded2df5aadfd63177d509675", size 
= 112830, upload-time = "2026-01-21T20:40:10.891Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/fd/4d/2a2830424f11d575f7ca2abdff889138f212c7dd3f1dde2b2994a779a5ab/boto3-1.42.31-py3-none-any.whl";,
 hash = 
"sha256:7f04b4cd7c375e4d88cc2cba3022c40805012ce8f57468b82cedb1bcd6b3a58a", size 
= 140572, upload-time = "2026-01-20T21:04:43.112Z" },
+    { url = 
"https://files.pythonhosted.org/packages/60/e3/c86658f1fd0191aa8131cb1baacd337b037546d902980ea5a9c8f0c5cd9b/boto3-1.42.32-py3-none-any.whl";,
 hash = 
"sha256:695ac7e62dfde28cc1d3b28a581cce37c53c729d48ea0f4cd0dbf599856850cf", size 
= 140573, upload-time = "2026-01-21T20:40:09.1Z" },
 ]
 
 [[package]]
 name = "botocore"
-version = "1.42.31"
+version = "1.42.32"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "jmespath" },
     { name = "python-dateutil" },
     { name = "urllib3" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/ab/78/4fd91ed2f9d4b500680f33c714b7716fc37690083a8c8d3e94177cbc811e/botocore-1.42.31.tar.gz";,
 hash = 
"sha256:62f2c31e229df625612dd4d7c72618948e4064436d71a647102f36fcddfa0f4d", size 
= 14895682, upload-time = "2026-01-20T21:04:32.999Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/21/5e/84404e094be8e2145c7f6bb8b3709193bc4488c385edffc6cc6890b5c88b/botocore-1.42.32.tar.gz";,
 hash = 
"sha256:4c0a9fe23e060c019e327cd5e4ea1976a1343faba74e5301ebfc9549cc584ccb", size 
= 14898756, upload-time = "2026-01-21T20:39:59.698Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/9c/c3/6898ecbfc140754fc90702c43e63c2b13017cac345cd3015df404cfeb3e9/botocore-1.42.31-py3-none-any.whl";,
 hash = 
"sha256:021346ad57cc3018acf4a46edc1f649b9818b33c07a08674ce1c36e9edbb5859", size 
= 14569714, upload-time = "2026-01-20T21:04:29.495Z" },
+    { url = 
"https://files.pythonhosted.org/packages/dd/ab/55062f6eaf9fc537b62b7425ab53ef4366032256e1dda8ef52a9a31f7a6e/botocore-1.42.32-py3-none-any.whl";,
 hash = 
"sha256:9c1ce43687cc4c0bba12054b229b3464265c699e2de4723998d86791254a5a37", size 
= 14573367, upload-time = "2026-01-21T20:39:56.65Z" },
 ]
 
 [[package]]
@@ -1166,11 +1166,11 @@ wheels = [
 
 [[package]]
 name = "packaging"
-version = "25.0"
+version = "26.0"
 source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz";,
 hash = 
"sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size 
= 165727, upload-time = "2025-04-19T11:48:59.673Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz";,
 hash = 
"sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size 
= 143416, upload-time = "2026-01-21T20:50:39.064Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl";,
 hash = 
"sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size 
= 66469, upload-time = "2025-04-19T11:48:57.875Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl";,
 hash = 
"sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size 
= 74366, upload-time = "2026-01-21T20:50:37.788Z" },
 ]
 
 [[package]]
@@ -1223,26 +1223,26 @@ wheels = [
 
 [[package]]
 name = "prek"
-version = "0.2.30"
+version = "0.3.0"
 source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/51/87/2ad90e933c59676b8ce373a643ba5c58e96d4626f08a796af07607a4e827/prek-0.2.30.tar.gz";,
 hash = 
"sha256:e421b7854eb2228c060b40e7282c4ce4c9889f41062351bc34f55472af2a608c", size 
= 291247, upload-time = "2026-01-18T13:23:15.171Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/f2/1e/6c23d3470145be1d6ff29d93f2a521864788827d22e509e2b978eb5bb4cb/prek-0.3.0.tar.gz";,
 hash = 
"sha256:e70f16bbaf2803e490b866cfa997ea5cc46e7ada55d61f0cdd84bc90b8d5ca7f", size 
= 316063, upload-time = "2026-01-22T04:00:01.648Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/52/1a/8dcd4580106190be9c313a72a15e309d41176fc4b6414167fba638bcee75/prek-0.2.30-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:50b25003fa94c0df6cd6683714ac0c6122e4f3d18ae6a487333823ec812b57d4", size 
= 4260268, upload-time = "2026-01-18T13:22:59.295Z" },
-    { url = 
"https://files.pythonhosted.org/packages/2c/d0/0b9d524d409c5b1b7466f32217cb809b997613a0d0b319caab0ceb1f664b/prek-0.2.30-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:e69842fec298fc065dd2428e33a50bcd124d7ac22fc4d91c442b963450d5b14d", size 
= 4269718, upload-time = "2026-01-18T13:22:55.575Z" },
-    { url = 
"https://files.pythonhosted.org/packages/04/55/8e9ff2ff742174e49e2df5a14108f5997498662ff31ade35529ecea1812c/prek-0.2.30-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:910a370b718a128ef91e5f93baa76eeef205ac448774c491838f36511e95ce64", size 
= 3924968, upload-time = "2026-01-18T13:23:00.968Z" },
-    { url = 
"https://files.pythonhosted.org/packages/2e/db/a130a32ae8c3de89efe20d11ec8d0730cd80319f0f9ca673ef4e5c8685b2/prek-0.2.30-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:5f9d50e0d95e5b7908299a59d6aee903ca422a032e2d9e0b5ba73c5a2911f469", size 
= 4254573, upload-time = "2026-01-18T13:23:09.713Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a5/ab/3b64dcf919c82bbac75c5cc8800932f3bfd2be33a60f0345b708b78b56aa/prek-0.2.30-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:801df0ecef3c3303dd1b5abe14edfe704b305c5bdca0b272bb3e317dbe3d29af", size 
= 4183080, upload-time = "2026-01-18T13:22:48.028Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a5/6d/4acdb306901d3b9e9c4da88b033264e5eed3b53f43a8111df25cd843f127/prek-0.2.30-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:03154e56a6956179e916ec3f564835af7a304473235fe837c3e504df1aa462c2", size 
= 4436996, upload-time = "2026-01-18T13:22:52.109Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c3/80/50e0e03dbfe93dbe94a79f1026e9c24eacd4a7228b27f650a2ee43ce4387/prek-0.2.30-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:77923501a247f94a93e272c3bacbfb7a4347aff3c57a4edb928624ddb8c65eb7", size 
= 4970022, upload-time = "2026-01-18T13:23:13.297Z" },
-    { url = 
"https://files.pythonhosted.org/packages/52/4f/c9cda78678275ce1bfa97c3ef6d9ad23ef1dac2cd2d4660ad277bbcd4ab2/prek-0.2.30-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:cea2e2b1825f3e1d979492eed6d69f21d3e13cb4157212034badd01521b77b1d", size 
= 4494648, upload-time = "2026-01-18T13:23:08.08Z" },
-    { url = 
"https://files.pythonhosted.org/packages/38/78/14bbe113362702bb0dd34cdb8244f0b1bc37e7482592381a8cec4d725fc5/prek-0.2.30-py3-none-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:77cb9c9218a5479e10e33449dec52886c6991f7b5dd5abb9c20856c1a1fae66a", size 
= 4268486, upload-time = "2026-01-18T13:22:57.762Z" },
-    { url = 
"https://files.pythonhosted.org/packages/52/17/78182dc4c4e4eed952558085b21046414c1b21e800a157d4a6f94d20bd1a/prek-0.2.30-py3-none-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:c480dcbf459ea0dcf70f9d9f9f3709c11cbda06f81526b2e36430fa260ecf747", size 
= 4285924, upload-time = "2026-01-18T13:23:02.503Z" },
-    { url = 
"https://files.pythonhosted.org/packages/8a/2d/ec39a4570dad4984f671a940df6078f97bb4fd993b32914358a0ed7b311a/prek-0.2.30-py3-none-musllinux_1_1_armv7l.whl";,
 hash = 
"sha256:bdc5ae31543e77acf7d78fa51bf4f5cb870628856230763bc5173895ad84d327", size 
= 4161904, upload-time = "2026-01-18T13:23:16.397Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0f/63/e0488a50dbbeff2cf0b789d503f6425b9fd3fb3bd95e128634ee38a51f96/prek-0.2.30-py3-none-musllinux_1_1_i686.whl";,
 hash = 
"sha256:859f870c823ecf1f5b28353e6ab53ae35bca2ee959c58a50a2e0100172fc2439", size 
= 4313514, upload-time = "2026-01-18T13:22:53.994Z" },
-    { url = 
"https://files.pythonhosted.org/packages/cc/b4/e5fcb3d4e0275ccdb7d45494c8f628925ac05314b859ec74035ae487131a/prek-0.2.30-py3-none-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:c086ae69d106abbfcb7f4b91c70e5cdf982d4485970b75b0057302b46f1708e2", size 
= 4599592, upload-time = "2026-01-18T13:22:50.483Z" },
-    { url = 
"https://files.pythonhosted.org/packages/33/2e/fb615b3026c96d10c0734fc2cb972b204e8fa52947e28f5e0eb6c24a0bd0/prek-0.2.30-py3-none-win32.whl";,
 hash = 
"sha256:589c6277429424ce6e5a2e669c183efa55afb9adc9f1916a34c74211a63c7a35", size 
= 3888524, upload-time = "2026-01-18T13:23:04.005Z" },
-    { url = 
"https://files.pythonhosted.org/packages/eb/b4/e1dc3447af01ad12956bd17185f21a874eb1b86787fb573e577fe4d602d6/prek-0.2.30-py3-none-win_amd64.whl";,
 hash = 
"sha256:b651f0b392d92d6091c3fc5adb2b1a3819311a15e92bf3eb084cb8fd5df40272", size 
= 4237521, upload-time = "2026-01-18T13:23:06.42Z" },
-    { url = 
"https://files.pythonhosted.org/packages/93/ec/8150b29e7e00a9fbb70c67f35188fb8c95f1c46481427f57a30c200365f9/prek-0.2.30-py3-none-win_arm64.whl";,
 hash = 
"sha256:75cd54c05d1941f1f3c12a2f4365d9429a700ad8c442ece03266b217b403941b", size 
= 3992917, upload-time = "2026-01-18T13:23:11.594Z" },
+    { url = 
"https://files.pythonhosted.org/packages/84/49/469219c19bb00db678806f79fc084ac1ce9952004a183a798db26f6df22b/prek-0.3.0-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:7e5d40b22deff23e36f7ad91e24b8e62edf32f30f6dad420459f7ec7188233c3", size 
= 4317493, upload-time = "2026-01-22T03:59:51.769Z" },
+    { url = 
"https://files.pythonhosted.org/packages/87/9f/f7afc49cc0fd92d1ba492929dc1573cb7004d09b61341aa6ee32a5288657/prek-0.3.0-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:6712b58cbb5a7db0aaef180c489ce9f3462e0293d54e54baeedd75fc0d9d8c28", size 
= 4323961, upload-time = "2026-01-22T03:59:56.92Z" },
+    { url = 
"https://files.pythonhosted.org/packages/42/94/ba36dc29e71d476bf71c3bac2b0c89cfcfc4b8973a0a6b20728f429f4560/prek-0.3.0-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:5f2c446fd9012a98c5690b4badf3f7dfb8d424cf0c6798a2d08ee56511f0a670", size 
= 3970121, upload-time = "2026-01-22T03:59:55.722Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b5/93/6131dd9f6cde3d72815b978b766de21b2ac9cc15fc38f5c22267cc7e574d/prek-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:10f3da7cda2397f7d2f3ff7f2be0d7486c15d4941f7568095b7168e57a9c88c5", size 
= 4307430, upload-time = "2026-01-22T03:59:47.484Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6f/08/7c55a765d96028d38dc984e66a096a969d80e56f66a47801acc86dede856/prek-0.3.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:2f747bb4a4322fea35d548cd2c1bd24477f56ed009f3d62a2b97ecbfc88096ac", size 
= 4238032, upload-time = "2026-01-22T04:00:02.606Z" },
+    { url = 
"https://files.pythonhosted.org/packages/dc/a7/59d9bf902b749c8a0cef9e8ac073cc5c886634cd09404c00af4a76470b3b/prek-0.3.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:40bd61f11d8caabc0e2a5d4c326639d6ff558b580ef4388aabec293ddb5afd35", size 
= 4493295, upload-time = "2026-01-22T03:59:45.964Z" },
+    { url = 
"https://files.pythonhosted.org/packages/08/dc/902b2e4ddff59ad001ddc2cda3b47e457ab1ee811698a4002b3e4f84faf1/prek-0.3.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:1d096b5e273d17a1300b20a7101a9e5a624a8104825eb59659776177f7fccea1", size 
= 5033370, upload-time = "2026-01-22T03:59:44.806Z" },
+    { url = 
"https://files.pythonhosted.org/packages/15/cd/277a3d2768b80bb1ff3c2ea8378687bb4c527d88a8b543bf6f364f8a0dc9/prek-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:df39face5f1298851fbae495267ddf60f1694ea594ed5c6cdb88bdd6de14f6a4", size 
= 4549792, upload-time = "2026-01-22T03:59:41.518Z" },
+    { url = 
"https://files.pythonhosted.org/packages/26/21/53aeabd3822ef7fa350aac66d099d4d97b05e8383a2df35499229389a642/prek-0.3.0-py3-none-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:9462f80a576d661490aa058d4493a991a34c7532dea76b7b004a17c8bc6b80f2", size 
= 4323158, upload-time = "2026-01-22T03:59:54.284Z" },
+    { url = 
"https://files.pythonhosted.org/packages/27/c2/3a7392b0e7fd07e339d89701b49b12a89d85256a57279877195028215957/prek-0.3.0-py3-none-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:33d3fa40eecf996ed14bab2d006c39d21ae344677d62599963efd9b27936558e", size 
= 4344632, upload-time = "2026-01-22T04:00:03.71Z" },
+    { url = 
"https://files.pythonhosted.org/packages/71/89/8254ac981d75d0ce2826bcac74fed901540d629cb2d9f4d73ce62f8ce843/prek-0.3.0-py3-none-musllinux_1_1_armv7l.whl";,
 hash = 
"sha256:d8c6abfd53a23718afdf4e6107418db1d74c5d904e9b7ec7900e285f8da90723", size 
= 4216608, upload-time = "2026-01-22T03:59:58.527Z" },
+    { url = 
"https://files.pythonhosted.org/packages/20/f5/854d57d89376fac577ee647a1dba1b87e27b2baeca7edc3d40295adeb7c8/prek-0.3.0-py3-none-musllinux_1_1_i686.whl";,
 hash = 
"sha256:eb4c80c3e7c0e16bf307947809112bfef3715a1b83c2b03f5937707934635617", size 
= 4371174, upload-time = "2026-01-22T03:59:53.088Z" },
+    { url = 
"https://files.pythonhosted.org/packages/03/38/8927619411da8d3f189415c452ec7a463f09dea69e272888723f37b4b18f/prek-0.3.0-py3-none-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:602bcce070c50900167acd89dcdf95d27894412f8a7b549c8eb66de612a99653", size 
= 4659113, upload-time = "2026-01-22T03:59:43.166Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8c/4d/16baeef633b8b230dde878b858c0e955149c860feef518b5eb5aac640eec/prek-0.3.0-py3-none-win32.whl";,
 hash = 
"sha256:a69229365ce33c68c05db7ae73ad1ef8bc7f0914ab3bc484ab7781256bcdfb7a", size 
= 3937103, upload-time = "2026-01-22T03:59:48.719Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f4/f2/c7395b4afd1bba32cad2b24c30fd7781e94c1e41137348cd150bbef001d6/prek-0.3.0-py3-none-win_amd64.whl";,
 hash = 
"sha256:a0379afd8d31bd5da6ee8977820fdb3c30601bed836b39761e6f605451dbccaa", size 
= 4290763, upload-time = "2026-01-22T03:59:59.938Z" },
+    { url = 
"https://files.pythonhosted.org/packages/df/83/97ed76ab5470025992cd50cb1ebdeb21fcf6c25459f9ffc49ac7bf040cf4/prek-0.3.0-py3-none-win_arm64.whl";,
 hash = 
"sha256:82e2c64f75dc1ea6f2023f4322500eb8da5d0557baf06c88677bddf163e1542a", size 
= 4041580, upload-time = "2026-01-22T03:59:50.082Z" },
 ]
 
 [[package]]
@@ -1311,11 +1311,11 @@ wheels = [
 
 [[package]]
 name = "pyasn1"
-version = "0.6.1"
+version = "0.6.2"
 source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz";,
 hash = 
"sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size 
= 145322, upload-time = "2024-09-10T22:41:42.55Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/fe/b6/6e630dff89739fcd427e3f72b3d905ce0acb85a45d4ec3e2678718a3487f/pyasn1-0.6.2.tar.gz";,
 hash = 
"sha256:9b59a2b25ba7e4f8197db7686c09fb33e658b98339fadb826e9512629017833b", size 
= 146586, upload-time = "2026-01-16T18:04:18.534Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl";,
 hash = 
"sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size 
= 83135, upload-time = "2024-09-11T16:00:36.122Z" },
+    { url = 
"https://files.pythonhosted.org/packages/44/b5/a96872e5184f354da9c84ae119971a0a4c221fe9b27a4d94bd43f2596727/pyasn1-0.6.2-py3-none-any.whl";,
 hash = 
"sha256:1eb26d860996a18e9b6ed05e7aae0e9fc21619fcee6af91cca9bad4fbea224bf", size 
= 83371, upload-time = "2026-01-16T18:04:17.174Z" },
 ]
 
 [[package]]
@@ -1332,11 +1332,11 @@ wheels = [
 
 [[package]]
 name = "pycparser"
-version = "2.23"
+version = "3.0"
 source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz";,
 hash = 
"sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size 
= 173734, upload-time = "2025-09-09T13:23:47.91Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz";,
 hash = 
"sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size 
= 103492, upload-time = "2026-01-21T14:26:51.89Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl";,
 hash = 
"sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size 
= 118140, upload-time = "2025-09-09T13:23:46.651Z" },
+    { url = 
"https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl";,
 hash = 
"sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size 
= 48172, upload-time = "2026-01-21T14:26:50.693Z" },
 ]
 
 [[package]]
@@ -1415,11 +1415,11 @@ wheels = [
 
 [[package]]
 name = "pyparsing"
-version = "3.3.1"
+version = "3.3.2"
 source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/33/c1/1d9de9aeaa1b89b0186e5fe23294ff6517fce1bc69149185577cd31016b2/pyparsing-3.3.1.tar.gz";,
 hash = 
"sha256:47fad0f17ac1e2cad3de3b458570fbc9b03560aa029ed5e16ee5554da9a2251c", size 
= 1550512, upload-time = "2025-12-23T03:14:04.391Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz";,
 hash = 
"sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size 
= 6851574, upload-time = "2026-01-21T03:57:59.36Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/8b/40/2614036cdd416452f5bf98ec037f38a1afb17f327cb8e6b652d4729e0af8/pyparsing-3.3.1-py3-none-any.whl";,
 hash = 
"sha256:023b5e7e5520ad96642e2c6db4cb683d3970bd640cdf7115049a6e9c3682df82", size 
= 121793, upload-time = "2025-12-23T03:14:02.103Z" },
+    { url = 
"https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl";,
 hash = 
"sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size 
= 122781, upload-time = "2026-01-21T03:57:55.912Z" },
 ]
 
 [[package]]
diff --git 
a/providers/common/compat/src/airflow/providers/common/compat/module_loading/__init__.py
 
b/providers/common/compat/src/airflow/providers/common/compat/module_loading/__init__.py
new file mode 100644
index 00000000000..13a83393a91
--- /dev/null
+++ 
b/providers/common/compat/src/airflow/providers/common/compat/module_loading/__init__.py
@@ -0,0 +1,16 @@
+# 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.

Reply via email to