This is an automated email from the ASF dual-hosted git repository.
taragolis 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 ec45d4277c Use Literal from airflow.typing_compat in Airflow core
(#33821)
ec45d4277c is described below
commit ec45d4277c4effbfbcfc7386b272f90048f44693
Author: Andrey Anshin <[email protected]>
AuthorDate: Fri Sep 1 12:30:39 2023 +0400
Use Literal from airflow.typing_compat in Airflow core (#33821)
---
airflow/cli/commands/task_command.py | 2 +-
airflow/models/dag.py | 2 +-
airflow/models/dagrun.py | 2 +-
airflow/models/mappedoperator.py | 2 +-
airflow/models/taskinstance.py | 3 +--
airflow/providers_manager.py | 1 +
airflow/typing_compat.py | 10 ++++++++--
airflow/utils/dates.py | 2 +-
8 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/airflow/cli/commands/task_command.py
b/airflow/cli/commands/task_command.py
index 0cbf08e91d..d6bac9fc7f 100644
--- a/airflow/cli/commands/task_command.py
+++ b/airflow/cli/commands/task_command.py
@@ -31,7 +31,6 @@ import pendulum
from pendulum.parsing.exceptions import ParserError
from sqlalchemy import select
from sqlalchemy.orm.exc import NoResultFound
-from typing_extensions import Literal
from airflow import settings
from airflow.cli.simple_table import AirflowConsole
@@ -50,6 +49,7 @@ from airflow.models.taskinstance import TaskReturnCode
from airflow.settings import IS_K8S_EXECUTOR_POD
from airflow.ti_deps.dep_context import DepContext
from airflow.ti_deps.dependencies_deps import SCHEDULER_QUEUED_DEPS
+from airflow.typing_compat import Literal
from airflow.utils import cli as cli_utils
from airflow.utils.cli import (
get_dag,
diff --git a/airflow/models/dag.py b/airflow/models/dag.py
index cd3f47da88..e65b01c1c7 100644
--- a/airflow/models/dag.py
+++ b/airflow/models/dag.py
@@ -131,13 +131,13 @@ if TYPE_CHECKING:
from pendulum.tz.timezone import Timezone
from sqlalchemy.orm.query import Query
from sqlalchemy.orm.session import Session
- from typing_extensions import Literal
from airflow.datasets import Dataset
from airflow.decorators import TaskDecoratorCollection
from airflow.models.dagbag import DagBag
from airflow.models.operator import Operator
from airflow.models.slamiss import SlaMiss
+ from airflow.typing_compat import Literal
from airflow.utils.task_group import TaskGroup
log = logging.getLogger(__name__)
diff --git a/airflow/models/dagrun.py b/airflow/models/dagrun.py
index c528b6114b..43ed97e518 100644
--- a/airflow/models/dagrun.py
+++ b/airflow/models/dagrun.py
@@ -72,10 +72,10 @@ if TYPE_CHECKING:
from datetime import datetime
from sqlalchemy.orm import Query, Session
- from typing_extensions import Literal
from airflow.models.dag import DAG
from airflow.models.operator import Operator
+ from airflow.typing_compat import Literal
from airflow.utils.types import ArgNotSet
CreatedTasks = TypeVar("CreatedTasks", Iterator["dict[str, Any]"],
Iterator[TI])
diff --git a/airflow/models/mappedoperator.py b/airflow/models/mappedoperator.py
index 09785aaaf5..37882dcd78 100644
--- a/airflow/models/mappedoperator.py
+++ b/airflow/models/mappedoperator.py
@@ -25,7 +25,6 @@ import warnings
from typing import TYPE_CHECKING, Any, ClassVar, Collection, Iterable,
Iterator, Mapping, Sequence, Union
import attr
-from typing_extensions import Literal
from airflow import settings
from airflow.compat.functools import cache
@@ -52,6 +51,7 @@ from airflow.models.expandinput import (
from airflow.models.pool import Pool
from airflow.serialization.enums import DagAttributeTypes
from airflow.ti_deps.deps.mapped_task_expanded import MappedTaskIsExpanded
+from airflow.typing_compat import Literal
from airflow.utils.context import context_update_for_unmapped
from airflow.utils.helpers import is_container, prevent_duplicates
from airflow.utils.types import NOTSET
diff --git a/airflow/models/taskinstance.py b/airflow/models/taskinstance.py
index b28d59bee0..ff1b190a5e 100644
--- a/airflow/models/taskinstance.py
+++ b/airflow/models/taskinstance.py
@@ -135,7 +135,6 @@ if TYPE_CHECKING:
from sqlalchemy.orm.session import Session
from sqlalchemy.sql.elements import BooleanClauseList
from sqlalchemy.sql.expression import ColumnOperators
- from typing_extensions import Literal
from airflow.models.abstractoperator import TaskStateChangeCallback
from airflow.models.baseoperator import BaseOperator
@@ -144,7 +143,7 @@ if TYPE_CHECKING:
from airflow.models.dataset import DatasetEvent
from airflow.models.operator import Operator
from airflow.timetables.base import DataInterval
- from airflow.typing_compat import TypeGuard
+ from airflow.typing_compat import Literal, TypeGuard
from airflow.utils.task_group import TaskGroup
# This is a workaround because mypy doesn't work with hybrid_property
diff --git a/airflow/providers_manager.py b/airflow/providers_manager.py
index 3623be2843..fde539bec3 100644
--- a/airflow/providers_manager.py
+++ b/airflow/providers_manager.py
@@ -37,6 +37,7 @@ from packaging.utils import canonicalize_name
from airflow.exceptions import AirflowOptionalProviderFeatureException
from airflow.hooks.filesystem import FSHook
from airflow.hooks.package_index import PackageIndexHook
+from airflow.typing_compat import Literal
from airflow.utils import yaml
from airflow.utils.entry_points import entry_points_with_dist
from airflow.utils.log.logging_mixin import LoggingMixin
diff --git a/airflow/typing_compat.py b/airflow/typing_compat.py
index 95ef459552..bbe688cc0b 100644
--- a/airflow/typing_compat.py
+++ b/airflow/typing_compat.py
@@ -31,8 +31,14 @@ import sys
from typing import Protocol, TypedDict, runtime_checkable
# Literal from typing module has various issues in different Python versions,
see:
-# https://typing-extensions.readthedocs.io/en/latest/#Literal
-from typing_extensions import Literal
+# - https://typing-extensions.readthedocs.io/en/latest/#Literal
+# - bpo-45679: https://github.com/python/cpython/pull/29334
+# - bpo-42345: https://github.com/python/cpython/pull/23294
+# - bpo-42345: https://github.com/python/cpython/pull/23383
+if sys.version_info >= (3, 10, 1) or (3, 9, 8) <= sys.version_info < (3, 10):
+ from typing import Literal
+else:
+ from typing_extensions import Literal # type: ignore[assignment]
if sys.version_info >= (3, 10):
from typing import ParamSpec, TypeGuard
diff --git a/airflow/utils/dates.py b/airflow/utils/dates.py
index 14fae03a86..b4eecdcb56 100644
--- a/airflow/utils/dates.py
+++ b/airflow/utils/dates.py
@@ -23,9 +23,9 @@ from typing import Collection
from croniter import croniter
from dateutil.relativedelta import relativedelta # for doctest
-from typing_extensions import Literal
from airflow.exceptions import RemovedInAirflow3Warning
+from airflow.typing_compat import Literal
from airflow.utils import timezone
cron_presets: dict[str, str] = {