Skip to content

Commit 7d00e45

Browse files
authored
Lazily import fs and package_index hook in providers manager. (#52117)
1 parent 3df86ab commit 7d00e45

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

airflow-core/src/airflow/providers_manager.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636
from packaging.utils import canonicalize_name
3737

3838
from airflow.exceptions import AirflowOptionalProviderFeatureException
39-
from airflow.providers.standard.hooks.filesystem import FSHook
40-
from airflow.providers.standard.hooks.package_index import PackageIndexHook
4139
from airflow.typing_compat import ParamSpec
4240
from airflow.utils.entry_points import entry_points_with_dist
4341
from airflow.utils.log.logging_mixin import LoggingMixin
@@ -395,8 +393,6 @@ def __init__(self):
395393
self._initialized_cache: dict[str, bool] = {}
396394
# Keeps dict of providers keyed by module name
397395
self._provider_dict: dict[str, ProviderInfo] = {}
398-
# Keeps dict of hooks keyed by connection type
399-
self._hooks_dict: dict[str, HookInfo] = {}
400396
self._fs_set: set[str] = set()
401397
self._asset_uri_handlers: dict[str, Callable[[SplitResult], SplitResult]] = {}
402398
self._asset_factories: dict[str, Callable[..., Asset]] = {}
@@ -443,19 +439,17 @@ def _init_airflow_core_hooks(self):
443439
connection_type=None,
444440
connection_testable=False,
445441
)
446-
for cls in [FSHook, PackageIndexHook]:
447-
package_name = cls.__module__
448-
hook_class_name = f"{cls.__module__}.{cls.__name__}"
449-
hook_info = self._import_hook(
442+
for conn_type, class_name in (
443+
("fs", "airflow.providers.standard.hooks.filesystem.FSHook"),
444+
("package_index", "airflow.providers.standard.hooks.package_index.PackageIndexHook"),
445+
):
446+
self._hooks_lazy_dict[conn_type] = functools.partial(
447+
self._import_hook,
450448
connection_type=None,
451-
provider_info=None,
452-
hook_class_name=hook_class_name,
453-
package_name=package_name,
454-
)
455-
self._hook_provider_dict[hook_info.connection_type] = HookClassProvider(
456-
hook_class_name=hook_class_name, package_name=package_name
449+
package_name="apache-airflow-providers-standard",
450+
hook_class_name=class_name,
451+
provider_info=None, # type: ignore[argument]
457452
)
458-
self._hooks_lazy_dict[hook_info.connection_type] = hook_info
459453

460454
@provider_info_cache("list")
461455
def initialize_providers_list(self):
@@ -487,6 +481,7 @@ def _verify_all_providers_all_compatible(self):
487481
@provider_info_cache("hooks")
488482
def initialize_providers_hooks(self):
489483
"""Lazy initialization of providers hooks."""
484+
self._init_airflow_core_hooks()
490485
self.initialize_providers_list()
491486
self._discover_hooks()
492487
self._hook_provider_dict = dict(sorted(self._hook_provider_dict.items()))
@@ -1275,7 +1270,6 @@ def already_initialized_provider_configs(self) -> list[tuple[str, dict[str, Any]
12751270
def _cleanup(self):
12761271
self._initialized_cache.clear()
12771272
self._provider_dict.clear()
1278-
self._hooks_dict.clear()
12791273
self._fs_set.clear()
12801274
self._taskflow_decorators.clear()
12811275
self._hook_provider_dict.clear()

0 commit comments

Comments
 (0)