Skip to content

Commit 24d95ec

Browse files
authored
Remove global from plugins_manager (#59851)
* Remove global from plaungs_manager * Further rework and cleanup * Prevent re-build of Fab assets, change exclusions * Fixes * Fixes * Fixes * Fixes
1 parent d4d8e87 commit 24d95ec

File tree

22 files changed

+366
-480
lines changed

22 files changed

+366
-480
lines changed

airflow-core/src/airflow/api_fastapi/app.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import logging
2020
from contextlib import AsyncExitStack, asynccontextmanager
2121
from functools import cache
22-
from typing import TYPE_CHECKING, cast
22+
from typing import TYPE_CHECKING
2323
from urllib.parse import urlsplit
2424

2525
from fastapi import FastAPI
@@ -31,7 +31,6 @@
3131
init_error_handlers,
3232
init_flask_plugins,
3333
init_middlewares,
34-
init_ui_plugins,
3534
init_views,
3635
)
3736
from airflow.api_fastapi.execution_api.app import create_task_execution_api_app
@@ -99,7 +98,6 @@ def create_app(apps: str = "all") -> FastAPI:
9998
init_plugins(app)
10099
init_auth_manager(app)
101100
init_flask_plugins(app)
102-
init_ui_plugins(app)
103101
init_views(app) # Core views need to be the last routes added - it has a catch all route
104102
init_error_handlers(app)
105103
init_middlewares(app)
@@ -171,10 +169,9 @@ def init_plugins(app: FastAPI) -> None:
171169
"""Integrate FastAPI app, middlewares and UI plugins."""
172170
from airflow import plugins_manager
173171

174-
plugins_manager.initialize_fastapi_plugins()
172+
apps, root_middlewares = plugins_manager.get_fastapi_plugins()
175173

176-
# After calling initialize_fastapi_plugins, fastapi_apps cannot be None anymore.
177-
for subapp_dict in cast("list", plugins_manager.fastapi_apps):
174+
for subapp_dict in apps:
178175
name = subapp_dict.get("name")
179176
subapp = subapp_dict.get("app")
180177
if subapp is None:
@@ -194,8 +191,7 @@ def init_plugins(app: FastAPI) -> None:
194191
log.debug("Adding subapplication %s under prefix %s", name, url_prefix)
195192
app.mount(url_prefix, subapp)
196193

197-
# After calling initialize_fastapi_plugins, fastapi_root_middlewares cannot be None anymore.
198-
for middleware_dict in cast("list", plugins_manager.fastapi_root_middlewares):
194+
for middleware_dict in root_middlewares:
199195
name = middleware_dict.get("name")
200196
middleware = middleware_dict.get("middleware")
201197
args = middleware_dict.get("args", [])

airflow-core/src/airflow/api_fastapi/core_api/app.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -113,14 +113,10 @@ def init_flask_plugins(app: FastAPI) -> None:
113113
"""Integrate Flask plugins (plugins from Airflow 2)."""
114114
from airflow import plugins_manager
115115

116-
plugins_manager.initialize_flask_plugins()
116+
blueprints, appbuilder_views, appbuilder_menu_links = plugins_manager.get_flask_plugins()
117117

118118
# If no Airflow 2.x plugin is in the environment, no need to go further
119-
if (
120-
not plugins_manager.flask_blueprints
121-
and not plugins_manager.flask_appbuilder_views
122-
and not plugins_manager.flask_appbuilder_menu_links
123-
):
119+
if not blueprints and not appbuilder_views and not appbuilder_menu_links:
124120
return
125121

126122
from fastapi.middleware.wsgi import WSGIMiddleware
@@ -190,10 +186,3 @@ def init_middlewares(app: FastAPI) -> None:
190186
from airflow.api_fastapi.auth.managers.simple.middleware import SimpleAllAdminMiddleware
191187

192188
app.add_middleware(SimpleAllAdminMiddleware)
193-
194-
195-
def init_ui_plugins(app: FastAPI) -> None:
196-
"""Initialize UI plugins."""
197-
from airflow import plugins_manager
198-
199-
plugins_manager.initialize_ui_plugins()

airflow-core/src/airflow/api_fastapi/core_api/routes/public/plugins.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,10 @@ def get_plugins(
7575
dependencies=[Depends(requires_access_view(AccessView.PLUGINS))],
7676
)
7777
def import_errors() -> PluginImportErrorCollectionResponse:
78-
plugins_manager.ensure_plugins_loaded() # make sure import_errors are loaded
79-
78+
import_errors = plugins_manager.get_import_errors()
8079
return PluginImportErrorCollectionResponse.model_validate(
8180
{
82-
"import_errors": [
83-
{"source": source, "error": error} for source, error in plugins_manager.import_errors.items()
84-
],
85-
"total_entries": len(plugins_manager.import_errors),
81+
"import_errors": [{"source": source, "error": error} for source, error in import_errors.items()],
82+
"total_entries": len(import_errors),
8683
}
8784
)

airflow-core/src/airflow/cli/commands/plugins_command.py

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,35 +16,18 @@
1616
# under the License.
1717
from __future__ import annotations
1818

19-
import inspect
20-
from typing import Any
21-
22-
from airflow import plugins_manager
2319
from airflow.cli.simple_table import AirflowConsole
24-
from airflow.plugins_manager import PluginsDirectorySource, get_plugin_info
20+
from airflow.plugins_manager import get_plugin_info
2521
from airflow.utils.cli import suppress_logs_and_warning
2622
from airflow.utils.providers_configuration_loader import providers_configuration_loaded
2723

2824

29-
def _get_name(class_like_object) -> str:
30-
if isinstance(class_like_object, (str, PluginsDirectorySource)):
31-
return str(class_like_object)
32-
if inspect.isclass(class_like_object):
33-
return class_like_object.__name__
34-
return class_like_object.__class__.__name__
35-
36-
37-
def _join_plugins_names(value: list[Any] | Any) -> str:
38-
value = value if isinstance(value, list) else [value]
39-
return ",".join(_get_name(v) for v in value)
40-
41-
4225
@suppress_logs_and_warning
4326
@providers_configuration_loaded
4427
def dump_plugins(args):
4528
"""Dump plugins information."""
4629
plugins_info: list[dict[str, str]] = get_plugin_info()
47-
if not plugins_manager.plugins:
30+
if not plugins_info:
4831
print("No plugins loaded")
4932
return
5033

airflow-core/src/airflow/lineage/hook.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,6 @@ def get_hook_lineage_collector() -> HookLineageCollector:
337337
"""Get singleton lineage collector."""
338338
from airflow import plugins_manager
339339

340-
plugins_manager.initialize_hook_lineage_readers_plugins()
341-
if plugins_manager.hook_lineage_reader_classes:
340+
if plugins_manager.get_hook_lineage_readers_plugins():
342341
return HookLineageCollector()
343342
return NoOpCollector()

0 commit comments

Comments
 (0)