This is an automated email from the ASF dual-hosted git repository.
potiuk 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 452a978337 Improve modules import in cncf.kubernetes probvider by move
some of them into a type-checking block (#33781)
452a978337 is described below
commit 452a97833753175806bcb5077a566897a906a1c9
Author: Hussein Awala <[email protected]>
AuthorDate: Sun Aug 27 19:04:45 2023 +0200
Improve modules import in cncf.kubernetes probvider by move some of them
into a type-checking block (#33781)
---
airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py | 5 +++--
.../cncf/kubernetes/executors/kubernetes_executor_utils.py | 3 ++-
.../cncf/kubernetes/executors/local_kubernetes_executor.py | 6 +++---
airflow/providers/cncf/kubernetes/hooks/kubernetes.py | 4 +++-
airflow/providers/cncf/kubernetes/k8s_model.py | 4 +++-
airflow/providers/cncf/kubernetes/operators/pod.py | 4 ++--
airflow/providers/cncf/kubernetes/operators/resource.py | 5 ++++-
airflow/providers/cncf/kubernetes/pod_generator.py | 5 ++++-
airflow/providers/cncf/kubernetes/pod_launcher_deprecated.py | 5 ++++-
airflow/providers/cncf/kubernetes/template_rendering.py | 6 +++++-
airflow/providers/cncf/kubernetes/triggers/pod.py | 7 ++++---
airflow/providers/cncf/kubernetes/utils/delete_from.py | 5 ++++-
airflow/providers/cncf/kubernetes/utils/pod_manager.py | 6 +++---
13 files changed, 44 insertions(+), 21 deletions(-)
diff --git a/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py
b/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py
index 33161097c7..90e4927c34 100644
--- a/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py
+++ b/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py
@@ -23,7 +23,6 @@ KubernetesExecutor.
"""
from __future__ import annotations
-import argparse
import json
import logging
import multiprocessing
@@ -35,7 +34,6 @@ from queue import Empty, Queue
from typing import TYPE_CHECKING, Any, Sequence
from sqlalchemy import select, update
-from sqlalchemy.orm import Session
from airflow.exceptions import AirflowException
@@ -83,8 +81,11 @@ from airflow.utils.session import NEW_SESSION,
provide_session
from airflow.utils.state import TaskInstanceState
if TYPE_CHECKING:
+ import argparse
+
from kubernetes import client
from kubernetes.client import models as k8s
+ from sqlalchemy.orm import Session
from airflow.executors.base_executor import CommandType
from airflow.models.taskinstance import TaskInstance
diff --git
a/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py
b/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py
index b19d88eb49..099eceda0b 100644
--- a/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py
+++ b/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py
@@ -23,7 +23,6 @@ from queue import Empty, Queue
from typing import TYPE_CHECKING, Any, Generic, TypeVar
from kubernetes import client, watch
-from kubernetes.client import Configuration, models as k8s
from kubernetes.client.rest import ApiException
from urllib3.exceptions import ReadTimeoutError
@@ -51,6 +50,8 @@ except ImportError:
)
if TYPE_CHECKING:
+ from kubernetes.client import Configuration, models as k8s
+
from airflow.providers.cncf.kubernetes.executors.kubernetes_executor_types
import (
KubernetesJobType,
KubernetesResultsType,
diff --git
a/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
b/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
index 49977a35ef..fb268a9447 100644
--- a/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
+++ b/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py
@@ -19,15 +19,15 @@ from __future__ import annotations
from typing import TYPE_CHECKING, Sequence
-from airflow.callbacks.base_callback_sink import BaseCallbackSink
-from airflow.callbacks.callback_requests import CallbackRequest
from airflow.configuration import conf
-from airflow.executors.local_executor import LocalExecutor
from airflow.providers.cncf.kubernetes.executors.kubernetes_executor import
KubernetesExecutor
from airflow.utils.log.logging_mixin import LoggingMixin
if TYPE_CHECKING:
+ from airflow.callbacks.base_callback_sink import BaseCallbackSink
+ from airflow.callbacks.callback_requests import CallbackRequest
from airflow.executors.base_executor import CommandType,
EventBufferValueType, QueuedTaskInstanceType
+ from airflow.executors.local_executor import LocalExecutor
from airflow.models.taskinstance import SimpleTaskInstance, TaskInstance,
TaskInstanceKey
diff --git a/airflow/providers/cncf/kubernetes/hooks/kubernetes.py
b/airflow/providers/cncf/kubernetes/hooks/kubernetes.py
index d4b09f7d11..8e2989da06 100644
--- a/airflow/providers/cncf/kubernetes/hooks/kubernetes.py
+++ b/airflow/providers/cncf/kubernetes/hooks/kubernetes.py
@@ -24,7 +24,6 @@ from typing import TYPE_CHECKING, Any, Generator
from asgiref.sync import sync_to_async
from kubernetes import client, config, watch
-from kubernetes.client.models import V1Pod
from kubernetes.config import ConfigException
from kubernetes_asyncio import client as async_client, config as async_config
from urllib3.exceptions import HTTPError
@@ -36,6 +35,9 @@ from airflow.providers.cncf.kubernetes.kube_client import
_disable_verify_ssl, _
from airflow.providers.cncf.kubernetes.utils.pod_manager import
PodOperatorHookProtocol
from airflow.utils import yaml
+if TYPE_CHECKING:
+ from kubernetes.client.models import V1Pod
+
LOADING_KUBE_CONFIG_FILE_RESOURCE = "Loading Kubernetes configuration file
kube_config from {}..."
diff --git a/airflow/providers/cncf/kubernetes/k8s_model.py
b/airflow/providers/cncf/kubernetes/k8s_model.py
index 8280a3265f..cff12d057b 100644
--- a/airflow/providers/cncf/kubernetes/k8s_model.py
+++ b/airflow/providers/cncf/kubernetes/k8s_model.py
@@ -19,8 +19,10 @@ from __future__ import annotations
from abc import ABC, abstractmethod
from functools import reduce
+from typing import TYPE_CHECKING
-from kubernetes.client import models as k8s
+if TYPE_CHECKING:
+ from kubernetes.client import models as k8s
class K8SModel(ABC):
diff --git a/airflow/providers/cncf/kubernetes/operators/pod.py
b/airflow/providers/cncf/kubernetes/operators/pod.py
index c30c5c4e09..f4fe0b3b2a 100644
--- a/airflow/providers/cncf/kubernetes/operators/pod.py
+++ b/airflow/providers/cncf/kubernetes/operators/pod.py
@@ -52,7 +52,6 @@ from
airflow.providers.cncf.kubernetes.backcompat.backwards_compat_converters im
)
from airflow.providers.cncf.kubernetes.hooks.kubernetes import KubernetesHook
from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator
-from airflow.providers.cncf.kubernetes.secret import Secret
from airflow.providers.cncf.kubernetes.triggers.pod import KubernetesPodTrigger
from airflow.providers.cncf.kubernetes.utils import xcom_sidecar # type:
ignore[attr-defined]
from airflow.providers.cncf.kubernetes.utils.pod_manager import (
@@ -65,7 +64,6 @@ from airflow.providers.cncf.kubernetes.utils.pod_manager
import (
get_container_termination_message,
)
from airflow.settings import pod_mutation_hook
-from airflow.typing_compat import Literal
from airflow.utils import yaml
from airflow.utils.helpers import prune_dict, validate_key
from airflow.utils.timezone import utcnow
@@ -74,6 +72,8 @@ from airflow.version import version as airflow_version
if TYPE_CHECKING:
import jinja2
+ 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/operators/resource.py
b/airflow/providers/cncf/kubernetes/operators/resource.py
index d70a138a41..b8bd65eb26 100644
--- a/airflow/providers/cncf/kubernetes/operators/resource.py
+++ b/airflow/providers/cncf/kubernetes/operators/resource.py
@@ -19,15 +19,18 @@
from __future__ import annotations
from functools import cached_property
+from typing import TYPE_CHECKING
import yaml
-from kubernetes.client import ApiClient
from kubernetes.utils import create_from_yaml
from airflow.models import BaseOperator
from airflow.providers.cncf.kubernetes.hooks.kubernetes import KubernetesHook
from airflow.providers.cncf.kubernetes.utils.delete_from import
delete_from_yaml
+if TYPE_CHECKING:
+ from kubernetes.client import ApiClient
+
__all__ = ["KubernetesCreateResourceOperator",
"KubernetesDeleteResourceOperator"]
diff --git a/airflow/providers/cncf/kubernetes/pod_generator.py
b/airflow/providers/cncf/kubernetes/pod_generator.py
index 39f58b9aa7..a96236359b 100644
--- a/airflow/providers/cncf/kubernetes/pod_generator.py
+++ b/airflow/providers/cncf/kubernetes/pod_generator.py
@@ -25,11 +25,11 @@ is supported and no serialization need be written.
from __future__ import annotations
import copy
-import datetime
import logging
import os
import warnings
from functools import reduce
+from typing import TYPE_CHECKING
import re2
from dateutil import parser
@@ -55,6 +55,9 @@ from
airflow.providers.cncf.kubernetes.utils.k8s_hashlib_wrapper import md5
from airflow.utils import yaml
from airflow.version import version as airflow_version
+if TYPE_CHECKING:
+ import datetime
+
log = logging.getLogger(__name__)
MAX_LABEL_LEN = 63
diff --git a/airflow/providers/cncf/kubernetes/pod_launcher_deprecated.py
b/airflow/providers/cncf/kubernetes/pod_launcher_deprecated.py
index 045c42e9ff..95a629af52 100644
--- a/airflow/providers/cncf/kubernetes/pod_launcher_deprecated.py
+++ b/airflow/providers/cncf/kubernetes/pod_launcher_deprecated.py
@@ -22,11 +22,11 @@ import math
import time
import warnings
from datetime import datetime as dt
+from typing import TYPE_CHECKING
import pendulum
import tenacity
from kubernetes import client, watch
-from kubernetes.client.models.v1_pod import V1Pod
from kubernetes.client.rest import ApiException
from kubernetes.stream import stream as kubernetes_stream
from requests.exceptions import HTTPError
@@ -38,6 +38,9 @@ from airflow.settings import pod_mutation_hook
from airflow.utils.log.logging_mixin import LoggingMixin
from airflow.utils.state import State
+if TYPE_CHECKING:
+ from kubernetes.client.models.v1_pod import V1Pod
+
warnings.warn(
"""
Please use :mod: Please use
`airflow.providers.cncf.kubernetes.utils.pod_manager`
diff --git a/airflow/providers/cncf/kubernetes/template_rendering.py
b/airflow/providers/cncf/kubernetes/template_rendering.py
index 5461284e46..558229de84 100644
--- a/airflow/providers/cncf/kubernetes/template_rendering.py
+++ b/airflow/providers/cncf/kubernetes/template_rendering.py
@@ -17,11 +17,12 @@
from __future__ import annotations
+from typing import TYPE_CHECKING
+
from jinja2 import TemplateAssertionError, UndefinedError
from kubernetes.client.api_client import ApiClient
from airflow import AirflowException
-from airflow.models.taskinstance import TaskInstance
from airflow.providers.cncf.kubernetes.kube_config import KubeConfig
from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import (
create_pod_id,
@@ -29,6 +30,9 @@ from
airflow.providers.cncf.kubernetes.kubernetes_helper_functions import (
from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator
from airflow.utils.session import NEW_SESSION, provide_session
+if TYPE_CHECKING:
+ from airflow.models.taskinstance import TaskInstance
+
def render_k8s_pod_yaml(task_instance: TaskInstance) -> dict | None:
"""Render k8s pod yaml."""
diff --git a/airflow/providers/cncf/kubernetes/triggers/pod.py
b/airflow/providers/cncf/kubernetes/triggers/pod.py
index f3f18a660a..f330de1341 100644
--- a/airflow/providers/cncf/kubernetes/triggers/pod.py
+++ b/airflow/providers/cncf/kubernetes/triggers/pod.py
@@ -21,15 +21,16 @@ import datetime
import warnings
from asyncio import CancelledError
from enum import Enum
-from typing import Any, AsyncIterator
-
-from kubernetes_asyncio.client.models import V1Pod
+from typing import TYPE_CHECKING, Any, AsyncIterator
from airflow.exceptions import AirflowProviderDeprecationWarning
from airflow.providers.cncf.kubernetes.hooks.kubernetes import
AsyncKubernetesHook
from airflow.providers.cncf.kubernetes.utils.pod_manager import
OnFinishAction, PodPhase
from airflow.triggers.base import BaseTrigger, TriggerEvent
+if TYPE_CHECKING:
+ from kubernetes_asyncio.client.models import V1Pod
+
class ContainerState(str, Enum):
"""
diff --git a/airflow/providers/cncf/kubernetes/utils/delete_from.py
b/airflow/providers/cncf/kubernetes/utils/delete_from.py
index 98d1c4d6d9..2b28169ca6 100644
--- a/airflow/providers/cncf/kubernetes/utils/delete_from.py
+++ b/airflow/providers/cncf/kubernetes/utils/delete_from.py
@@ -20,9 +20,12 @@
from __future__ import annotations
import re
+from typing import TYPE_CHECKING
from kubernetes import client
-from kubernetes.client import ApiClient
+
+if TYPE_CHECKING:
+ from kubernetes.client import ApiClient
DEFAULT_DELETION_BODY = client.V1DeleteOptions(
propagation_policy="Background",
diff --git a/airflow/providers/cncf/kubernetes/utils/pod_manager.py
b/airflow/providers/cncf/kubernetes/utils/pod_manager.py
index 49c6518696..06371f1f1a 100644
--- a/airflow/providers/cncf/kubernetes/utils/pod_manager.py
+++ b/airflow/providers/cncf/kubernetes/utils/pod_manager.py
@@ -33,15 +33,12 @@ from typing import TYPE_CHECKING, Generator, cast
import pendulum
import tenacity
from kubernetes import client, watch
-from kubernetes.client.models.v1_container_status import V1ContainerStatus
-from kubernetes.client.models.v1_pod import V1Pod
from kubernetes.client.rest import ApiException
from kubernetes.stream import stream as kubernetes_stream
from pendulum import DateTime
from pendulum.parsing.exceptions import ParserError
from tenacity import before_log
from urllib3.exceptions import HTTPError as BaseHTTPError
-from urllib3.response import HTTPResponse
from airflow.exceptions import AirflowException,
AirflowProviderDeprecationWarning
from airflow.providers.cncf.kubernetes.pod_generator import PodDefaults
@@ -51,6 +48,9 @@ from airflow.utils.timezone import utcnow
if TYPE_CHECKING:
from kubernetes.client.models.core_v1_event_list import CoreV1EventList
+ from kubernetes.client.models.v1_container_status import V1ContainerStatus
+ from kubernetes.client.models.v1_pod import V1Pod
+ from urllib3.response import HTTPResponse
class PodLaunchFailedException(AirflowException):