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 cede385e93 Always use `Literal` from `typing_extensions` (#33794)
cede385e93 is described below
commit cede385e938d4645fdbdfabd6c92c02fbfb95628
Author: Andrey Anshin <[email protected]>
AuthorDate: Mon Aug 28 01:26:19 2023 +0400
Always use `Literal` from `typing_extensions` (#33794)
---
airflow/cli/commands/task_command.py | 4 ++--
airflow/models/dag.py | 2 +-
airflow/models/dagrun.py | 2 +-
airflow/models/mappedoperator.py | 2 +-
airflow/models/taskinstance.py | 3 ++-
airflow/providers/amazon/aws/sensors/sqs.py | 3 ++-
airflow/providers/amazon/aws/transfers/sql_to_s3.py | 4 +++-
airflow/providers/amazon/aws/triggers/sqs.py | 4 +++-
airflow/providers/amazon/aws/utils/sqs.py | 3 ++-
airflow/providers/cncf/kubernetes/operators/pod.py | 2 +-
airflow/providers/cncf/kubernetes/utils/pod_manager.py | 4 ++--
airflow/providers/mongo/hooks/mongo.py | 2 +-
airflow/providers/salesforce/operators/bulk.py | 3 ++-
airflow/providers_manager.py | 2 +-
airflow/typing_compat.py | 8 +++-----
airflow/utils/dates.py | 2 +-
dev/breeze/src/airflow_breeze/utils/selective_checks.py | 5 +----
17 files changed, 29 insertions(+), 26 deletions(-)
diff --git a/airflow/cli/commands/task_command.py
b/airflow/cli/commands/task_command.py
index 97b290f078..8884f050fe 100644
--- a/airflow/cli/commands/task_command.py
+++ b/airflow/cli/commands/task_command.py
@@ -25,13 +25,14 @@ import os
import sys
import textwrap
from contextlib import contextmanager, redirect_stderr, redirect_stdout,
suppress
-from typing import Generator, Union, cast
+from typing import Generator, Protocol, Union, cast
import pendulum
from pendulum.parsing.exceptions import ParserError
from sqlalchemy import select
from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.orm.session import Session
+from typing_extensions import Literal
from airflow import settings
from airflow.cli.simple_table import AirflowConsole
@@ -50,7 +51,6 @@ 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, Protocol
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 930e6b2cd6..5979c51c51 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 43ed97e518..c528b6114b 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 37882dcd78..09785aaaf5 100644
--- a/airflow/models/mappedoperator.py
+++ b/airflow/models/mappedoperator.py
@@ -25,6 +25,7 @@ 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
@@ -51,7 +52,6 @@ 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 ff1b190a5e..b28d59bee0 100644
--- a/airflow/models/taskinstance.py
+++ b/airflow/models/taskinstance.py
@@ -135,6 +135,7 @@ 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
@@ -143,7 +144,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 Literal, TypeGuard
+ from airflow.typing_compat import 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/amazon/aws/sensors/sqs.py
b/airflow/providers/amazon/aws/sensors/sqs.py
index c4bf2621f3..43191d1445 100644
--- a/airflow/providers/amazon/aws/sensors/sqs.py
+++ b/airflow/providers/amazon/aws/sensors/sqs.py
@@ -19,9 +19,10 @@
from __future__ import annotations
from functools import cached_property
-from typing import TYPE_CHECKING, Any, Collection, Literal, Sequence
+from typing import TYPE_CHECKING, Any, Collection, Sequence
from deprecated import deprecated
+from typing_extensions import Literal
from airflow.configuration import conf
from airflow.exceptions import AirflowException
diff --git a/airflow/providers/amazon/aws/transfers/sql_to_s3.py
b/airflow/providers/amazon/aws/transfers/sql_to_s3.py
index 1302927bfd..e086062023 100644
--- a/airflow/providers/amazon/aws/transfers/sql_to_s3.py
+++ b/airflow/providers/amazon/aws/transfers/sql_to_s3.py
@@ -20,7 +20,9 @@ from __future__ import annotations
import enum
from collections import namedtuple
from tempfile import NamedTemporaryFile
-from typing import TYPE_CHECKING, Iterable, Literal, Mapping, Sequence
+from typing import TYPE_CHECKING, Iterable, Mapping, Sequence
+
+from typing_extensions import Literal
from airflow.exceptions import AirflowException
from airflow.hooks.base import BaseHook
diff --git a/airflow/providers/amazon/aws/triggers/sqs.py
b/airflow/providers/amazon/aws/triggers/sqs.py
index 68f85c5f53..7b3b0f312b 100644
--- a/airflow/providers/amazon/aws/triggers/sqs.py
+++ b/airflow/providers/amazon/aws/triggers/sqs.py
@@ -17,7 +17,9 @@
from __future__ import annotations
import asyncio
-from typing import Any, AsyncIterator, Collection, Literal
+from typing import Any, AsyncIterator, Collection
+
+from typing_extensions import Literal
from airflow.exceptions import AirflowException
from airflow.providers.amazon.aws.hooks.base_aws import BaseAwsConnection
diff --git a/airflow/providers/amazon/aws/utils/sqs.py
b/airflow/providers/amazon/aws/utils/sqs.py
index 2b081e5259..ea0c7afea1 100644
--- a/airflow/providers/amazon/aws/utils/sqs.py
+++ b/airflow/providers/amazon/aws/utils/sqs.py
@@ -18,9 +18,10 @@ from __future__ import annotations
import json
import logging
-from typing import Any, Literal
+from typing import Any
from jsonpath_ng import parse
+from typing_extensions import Literal
log = logging.getLogger(__name__)
diff --git a/airflow/providers/cncf/kubernetes/operators/pod.py
b/airflow/providers/cncf/kubernetes/operators/pod.py
index f4fe0b3b2a..2a02a0bbf6 100644
--- a/airflow/providers/cncf/kubernetes/operators/pod.py
+++ b/airflow/providers/cncf/kubernetes/operators/pod.py
@@ -71,9 +71,9 @@ from airflow.version import version as airflow_version
if TYPE_CHECKING:
import jinja2
+ from typing_extensions import Literal
from airflow.providers.cncf.kubernetes.secret import Secret
- from airflow.typing_compat import Literal
from airflow.utils.context import Context
alphanum_lower = string.ascii_lowercase + string.digits
diff --git a/airflow/providers/cncf/kubernetes/utils/pod_manager.py
b/airflow/providers/cncf/kubernetes/utils/pod_manager.py
index 06371f1f1a..46d1d4bcef 100644
--- a/airflow/providers/cncf/kubernetes/utils/pod_manager.py
+++ b/airflow/providers/cncf/kubernetes/utils/pod_manager.py
@@ -28,7 +28,7 @@ from collections.abc import Iterable
from contextlib import closing, suppress
from dataclasses import dataclass
from datetime import timedelta
-from typing import TYPE_CHECKING, Generator, cast
+from typing import TYPE_CHECKING, Generator, Protocol, cast
import pendulum
import tenacity
@@ -38,11 +38,11 @@ from kubernetes.stream import stream as kubernetes_stream
from pendulum import DateTime
from pendulum.parsing.exceptions import ParserError
from tenacity import before_log
+from typing_extensions import Literal
from urllib3.exceptions import HTTPError as BaseHTTPError
from airflow.exceptions import AirflowException,
AirflowProviderDeprecationWarning
from airflow.providers.cncf.kubernetes.pod_generator import PodDefaults
-from airflow.typing_compat import Literal, Protocol
from airflow.utils.log.logging_mixin import LoggingMixin
from airflow.utils.timezone import utcnow
diff --git a/airflow/providers/mongo/hooks/mongo.py
b/airflow/providers/mongo/hooks/mongo.py
index b207c29c13..fca855a51d 100644
--- a/airflow/providers/mongo/hooks/mongo.py
+++ b/airflow/providers/mongo/hooks/mongo.py
@@ -30,7 +30,7 @@ from airflow.hooks.base import BaseHook
if TYPE_CHECKING:
from types import TracebackType
- from airflow.typing_compat import Literal
+ from typing_extensions import Literal
class MongoHook(BaseHook):
diff --git a/airflow/providers/salesforce/operators/bulk.py
b/airflow/providers/salesforce/operators/bulk.py
index 554d96656b..98f718cb02 100644
--- a/airflow/providers/salesforce/operators/bulk.py
+++ b/airflow/providers/salesforce/operators/bulk.py
@@ -22,7 +22,8 @@ from airflow.models import BaseOperator
from airflow.providers.salesforce.hooks.salesforce import SalesforceHook
if TYPE_CHECKING:
- from airflow.typing_compat import Literal
+ from typing_extensions import Literal
+
from airflow.utils.context import Context
diff --git a/airflow/providers_manager.py b/airflow/providers_manager.py
index 48de7776b7..002747c332 100644
--- a/airflow/providers_manager.py
+++ b/airflow/providers_manager.py
@@ -33,11 +33,11 @@ from time import perf_counter
from typing import TYPE_CHECKING, Any, Callable, MutableMapping, NamedTuple,
TypeVar, cast
from packaging.utils import canonicalize_name
+from typing_extensions import Literal
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 a17c6b621e..95ef459552 100644
--- a/airflow/typing_compat.py
+++ b/airflow/typing_compat.py
@@ -30,11 +30,9 @@ __all__ = [
import sys
from typing import Protocol, TypedDict, runtime_checkable
-# Literal in 3.8 is limited to one single argument, not e.g. "Literal[1, 2]".
-if sys.version_info >= (3, 9):
- from typing import Literal
-else:
- from typing import Literal
+# 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
if sys.version_info >= (3, 10):
from typing import ParamSpec, TypeGuard
diff --git a/airflow/utils/dates.py b/airflow/utils/dates.py
index 9351c64e2a..bcf8f0a183 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] = {
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index e6b350df19..a1c6e1ce1e 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -24,10 +24,7 @@ from functools import cached_property, lru_cache
from re import match
from typing import Any, Dict, List, TypeVar
-if sys.version_info >= (3, 9):
- from typing import Literal
-else:
- from typing import Literal
+from typing_extensions import Literal
from airflow_breeze.global_constants import (
ALL_PYTHON_MAJOR_MINOR_VERSIONS,