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

kaxilnaik pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 05e43837f6c Migrate MySQL provider to `common.compat` (#57165)
05e43837f6c is described below

commit 05e43837f6ced792430cfe05499d172f319fe933
Author: Kiruban Kamaraj <[email protected]>
AuthorDate: Sat Oct 25 02:26:07 2025 +0530

    Migrate MySQL provider to `common.compat` (#57165)
---
 providers/mysql/pyproject.toml                      |  2 ++
 .../src/airflow/providers/mysql/hooks/mysql.py      |  7 +------
 .../providers/mysql/transfers/presto_to_mysql.py    |  8 ++------
 .../providers/mysql/transfers/s3_to_mysql.py        |  8 ++------
 .../providers/mysql/transfers/trino_to_mysql.py     |  8 ++------
 .../providers/mysql/transfers/vertica_to_mysql.py   |  8 ++------
 .../src/airflow/providers/mysql/version_compat.py   |  6 ------
 .../mysql/tests/unit/mysql/hooks/test_mysql.py      | 21 ++++++++++++++++++---
 .../unit/mysql/hooks/test_mysql_connector_python.py |  4 +++-
 9 files changed, 32 insertions(+), 40 deletions(-)

diff --git a/providers/mysql/pyproject.toml b/providers/mysql/pyproject.toml
index 05ca23bf29b..97ac56046d4 100644
--- a/providers/mysql/pyproject.toml
+++ b/providers/mysql/pyproject.toml
@@ -58,6 +58,7 @@ requires-python = ">=3.10"
 # After you modify the dependencies, and rebuild your Breeze CI image with 
``breeze ci-image build``
 dependencies = [
     "apache-airflow>=2.10.0",
+    "apache-airflow-providers-common-compat>=1.8.0",
     "apache-airflow-providers-common-sql>=1.20.0",
     # The mysqlclient package creates friction when installing on MacOS as it 
needs pkg-config to
     # Install and compile, and it's really only used by MySQL provider, so we 
can skip it on MacOS
@@ -95,6 +96,7 @@ dev = [
     "apache-airflow-task-sdk",
     "apache-airflow-devel-common",
     "apache-airflow-providers-amazon",
+    "apache-airflow-providers-common-compat",
     "apache-airflow-providers-common-sql",
     "apache-airflow-providers-openlineage",
     "apache-airflow-providers-presto",
diff --git a/providers/mysql/src/airflow/providers/mysql/hooks/mysql.py 
b/providers/mysql/src/airflow/providers/mysql/hooks/mysql.py
index affa6edd747..b7500bb8b8c 100644
--- a/providers/mysql/src/airflow/providers/mysql/hooks/mysql.py
+++ b/providers/mysql/src/airflow/providers/mysql/hooks/mysql.py
@@ -30,12 +30,7 @@ from airflow.providers.common.sql.hooks.sql import DbApiHook
 logger = logging.getLogger(__name__)
 
 if TYPE_CHECKING:
-    from airflow.providers.mysql.version_compat import AIRFLOW_V_3_0_PLUS
-
-    if AIRFLOW_V_3_0_PLUS:
-        from airflow.sdk import Connection
-    else:
-        from airflow.models.connection import Connection  # type: 
ignore[assignment]
+    from airflow.providers.common.compat.sdk import Connection
 
     try:
         from mysql.connector.abstracts import MySQLConnectionAbstract
diff --git 
a/providers/mysql/src/airflow/providers/mysql/transfers/presto_to_mysql.py 
b/providers/mysql/src/airflow/providers/mysql/transfers/presto_to_mysql.py
index 98d25c3c0bf..868c1c11b6d 100644
--- a/providers/mysql/src/airflow/providers/mysql/transfers/presto_to_mysql.py
+++ b/providers/mysql/src/airflow/providers/mysql/transfers/presto_to_mysql.py
@@ -20,16 +20,12 @@ from __future__ import annotations
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
+from airflow.providers.common.compat.sdk import BaseOperator
 from airflow.providers.mysql.hooks.mysql import MySqlHook
-from airflow.providers.mysql.version_compat import BaseOperator
 from airflow.providers.presto.hooks.presto import PrestoHook
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.common.compat.sdk import Context
 
 
 class PrestoToMySqlOperator(BaseOperator):
diff --git 
a/providers/mysql/src/airflow/providers/mysql/transfers/s3_to_mysql.py 
b/providers/mysql/src/airflow/providers/mysql/transfers/s3_to_mysql.py
index 474433c2894..09633c3ea3c 100644
--- a/providers/mysql/src/airflow/providers/mysql/transfers/s3_to_mysql.py
+++ b/providers/mysql/src/airflow/providers/mysql/transfers/s3_to_mysql.py
@@ -21,15 +21,11 @@ from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
 from airflow.providers.amazon.aws.hooks.s3 import S3Hook
+from airflow.providers.common.compat.sdk import BaseOperator
 from airflow.providers.mysql.hooks.mysql import MySqlHook
-from airflow.providers.mysql.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.common.compat.sdk import Context
 
 
 class S3ToMySqlOperator(BaseOperator):
diff --git 
a/providers/mysql/src/airflow/providers/mysql/transfers/trino_to_mysql.py 
b/providers/mysql/src/airflow/providers/mysql/transfers/trino_to_mysql.py
index 439b2d1de30..6308c3e7f66 100644
--- a/providers/mysql/src/airflow/providers/mysql/transfers/trino_to_mysql.py
+++ b/providers/mysql/src/airflow/providers/mysql/transfers/trino_to_mysql.py
@@ -20,16 +20,12 @@ from __future__ import annotations
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
+from airflow.providers.common.compat.sdk import BaseOperator
 from airflow.providers.mysql.hooks.mysql import MySqlHook
-from airflow.providers.mysql.version_compat import BaseOperator
 from airflow.providers.trino.hooks.trino import TrinoHook
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.common.compat.sdk import Context
 
 
 class TrinoToMySqlOperator(BaseOperator):
diff --git 
a/providers/mysql/src/airflow/providers/mysql/transfers/vertica_to_mysql.py 
b/providers/mysql/src/airflow/providers/mysql/transfers/vertica_to_mysql.py
index 0dc91146598..4250a334427 100644
--- a/providers/mysql/src/airflow/providers/mysql/transfers/vertica_to_mysql.py
+++ b/providers/mysql/src/airflow/providers/mysql/transfers/vertica_to_mysql.py
@@ -33,16 +33,12 @@ except ImportError:
         "installed in case you see compilation error during installation."
     )
 
+from airflow.providers.common.compat.sdk import BaseOperator
 from airflow.providers.mysql.hooks.mysql import MySqlHook
-from airflow.providers.mysql.version_compat import BaseOperator
 from airflow.providers.vertica.hooks.vertica import VerticaHook
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.common.compat.sdk import Context
 
 
 class VerticaToMySqlOperator(BaseOperator):
diff --git a/providers/mysql/src/airflow/providers/mysql/version_compat.py 
b/providers/mysql/src/airflow/providers/mysql/version_compat.py
index 78cd58dd016..ff0f446dc5e 100644
--- a/providers/mysql/src/airflow/providers/mysql/version_compat.py
+++ b/providers/mysql/src/airflow/providers/mysql/version_compat.py
@@ -29,12 +29,6 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
 
 AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk import BaseOperator
-else:
-    from airflow.models import BaseOperator
-
 __all__ = [
     "AIRFLOW_V_3_0_PLUS",
-    "BaseOperator",
 ]
diff --git a/providers/mysql/tests/unit/mysql/hooks/test_mysql.py 
b/providers/mysql/tests/unit/mysql/hooks/test_mysql.py
index ea011f3decd..d72f5601037 100644
--- a/providers/mysql/tests/unit/mysql/hooks/test_mysql.py
+++ b/providers/mysql/tests/unit/mysql/hooks/test_mysql.py
@@ -25,8 +25,8 @@ from unittest import mock
 import pytest
 import sqlalchemy
 
-from airflow.models import Connection
 from airflow.models.dag import DAG
+from airflow.providers.common.compat.sdk import Connection
 
 try:
     import MySQLdb.cursors
@@ -52,6 +52,7 @@ INSERT_SQL_STATEMENT = "INSERT INTO connection (id, conn_id, 
conn_type, descript
 class TestMySqlHookConn:
     def setup_method(self):
         self.connection = Connection(
+            conn_id="test_conn_id",
             conn_type="mysql",
             login="login",
             password="password",
@@ -194,7 +195,14 @@ class TestMySqlHookConn:
 
     @mock.patch("MySQLdb.connect")
     def test_get_conn_from_connection(self, mock_connect):
-        conn = Connection(login="login-conn", password="password-conn", 
host="host", schema="schema")
+        conn = Connection(
+            conn_id="test_conn_id",
+            conn_type="mysql",
+            login="login-conn",
+            password="password-conn",
+            host="host",
+            schema="schema",
+        )
         hook = MySqlHook(connection=conn)
         hook.get_conn()
         mock_connect.assert_called_once_with(
@@ -203,7 +211,14 @@ class TestMySqlHookConn:
 
     @mock.patch("MySQLdb.connect")
     def test_get_conn_from_connection_with_schema(self, mock_connect):
-        conn = Connection(login="login-conn", password="password-conn", 
host="host", schema="schema")
+        conn = Connection(
+            conn_id="test_conn_id",
+            conn_type="mysql",
+            login="login-conn",
+            password="password-conn",
+            host="host",
+            schema="schema",
+        )
         hook = MySqlHook(connection=conn, schema="schema-override")
         hook.get_conn()
         mock_connect.assert_called_once_with(
diff --git 
a/providers/mysql/tests/unit/mysql/hooks/test_mysql_connector_python.py 
b/providers/mysql/tests/unit/mysql/hooks/test_mysql_connector_python.py
index 5d2f0d1613b..bbee9a69b16 100644
--- a/providers/mysql/tests/unit/mysql/hooks/test_mysql_connector_python.py
+++ b/providers/mysql/tests/unit/mysql/hooks/test_mysql_connector_python.py
@@ -20,13 +20,15 @@ from __future__ import annotations
 import json
 from unittest import mock
 
-from airflow.models import Connection
+from airflow.providers.common.compat.sdk import Connection
 from airflow.providers.mysql.hooks.mysql import MySqlHook
 
 
 class TestMySqlHookConnMySqlConnectorPython:
     def setup_method(self):
         self.connection = Connection(
+            conn_id="test_conn_id",
+            conn_type="mysql",
             login="login",
             password="password",
             host="host",

Reply via email to