apache-airflow-providers-fab 2.4.2__py3-none-any.whl → 2.4.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of apache-airflow-providers-fab might be problematic. Click here for more details.
- airflow/providers/fab/__init__.py +1 -1
- airflow/providers/fab/auth_manager/cli_commands/definition.py +32 -0
- airflow/providers/fab/auth_manager/cli_commands/permissions_command.py +196 -0
- airflow/providers/fab/auth_manager/fab_auth_manager.py +2 -0
- airflow/providers/fab/auth_manager/security_manager/override.py +3 -2
- airflow/providers/fab/www/package-lock.json +84 -83
- airflow/providers/fab/www/package.json +4 -4
- {apache_airflow_providers_fab-2.4.2.dist-info → apache_airflow_providers_fab-2.4.3.dist-info}/METADATA +17 -6
- {apache_airflow_providers_fab-2.4.2.dist-info → apache_airflow_providers_fab-2.4.3.dist-info}/RECORD +13 -12
- {apache_airflow_providers_fab-2.4.2.dist-info → apache_airflow_providers_fab-2.4.3.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_fab-2.4.2.dist-info → apache_airflow_providers_fab-2.4.3.dist-info}/entry_points.txt +0 -0
- {apache_airflow_providers_fab-2.4.2.dist-info → apache_airflow_providers_fab-2.4.3.dist-info}/licenses/3rd-party-licenses/LICENSES-ui.txt +0 -0
- {apache_airflow_providers_fab-2.4.2.dist-info → apache_airflow_providers_fab-2.4.3.dist-info}/licenses/NOTICE +0 -0
|
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
|
|
|
29
29
|
|
|
30
30
|
__all__ = ["__version__"]
|
|
31
31
|
|
|
32
|
-
__version__ = "2.4.
|
|
32
|
+
__version__ = "2.4.3"
|
|
33
33
|
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
|
35
35
|
"3.0.2"
|
|
@@ -108,6 +108,14 @@ ARG_INCLUDE_DAGS = Arg(
|
|
|
108
108
|
("--include-dags",), help="If passed, DAG specific permissions will also be synced.", action="store_true"
|
|
109
109
|
)
|
|
110
110
|
|
|
111
|
+
# permissions cleanup
|
|
112
|
+
ARG_DRY_RUN = Arg(
|
|
113
|
+
("--dry-run",), help="Show what would be cleaned up without making any changes.", action="store_true"
|
|
114
|
+
)
|
|
115
|
+
ARG_DAG_ID_OPTIONAL = Arg(
|
|
116
|
+
("-d", "--dag-id"), help="Optional: Clean up permissions for specific DAG ID only", type=str
|
|
117
|
+
)
|
|
118
|
+
|
|
111
119
|
################
|
|
112
120
|
# # COMMANDS # #
|
|
113
121
|
################
|
|
@@ -253,6 +261,30 @@ SYNC_PERM_COMMAND = ActionCommand(
|
|
|
253
261
|
args=(ARG_INCLUDE_DAGS, ARG_VERBOSE),
|
|
254
262
|
)
|
|
255
263
|
|
|
264
|
+
PERMISSIONS_CLEANUP_COMMAND = ActionCommand(
|
|
265
|
+
name="permissions-cleanup",
|
|
266
|
+
help="Clean up DAG permissions in Flask-AppBuilder tables",
|
|
267
|
+
description=(
|
|
268
|
+
"Clean up DAG-specific permissions. By default, cleans up orphaned permissions "
|
|
269
|
+
"for deleted DAGs. Use --dag-id to clean up permissions for a specific DAG."
|
|
270
|
+
),
|
|
271
|
+
func=lazy_load_command(
|
|
272
|
+
"airflow.providers.fab.auth_manager.cli_commands.permissions_command.permissions_cleanup"
|
|
273
|
+
),
|
|
274
|
+
args=(ARG_DAG_ID_OPTIONAL, ARG_DRY_RUN, ARG_YES, ARG_VERBOSE),
|
|
275
|
+
epilog=(
|
|
276
|
+
"examples:\n"
|
|
277
|
+
"To see what orphaned permissions would be cleaned up:\n"
|
|
278
|
+
" $ airflow fab-auth-manager permissions-cleanup --dry-run\n"
|
|
279
|
+
"To clean up all orphaned permissions:\n"
|
|
280
|
+
" $ airflow fab-auth-manager permissions-cleanup\n"
|
|
281
|
+
"To clean up permissions for specific DAG:\n"
|
|
282
|
+
" $ airflow fab-auth-manager permissions-cleanup --dag-id my_dag\n"
|
|
283
|
+
"To clean up without confirmation:\n"
|
|
284
|
+
" $ airflow fab-auth-manager permissions-cleanup --yes"
|
|
285
|
+
),
|
|
286
|
+
)
|
|
287
|
+
|
|
256
288
|
DB_COMMANDS = (
|
|
257
289
|
ActionCommand(
|
|
258
290
|
name="migrate",
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
|
4
|
+
# distributed with this work for additional information
|
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
|
7
|
+
# "License"); you may not use this file except in compliance
|
|
8
|
+
# with the License. You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
|
13
|
+
# software distributed under the License is distributed on an
|
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
# KIND, either express or implied. See the License for the
|
|
16
|
+
# specific language governing permissions and limitations
|
|
17
|
+
# under the License.
|
|
18
|
+
"""Permissions cleanup command."""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import logging
|
|
23
|
+
from typing import TYPE_CHECKING
|
|
24
|
+
|
|
25
|
+
from airflow.utils import cli as cli_utils
|
|
26
|
+
from airflow.utils.providers_configuration_loader import providers_configuration_loaded
|
|
27
|
+
from airflow.utils.session import NEW_SESSION, provide_session
|
|
28
|
+
from airflow.utils.strings import to_boolean
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from sqlalchemy.orm import Session
|
|
32
|
+
|
|
33
|
+
log = logging.getLogger(__name__)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@provide_session
|
|
37
|
+
def cleanup_dag_permissions(dag_id: str, session: Session = NEW_SESSION) -> None:
|
|
38
|
+
"""
|
|
39
|
+
Clean up DAG-specific permissions from Flask-AppBuilder tables.
|
|
40
|
+
|
|
41
|
+
When a DAG is deleted, we need to clean up the corresponding permissions
|
|
42
|
+
to prevent orphaned entries in the ab_view_menu table.
|
|
43
|
+
|
|
44
|
+
This addresses issue #50905: Deleted DAGs not removed from ab_view_menu table
|
|
45
|
+
and show up in permissions.
|
|
46
|
+
|
|
47
|
+
:param dag_id: Specific DAG ID to clean up.
|
|
48
|
+
:param session: Database session.
|
|
49
|
+
"""
|
|
50
|
+
from sqlalchemy import delete, select
|
|
51
|
+
|
|
52
|
+
from airflow.providers.fab.auth_manager.models import Permission, Resource, assoc_permission_role
|
|
53
|
+
from airflow.security.permissions import RESOURCE_DAG_PREFIX, RESOURCE_DAG_RUN, RESOURCE_DETAILS_MAP
|
|
54
|
+
|
|
55
|
+
# Clean up specific DAG permissions
|
|
56
|
+
dag_resources = session.scalars(
|
|
57
|
+
select(Resource).filter(
|
|
58
|
+
Resource.name.in_(
|
|
59
|
+
[
|
|
60
|
+
f"{RESOURCE_DAG_PREFIX}{dag_id}", # DAG:dag_id
|
|
61
|
+
f"{RESOURCE_DETAILS_MAP[RESOURCE_DAG_RUN]['prefix']}{dag_id}", # DAG_RUN:dag_id
|
|
62
|
+
]
|
|
63
|
+
)
|
|
64
|
+
)
|
|
65
|
+
).all()
|
|
66
|
+
log.info("Cleaning up DAG-specific permissions for dag_id: %s", dag_id)
|
|
67
|
+
|
|
68
|
+
if not dag_resources:
|
|
69
|
+
return
|
|
70
|
+
|
|
71
|
+
dag_resource_ids = [resource.id for resource in dag_resources]
|
|
72
|
+
|
|
73
|
+
# Find all permissions associated with these resources
|
|
74
|
+
dag_permissions = session.scalars(
|
|
75
|
+
select(Permission).filter(Permission.resource_id.in_(dag_resource_ids))
|
|
76
|
+
).all()
|
|
77
|
+
|
|
78
|
+
if not dag_permissions:
|
|
79
|
+
# Delete resources even if no permissions exist
|
|
80
|
+
session.execute(delete(Resource).where(Resource.id.in_(dag_resource_ids)))
|
|
81
|
+
return
|
|
82
|
+
|
|
83
|
+
dag_permission_ids = [permission.id for permission in dag_permissions]
|
|
84
|
+
|
|
85
|
+
# Delete permission-role associations first (foreign key constraint)
|
|
86
|
+
session.execute(
|
|
87
|
+
delete(assoc_permission_role).where(
|
|
88
|
+
assoc_permission_role.c.permission_view_id.in_(dag_permission_ids)
|
|
89
|
+
)
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
# Delete permissions
|
|
93
|
+
session.execute(delete(Permission).where(Permission.resource_id.in_(dag_resource_ids)))
|
|
94
|
+
|
|
95
|
+
# Delete resources (ab_view_menu entries)
|
|
96
|
+
session.execute(delete(Resource).where(Resource.id.in_(dag_resource_ids)))
|
|
97
|
+
|
|
98
|
+
log.info("Cleaned up %d DAG-specific permissions", len(dag_permissions))
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@cli_utils.action_cli
|
|
102
|
+
@providers_configuration_loaded
|
|
103
|
+
def permissions_cleanup(args):
|
|
104
|
+
"""Clean up DAG permissions in Flask-AppBuilder tables."""
|
|
105
|
+
from sqlalchemy import select
|
|
106
|
+
|
|
107
|
+
from airflow.models import DagModel
|
|
108
|
+
from airflow.providers.fab.auth_manager.cli_commands.utils import get_application_builder
|
|
109
|
+
from airflow.providers.fab.auth_manager.models import Resource
|
|
110
|
+
from airflow.security.permissions import (
|
|
111
|
+
RESOURCE_DAG_PREFIX,
|
|
112
|
+
RESOURCE_DAG_RUN,
|
|
113
|
+
RESOURCE_DETAILS_MAP,
|
|
114
|
+
)
|
|
115
|
+
from airflow.utils.session import create_session
|
|
116
|
+
|
|
117
|
+
with get_application_builder() as _:
|
|
118
|
+
with create_session() as session:
|
|
119
|
+
# Get all existing DAG IDs from DagModel
|
|
120
|
+
existing_dag_ids = {dag.dag_id for dag in session.scalars(select(DagModel)).all()}
|
|
121
|
+
|
|
122
|
+
# Get all DAG-related resources from FAB tables
|
|
123
|
+
dag_resources = session.scalars(
|
|
124
|
+
select(Resource).filter(
|
|
125
|
+
Resource.name.like(f"{RESOURCE_DAG_PREFIX}%")
|
|
126
|
+
| Resource.name.like(f"{RESOURCE_DETAILS_MAP[RESOURCE_DAG_RUN]['prefix']}%")
|
|
127
|
+
)
|
|
128
|
+
).all()
|
|
129
|
+
|
|
130
|
+
orphaned_resources = []
|
|
131
|
+
orphaned_dag_ids = set()
|
|
132
|
+
|
|
133
|
+
for resource in dag_resources:
|
|
134
|
+
# Extract DAG ID from resource name
|
|
135
|
+
dag_id = None
|
|
136
|
+
if resource.name.startswith(RESOURCE_DAG_PREFIX):
|
|
137
|
+
dag_id = resource.name[len(RESOURCE_DAG_PREFIX) :]
|
|
138
|
+
elif resource.name.startswith(RESOURCE_DETAILS_MAP[RESOURCE_DAG_RUN]["prefix"]):
|
|
139
|
+
dag_id = resource.name[len(RESOURCE_DETAILS_MAP[RESOURCE_DAG_RUN]["prefix"]) :]
|
|
140
|
+
|
|
141
|
+
# Check if this DAG ID still exists
|
|
142
|
+
if dag_id and dag_id not in existing_dag_ids:
|
|
143
|
+
orphaned_resources.append(resource)
|
|
144
|
+
orphaned_dag_ids.add(dag_id)
|
|
145
|
+
|
|
146
|
+
# Filter by specific DAG ID if provided
|
|
147
|
+
if args.dag_id:
|
|
148
|
+
if args.dag_id in orphaned_dag_ids:
|
|
149
|
+
orphaned_dag_ids = {args.dag_id}
|
|
150
|
+
print(f"Filtering to clean up permissions for DAG: {args.dag_id}")
|
|
151
|
+
else:
|
|
152
|
+
print(
|
|
153
|
+
f"DAG '{args.dag_id}' not found in orphaned permissions or still exists in database."
|
|
154
|
+
)
|
|
155
|
+
return
|
|
156
|
+
|
|
157
|
+
if not orphaned_dag_ids:
|
|
158
|
+
if args.dag_id:
|
|
159
|
+
print(f"No orphaned permissions found for DAG: {args.dag_id}")
|
|
160
|
+
else:
|
|
161
|
+
print("No orphaned DAG permissions found.")
|
|
162
|
+
return
|
|
163
|
+
|
|
164
|
+
print(f"Found orphaned permissions for {len(orphaned_dag_ids)} deleted DAG(s):")
|
|
165
|
+
for dag_id in sorted(orphaned_dag_ids):
|
|
166
|
+
print(f" - {dag_id}")
|
|
167
|
+
|
|
168
|
+
if args.dry_run:
|
|
169
|
+
print("\nDry run mode: No changes will be made.")
|
|
170
|
+
print(f"Would clean up permissions for {len(orphaned_dag_ids)} orphaned DAG(s).")
|
|
171
|
+
return
|
|
172
|
+
|
|
173
|
+
# Perform cleanup if not in dry run mode
|
|
174
|
+
if not args.yes:
|
|
175
|
+
action = (
|
|
176
|
+
f"clean up permissions for {len(orphaned_dag_ids)} DAG(s)"
|
|
177
|
+
if not args.dag_id
|
|
178
|
+
else f"clean up permissions for DAG '{args.dag_id}'"
|
|
179
|
+
)
|
|
180
|
+
confirm = input(f"\nDo you want to {action}? [y/N]: ")
|
|
181
|
+
if not to_boolean(confirm):
|
|
182
|
+
print("Cleanup cancelled.")
|
|
183
|
+
return
|
|
184
|
+
|
|
185
|
+
# Perform the actual cleanup
|
|
186
|
+
cleanup_count = 0
|
|
187
|
+
for dag_id in orphaned_dag_ids:
|
|
188
|
+
try:
|
|
189
|
+
cleanup_dag_permissions(dag_id, session)
|
|
190
|
+
cleanup_count += 1
|
|
191
|
+
if args.verbose:
|
|
192
|
+
print(f"Cleaned up permissions for DAG: {dag_id}")
|
|
193
|
+
except Exception as e:
|
|
194
|
+
print(f"Failed to clean up permissions for DAG {dag_id}: {e}")
|
|
195
|
+
|
|
196
|
+
print(f"\nSuccessfully cleaned up permissions for {cleanup_count} DAG(s).")
|
|
@@ -60,6 +60,7 @@ from airflow.exceptions import AirflowConfigException, AirflowException
|
|
|
60
60
|
from airflow.models import DagModel
|
|
61
61
|
from airflow.providers.fab.auth_manager.cli_commands.definition import (
|
|
62
62
|
DB_COMMANDS,
|
|
63
|
+
PERMISSIONS_CLEANUP_COMMAND,
|
|
63
64
|
ROLES_COMMANDS,
|
|
64
65
|
SYNC_PERM_COMMAND,
|
|
65
66
|
USERS_COMMANDS,
|
|
@@ -211,6 +212,7 @@ class FabAuthManager(BaseAuthManager[User]):
|
|
|
211
212
|
subcommands=ROLES_COMMANDS,
|
|
212
213
|
),
|
|
213
214
|
SYNC_PERM_COMMAND, # not in a command group
|
|
215
|
+
PERMISSIONS_CLEANUP_COMMAND, # single command for permissions cleanup
|
|
214
216
|
]
|
|
215
217
|
# If Airflow version is 3.0.0 or higher, add the fab-db command group
|
|
216
218
|
if packaging.version.parse(
|
|
@@ -112,6 +112,7 @@ if TYPE_CHECKING:
|
|
|
112
112
|
RESOURCE_ASSET_ALIAS,
|
|
113
113
|
)
|
|
114
114
|
from airflow.sdk import DAG
|
|
115
|
+
from airflow.serialization.serialized_objects import SerializedDAG
|
|
115
116
|
else:
|
|
116
117
|
from airflow.providers.common.compat.security.permissions import (
|
|
117
118
|
RESOURCE_ASSET,
|
|
@@ -122,13 +123,13 @@ if AIRFLOW_V_3_1_PLUS:
|
|
|
122
123
|
from airflow.models.dagbag import DBDagBag
|
|
123
124
|
from airflow.utils.session import create_session
|
|
124
125
|
|
|
125
|
-
def _iter_dags() -> Iterable[DAG]:
|
|
126
|
+
def _iter_dags() -> Iterable[DAG | SerializedDAG]:
|
|
126
127
|
with create_session() as session:
|
|
127
128
|
yield from DBDagBag().iter_all_latest_version_dags(session=session)
|
|
128
129
|
else:
|
|
129
130
|
from airflow.models.dagbag import DagBag
|
|
130
131
|
|
|
131
|
-
def _iter_dags() -> Iterable[DAG]:
|
|
132
|
+
def _iter_dags() -> Iterable[DAG | SerializedDAG]:
|
|
132
133
|
dagbag = DagBag(read_dags_from_db=True) # type: ignore[call-arg]
|
|
133
134
|
dagbag.collect_dags_from_db() # type: ignore[attr-defined]
|
|
134
135
|
return dagbag.dags.values()
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"moment-timezone": "^0.6.0"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@babel/core": "^7.28.
|
|
17
|
-
"@babel/eslint-parser": "^7.28.
|
|
16
|
+
"@babel/core": "^7.28.4",
|
|
17
|
+
"@babel/eslint-parser": "^7.28.4",
|
|
18
18
|
"@babel/plugin-transform-runtime": "^7.28.3",
|
|
19
19
|
"@babel/preset-env": "^7.28.3",
|
|
20
20
|
"babel-loader": "^10.0.0",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"copy-webpack-plugin": "^13.0.1",
|
|
23
23
|
"css-loader": "7.1.2",
|
|
24
24
|
"css-minimizer-webpack-plugin": "^7.0.2",
|
|
25
|
-
"eslint": "^9.
|
|
25
|
+
"eslint": "^9.35.0",
|
|
26
26
|
"eslint-config-prettier": "^10.1.8",
|
|
27
27
|
"eslint-plugin-html": "^8.1.3",
|
|
28
28
|
"eslint-plugin-import": "^2.32.0",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"moment": "^2.29.4",
|
|
34
34
|
"moment-locales-webpack-plugin": "^1.2.0",
|
|
35
35
|
"prettier": "^3.6.2",
|
|
36
|
-
"stylelint": "^16.
|
|
36
|
+
"stylelint": "^16.24.0",
|
|
37
37
|
"terser-webpack-plugin": "<6.0.0",
|
|
38
38
|
"url-loader": "4.1.1",
|
|
39
39
|
"webpack": "^5.101.3",
|
|
@@ -42,19 +42,6 @@
|
|
|
42
42
|
"webpack-manifest-plugin": "^5.0.1"
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
|
-
"node_modules/@ampproject/remapping": {
|
|
46
|
-
"version": "2.3.0",
|
|
47
|
-
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
|
|
48
|
-
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
|
|
49
|
-
"dev": true,
|
|
50
|
-
"dependencies": {
|
|
51
|
-
"@jridgewell/gen-mapping": "^0.3.5",
|
|
52
|
-
"@jridgewell/trace-mapping": "^0.3.24"
|
|
53
|
-
},
|
|
54
|
-
"engines": {
|
|
55
|
-
"node": ">=6.0.0"
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
45
|
"node_modules/@babel/code-frame": {
|
|
59
46
|
"version": "7.27.1",
|
|
60
47
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
|
|
@@ -80,22 +67,22 @@
|
|
|
80
67
|
}
|
|
81
68
|
},
|
|
82
69
|
"node_modules/@babel/core": {
|
|
83
|
-
"version": "7.28.
|
|
84
|
-
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.
|
|
85
|
-
"integrity": "sha512-
|
|
70
|
+
"version": "7.28.4",
|
|
71
|
+
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz",
|
|
72
|
+
"integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
|
|
86
73
|
"dev": true,
|
|
87
74
|
"license": "MIT",
|
|
88
75
|
"dependencies": {
|
|
89
|
-
"@ampproject/remapping": "^2.2.0",
|
|
90
76
|
"@babel/code-frame": "^7.27.1",
|
|
91
77
|
"@babel/generator": "^7.28.3",
|
|
92
78
|
"@babel/helper-compilation-targets": "^7.27.2",
|
|
93
79
|
"@babel/helper-module-transforms": "^7.28.3",
|
|
94
|
-
"@babel/helpers": "^7.28.
|
|
95
|
-
"@babel/parser": "^7.28.
|
|
80
|
+
"@babel/helpers": "^7.28.4",
|
|
81
|
+
"@babel/parser": "^7.28.4",
|
|
96
82
|
"@babel/template": "^7.27.2",
|
|
97
|
-
"@babel/traverse": "^7.28.
|
|
98
|
-
"@babel/types": "^7.28.
|
|
83
|
+
"@babel/traverse": "^7.28.4",
|
|
84
|
+
"@babel/types": "^7.28.4",
|
|
85
|
+
"@jridgewell/remapping": "^2.3.5",
|
|
99
86
|
"convert-source-map": "^2.0.0",
|
|
100
87
|
"debug": "^4.1.0",
|
|
101
88
|
"gensync": "^1.0.0-beta.2",
|
|
@@ -111,10 +98,11 @@
|
|
|
111
98
|
}
|
|
112
99
|
},
|
|
113
100
|
"node_modules/@babel/eslint-parser": {
|
|
114
|
-
"version": "7.28.
|
|
115
|
-
"resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.
|
|
116
|
-
"integrity": "sha512-
|
|
101
|
+
"version": "7.28.4",
|
|
102
|
+
"resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.4.tgz",
|
|
103
|
+
"integrity": "sha512-Aa+yDiH87980jR6zvRfFuCR1+dLb00vBydhTL+zI992Rz/wQhSvuxjmOOuJOgO3XmakO6RykRGD2S1mq1AtgHA==",
|
|
117
104
|
"dev": true,
|
|
105
|
+
"license": "MIT",
|
|
118
106
|
"dependencies": {
|
|
119
107
|
"@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
|
|
120
108
|
"eslint-visitor-keys": "^2.1.0",
|
|
@@ -404,27 +392,27 @@
|
|
|
404
392
|
}
|
|
405
393
|
},
|
|
406
394
|
"node_modules/@babel/helpers": {
|
|
407
|
-
"version": "7.28.
|
|
408
|
-
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.
|
|
409
|
-
"integrity": "sha512-
|
|
395
|
+
"version": "7.28.4",
|
|
396
|
+
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
|
|
397
|
+
"integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
|
|
410
398
|
"dev": true,
|
|
411
399
|
"license": "MIT",
|
|
412
400
|
"dependencies": {
|
|
413
401
|
"@babel/template": "^7.27.2",
|
|
414
|
-
"@babel/types": "^7.28.
|
|
402
|
+
"@babel/types": "^7.28.4"
|
|
415
403
|
},
|
|
416
404
|
"engines": {
|
|
417
405
|
"node": ">=6.9.0"
|
|
418
406
|
}
|
|
419
407
|
},
|
|
420
408
|
"node_modules/@babel/parser": {
|
|
421
|
-
"version": "7.28.
|
|
422
|
-
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.
|
|
423
|
-
"integrity": "sha512-
|
|
409
|
+
"version": "7.28.4",
|
|
410
|
+
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz",
|
|
411
|
+
"integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
|
|
424
412
|
"dev": true,
|
|
425
413
|
"license": "MIT",
|
|
426
414
|
"dependencies": {
|
|
427
|
-
"@babel/types": "^7.28.
|
|
415
|
+
"@babel/types": "^7.28.4"
|
|
428
416
|
},
|
|
429
417
|
"bin": {
|
|
430
418
|
"parser": "bin/babel-parser.js"
|
|
@@ -1563,18 +1551,18 @@
|
|
|
1563
1551
|
}
|
|
1564
1552
|
},
|
|
1565
1553
|
"node_modules/@babel/traverse": {
|
|
1566
|
-
"version": "7.28.
|
|
1567
|
-
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.
|
|
1568
|
-
"integrity": "sha512-
|
|
1554
|
+
"version": "7.28.4",
|
|
1555
|
+
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz",
|
|
1556
|
+
"integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==",
|
|
1569
1557
|
"dev": true,
|
|
1570
1558
|
"license": "MIT",
|
|
1571
1559
|
"dependencies": {
|
|
1572
1560
|
"@babel/code-frame": "^7.27.1",
|
|
1573
1561
|
"@babel/generator": "^7.28.3",
|
|
1574
1562
|
"@babel/helper-globals": "^7.28.0",
|
|
1575
|
-
"@babel/parser": "^7.28.
|
|
1563
|
+
"@babel/parser": "^7.28.4",
|
|
1576
1564
|
"@babel/template": "^7.27.2",
|
|
1577
|
-
"@babel/types": "^7.28.
|
|
1565
|
+
"@babel/types": "^7.28.4",
|
|
1578
1566
|
"debug": "^4.3.1"
|
|
1579
1567
|
},
|
|
1580
1568
|
"engines": {
|
|
@@ -1582,9 +1570,9 @@
|
|
|
1582
1570
|
}
|
|
1583
1571
|
},
|
|
1584
1572
|
"node_modules/@babel/types": {
|
|
1585
|
-
"version": "7.28.
|
|
1586
|
-
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.
|
|
1587
|
-
"integrity": "sha512-
|
|
1573
|
+
"version": "7.28.4",
|
|
1574
|
+
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
|
|
1575
|
+
"integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
|
|
1588
1576
|
"dev": true,
|
|
1589
1577
|
"license": "MIT",
|
|
1590
1578
|
"dependencies": {
|
|
@@ -1684,10 +1672,11 @@
|
|
|
1684
1672
|
}
|
|
1685
1673
|
},
|
|
1686
1674
|
"node_modules/@eslint-community/eslint-utils": {
|
|
1687
|
-
"version": "4.
|
|
1688
|
-
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.
|
|
1689
|
-
"integrity": "sha512-
|
|
1675
|
+
"version": "4.8.0",
|
|
1676
|
+
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.8.0.tgz",
|
|
1677
|
+
"integrity": "sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==",
|
|
1690
1678
|
"dev": true,
|
|
1679
|
+
"license": "MIT",
|
|
1691
1680
|
"dependencies": {
|
|
1692
1681
|
"eslint-visitor-keys": "^3.4.3"
|
|
1693
1682
|
},
|
|
@@ -1706,6 +1695,7 @@
|
|
|
1706
1695
|
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
|
|
1707
1696
|
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
|
|
1708
1697
|
"dev": true,
|
|
1698
|
+
"license": "Apache-2.0",
|
|
1709
1699
|
"engines": {
|
|
1710
1700
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
|
1711
1701
|
},
|
|
@@ -1817,9 +1807,9 @@
|
|
|
1817
1807
|
}
|
|
1818
1808
|
},
|
|
1819
1809
|
"node_modules/@eslint/js": {
|
|
1820
|
-
"version": "9.
|
|
1821
|
-
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.
|
|
1822
|
-
"integrity": "sha512-
|
|
1810
|
+
"version": "9.35.0",
|
|
1811
|
+
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.35.0.tgz",
|
|
1812
|
+
"integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==",
|
|
1823
1813
|
"dev": true,
|
|
1824
1814
|
"license": "MIT",
|
|
1825
1815
|
"engines": {
|
|
@@ -1957,6 +1947,17 @@
|
|
|
1957
1947
|
"@jridgewell/trace-mapping": "^0.3.24"
|
|
1958
1948
|
}
|
|
1959
1949
|
},
|
|
1950
|
+
"node_modules/@jridgewell/remapping": {
|
|
1951
|
+
"version": "2.3.5",
|
|
1952
|
+
"resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
|
|
1953
|
+
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
|
|
1954
|
+
"dev": true,
|
|
1955
|
+
"license": "MIT",
|
|
1956
|
+
"dependencies": {
|
|
1957
|
+
"@jridgewell/gen-mapping": "^0.3.5",
|
|
1958
|
+
"@jridgewell/trace-mapping": "^0.3.24"
|
|
1959
|
+
}
|
|
1960
|
+
},
|
|
1960
1961
|
"node_modules/@jridgewell/resolve-uri": {
|
|
1961
1962
|
"version": "3.1.2",
|
|
1962
1963
|
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
|
@@ -1993,9 +1994,9 @@
|
|
|
1993
1994
|
}
|
|
1994
1995
|
},
|
|
1995
1996
|
"node_modules/@keyv/serialize": {
|
|
1996
|
-
"version": "1.1.
|
|
1997
|
-
"resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.
|
|
1998
|
-
"integrity": "sha512-
|
|
1997
|
+
"version": "1.1.1",
|
|
1998
|
+
"resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz",
|
|
1999
|
+
"integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==",
|
|
1999
2000
|
"dev": true,
|
|
2000
2001
|
"license": "MIT"
|
|
2001
2002
|
},
|
|
@@ -2872,24 +2873,24 @@
|
|
|
2872
2873
|
"dev": true
|
|
2873
2874
|
},
|
|
2874
2875
|
"node_modules/cacheable": {
|
|
2875
|
-
"version": "1.10.
|
|
2876
|
-
"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.
|
|
2877
|
-
"integrity": "sha512-
|
|
2876
|
+
"version": "1.10.4",
|
|
2877
|
+
"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.4.tgz",
|
|
2878
|
+
"integrity": "sha512-Gd7ccIUkZ9TE2odLQVS+PDjIvQCdJKUlLdJRVvZu0aipj07Qfx+XIej7hhDrKGGoIxV5m5fT/kOJNJPQhQneRg==",
|
|
2878
2879
|
"dev": true,
|
|
2879
2880
|
"license": "MIT",
|
|
2880
2881
|
"dependencies": {
|
|
2881
|
-
"hookified": "^1.
|
|
2882
|
-
"keyv": "^5.
|
|
2882
|
+
"hookified": "^1.11.0",
|
|
2883
|
+
"keyv": "^5.5.0"
|
|
2883
2884
|
}
|
|
2884
2885
|
},
|
|
2885
2886
|
"node_modules/cacheable/node_modules/keyv": {
|
|
2886
|
-
"version": "5.
|
|
2887
|
-
"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.
|
|
2888
|
-
"integrity": "sha512-
|
|
2887
|
+
"version": "5.5.1",
|
|
2888
|
+
"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.1.tgz",
|
|
2889
|
+
"integrity": "sha512-eF3cHZ40bVsjdlRi/RvKAuB0+B61Q1xWvohnrJrnaQslM3h1n79IV+mc9EGag4nrA9ZOlNyr3TUzW5c8uy8vNA==",
|
|
2889
2890
|
"dev": true,
|
|
2890
2891
|
"license": "MIT",
|
|
2891
2892
|
"dependencies": {
|
|
2892
|
-
"@keyv/serialize": "^1.1.
|
|
2893
|
+
"@keyv/serialize": "^1.1.1"
|
|
2893
2894
|
}
|
|
2894
2895
|
},
|
|
2895
2896
|
"node_modules/call-bind": {
|
|
@@ -3997,19 +3998,19 @@
|
|
|
3997
3998
|
}
|
|
3998
3999
|
},
|
|
3999
4000
|
"node_modules/eslint": {
|
|
4000
|
-
"version": "9.
|
|
4001
|
-
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.
|
|
4002
|
-
"integrity": "sha512-
|
|
4001
|
+
"version": "9.35.0",
|
|
4002
|
+
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.35.0.tgz",
|
|
4003
|
+
"integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==",
|
|
4003
4004
|
"dev": true,
|
|
4004
4005
|
"license": "MIT",
|
|
4005
4006
|
"dependencies": {
|
|
4006
|
-
"@eslint-community/eslint-utils": "^4.
|
|
4007
|
+
"@eslint-community/eslint-utils": "^4.8.0",
|
|
4007
4008
|
"@eslint-community/regexpp": "^4.12.1",
|
|
4008
4009
|
"@eslint/config-array": "^0.21.0",
|
|
4009
4010
|
"@eslint/config-helpers": "^0.3.1",
|
|
4010
4011
|
"@eslint/core": "^0.15.2",
|
|
4011
4012
|
"@eslint/eslintrc": "^3.3.1",
|
|
4012
|
-
"@eslint/js": "9.
|
|
4013
|
+
"@eslint/js": "9.35.0",
|
|
4013
4014
|
"@eslint/plugin-kit": "^0.3.5",
|
|
4014
4015
|
"@humanfs/node": "^0.16.6",
|
|
4015
4016
|
"@humanwhocodes/module-importer": "^1.0.1",
|
|
@@ -4652,15 +4653,15 @@
|
|
|
4652
4653
|
}
|
|
4653
4654
|
},
|
|
4654
4655
|
"node_modules/flat-cache": {
|
|
4655
|
-
"version": "6.1.
|
|
4656
|
-
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.
|
|
4657
|
-
"integrity": "sha512-
|
|
4656
|
+
"version": "6.1.13",
|
|
4657
|
+
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.13.tgz",
|
|
4658
|
+
"integrity": "sha512-gmtS2PaUjSPa4zjObEIn4WWliKyZzYljgxODBfxugpK6q6HU9ClXzgCJ+nlcPKY9Bt090ypTOLIFWkV0jbKFjw==",
|
|
4658
4659
|
"dev": true,
|
|
4659
4660
|
"license": "MIT",
|
|
4660
4661
|
"dependencies": {
|
|
4661
|
-
"cacheable": "^1.10.
|
|
4662
|
+
"cacheable": "^1.10.4",
|
|
4662
4663
|
"flatted": "^3.3.3",
|
|
4663
|
-
"hookified": "^1.
|
|
4664
|
+
"hookified": "^1.11.0"
|
|
4664
4665
|
}
|
|
4665
4666
|
},
|
|
4666
4667
|
"node_modules/flatted": {
|
|
@@ -5016,9 +5017,9 @@
|
|
|
5016
5017
|
}
|
|
5017
5018
|
},
|
|
5018
5019
|
"node_modules/hookified": {
|
|
5019
|
-
"version": "1.
|
|
5020
|
-
"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.
|
|
5021
|
-
"integrity": "sha512-
|
|
5020
|
+
"version": "1.12.0",
|
|
5021
|
+
"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.12.0.tgz",
|
|
5022
|
+
"integrity": "sha512-hMr1Y9TCLshScrBbV2QxJ9BROddxZ12MX9KsCtuGGy/3SmmN5H1PllKerrVlSotur9dlE8hmUKAOSa3WDzsZmQ==",
|
|
5022
5023
|
"dev": true,
|
|
5023
5024
|
"license": "MIT"
|
|
5024
5025
|
},
|
|
@@ -7932,9 +7933,9 @@
|
|
|
7932
7933
|
}
|
|
7933
7934
|
},
|
|
7934
7935
|
"node_modules/stylelint": {
|
|
7935
|
-
"version": "16.
|
|
7936
|
-
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.
|
|
7937
|
-
"integrity": "sha512-
|
|
7936
|
+
"version": "16.24.0",
|
|
7937
|
+
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.24.0.tgz",
|
|
7938
|
+
"integrity": "sha512-7ksgz3zJaSbTUGr/ujMXvLVKdDhLbGl3R/3arNudH7z88+XZZGNLMTepsY28WlnvEFcuOmUe7fg40Q3lfhOfSQ==",
|
|
7938
7939
|
"dev": true,
|
|
7939
7940
|
"funding": [
|
|
7940
7941
|
{
|
|
@@ -7961,7 +7962,7 @@
|
|
|
7961
7962
|
"debug": "^4.4.1",
|
|
7962
7963
|
"fast-glob": "^3.3.3",
|
|
7963
7964
|
"fastest-levenshtein": "^1.0.16",
|
|
7964
|
-
"file-entry-cache": "^10.1.
|
|
7965
|
+
"file-entry-cache": "^10.1.4",
|
|
7965
7966
|
"global-modules": "^2.0.0",
|
|
7966
7967
|
"globby": "^11.1.0",
|
|
7967
7968
|
"globjoin": "^0.1.4",
|
|
@@ -8038,13 +8039,13 @@
|
|
|
8038
8039
|
}
|
|
8039
8040
|
},
|
|
8040
8041
|
"node_modules/stylelint/node_modules/file-entry-cache": {
|
|
8041
|
-
"version": "10.1.
|
|
8042
|
-
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.
|
|
8043
|
-
"integrity": "sha512-
|
|
8042
|
+
"version": "10.1.4",
|
|
8043
|
+
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.4.tgz",
|
|
8044
|
+
"integrity": "sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==",
|
|
8044
8045
|
"dev": true,
|
|
8045
8046
|
"license": "MIT",
|
|
8046
8047
|
"dependencies": {
|
|
8047
|
-
"flat-cache": "^6.1.
|
|
8048
|
+
"flat-cache": "^6.1.13"
|
|
8048
8049
|
}
|
|
8049
8050
|
},
|
|
8050
8051
|
"node_modules/stylelint/node_modules/ignore": {
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
]
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@babel/core": "^7.28.
|
|
43
|
-
"@babel/eslint-parser": "^7.28.
|
|
42
|
+
"@babel/core": "^7.28.4",
|
|
43
|
+
"@babel/eslint-parser": "^7.28.4",
|
|
44
44
|
"@babel/plugin-transform-runtime": "^7.28.3",
|
|
45
45
|
"@babel/preset-env": "^7.28.3",
|
|
46
46
|
"babel-loader": "^10.0.0",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"copy-webpack-plugin": "^13.0.1",
|
|
49
49
|
"css-loader": "7.1.2",
|
|
50
50
|
"css-minimizer-webpack-plugin": "^7.0.2",
|
|
51
|
-
"eslint": "^9.
|
|
51
|
+
"eslint": "^9.35.0",
|
|
52
52
|
"eslint-config-prettier": "^10.1.8",
|
|
53
53
|
"eslint-plugin-html": "^8.1.3",
|
|
54
54
|
"eslint-plugin-import": "^2.32.0",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"moment": "^2.29.4",
|
|
60
60
|
"moment-locales-webpack-plugin": "^1.2.0",
|
|
61
61
|
"prettier": "^3.6.2",
|
|
62
|
-
"stylelint": "^16.
|
|
62
|
+
"stylelint": "^16.24.0",
|
|
63
63
|
"terser-webpack-plugin": "<6.0.0",
|
|
64
64
|
"url-loader": "4.1.1",
|
|
65
65
|
"webpack": "^5.101.3",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-fab
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.3
|
|
4
4
|
Summary: Provider package apache-airflow-providers-fab for Apache Airflow
|
|
5
5
|
Keywords: airflow-provider,fab,airflow,integration
|
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
|
@@ -33,10 +33,11 @@ Requires-Dist: connexion[flask]>=2.14.2,<3.0; python_version < '3.13'
|
|
|
33
33
|
Requires-Dist: jmespath>=0.7.0; python_version < '3.13'
|
|
34
34
|
Requires-Dist: werkzeug>=2.2,<4; python_version < '3.13'
|
|
35
35
|
Requires-Dist: wtforms>=3.0,<4; python_version < '3.13'
|
|
36
|
+
Requires-Dist: flask_limiter>3,<4,!=3.13
|
|
36
37
|
Requires-Dist: kerberos>=1.3.0 ; extra == "kerberos" and ( python_version < '3.13')
|
|
37
38
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
38
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.4.
|
|
39
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.4.
|
|
39
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.4.3/changelog.html
|
|
40
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.4.3
|
|
40
41
|
Project-URL: Mastodon, https://fosstodon.org/@airflow
|
|
41
42
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
|
42
43
|
Project-URL: Source Code, https://github.com/apache/airflow
|
|
@@ -68,7 +69,7 @@ Provides-Extra: kerberos
|
|
|
68
69
|
|
|
69
70
|
Package ``apache-airflow-providers-fab``
|
|
70
71
|
|
|
71
|
-
Release: ``2.4.
|
|
72
|
+
Release: ``2.4.3``
|
|
72
73
|
|
|
73
74
|
|
|
74
75
|
`Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
|
|
@@ -81,7 +82,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
|
|
|
81
82
|
are in ``airflow.providers.fab`` python package.
|
|
82
83
|
|
|
83
84
|
You can find package information and changelog for the provider
|
|
84
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.4.
|
|
85
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.4.3/>`_.
|
|
85
86
|
|
|
86
87
|
Installation
|
|
87
88
|
------------
|
|
@@ -110,6 +111,7 @@ PIP package Version required
|
|
|
110
111
|
``jmespath`` ``>=0.7.0; python_version < "3.13"``
|
|
111
112
|
``werkzeug`` ``>=2.2,<4; python_version < "3.13"``
|
|
112
113
|
``wtforms`` ``>=3.0,<4; python_version < "3.13"``
|
|
114
|
+
``flask_limiter`` ``>3,!=3.13,<4``
|
|
113
115
|
========================================== ==========================================
|
|
114
116
|
|
|
115
117
|
Cross provider package dependencies
|
|
@@ -131,6 +133,15 @@ Dependent package
|
|
|
131
133
|
`apache-airflow-providers-common-compat <https://airflow.apache.org/docs/apache-airflow-providers-common-compat>`_ ``common.compat``
|
|
132
134
|
================================================================================================================== =================
|
|
133
135
|
|
|
136
|
+
Optional dependencies
|
|
137
|
+
----------------------
|
|
138
|
+
|
|
139
|
+
============ ============================================
|
|
140
|
+
Extra Dependencies
|
|
141
|
+
============ ============================================
|
|
142
|
+
``kerberos`` ``kerberos>=1.3.0; python_version < '3.13'``
|
|
143
|
+
============ ============================================
|
|
144
|
+
|
|
134
145
|
The changelog for the provider package can be found in the
|
|
135
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.4.
|
|
146
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.4.3/changelog.html>`_.
|
|
136
147
|
|
{apache_airflow_providers_fab-2.4.2.dist-info → apache_airflow_providers_fab-2.4.3.dist-info}/RECORD
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
airflow/providers/fab/LICENSE,sha256=gXPVwptPlW1TJ4HSuG5OMPg-a3h43OGMkZRR1rpwfJA,10850
|
|
2
|
-
airflow/providers/fab/__init__.py,sha256=
|
|
2
|
+
airflow/providers/fab/__init__.py,sha256=MlmpqZ7-xO_XC45_TnMR3YXyeUJYe8fxsxOHN0AN8is,1490
|
|
3
3
|
airflow/providers/fab/alembic.ini,sha256=_1SvObfjMAkuD7DN5VR2S6Rd7_F81pORZT-w7GJldIA,4461
|
|
4
4
|
airflow/providers/fab/get_provider_info.py,sha256=Pf7JwSshIaIanP6bFifJTPNhNexWZNiv4h4usLMfZR4,10635
|
|
5
5
|
airflow/providers/fab/version_compat.py,sha256=1qJhqKH0Bi4HG-pJW6npWYkLx76DBuXP-6A-cgGe77Y,1536
|
|
6
6
|
airflow/providers/fab/auth_manager/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
7
|
-
airflow/providers/fab/auth_manager/fab_auth_manager.py,sha256=
|
|
7
|
+
airflow/providers/fab/auth_manager/fab_auth_manager.py,sha256=i0ZTA_xrwJyxCpaTTK8tzngS4v8-x6o_C-ZXgscJkwY,25780
|
|
8
8
|
airflow/providers/fab/auth_manager/api/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
9
9
|
airflow/providers/fab/auth_manager/api/auth/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
10
10
|
airflow/providers/fab/auth_manager/api/auth/backend/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
@@ -25,7 +25,8 @@ airflow/providers/fab/auth_manager/api_fastapi/services/__init__.py,sha256=9hdXH
|
|
|
25
25
|
airflow/providers/fab/auth_manager/api_fastapi/services/login.py,sha256=rJtO6LDdXlFkABQ2f-OHbee2hnYWyJIOc_VG-g67flo,2627
|
|
26
26
|
airflow/providers/fab/auth_manager/cli_commands/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
27
27
|
airflow/providers/fab/auth_manager/cli_commands/db_command.py,sha256=SeNg8giLDUX5aniF2XFM7txVQ6N2dDV6BRZnV-UzWX8,2151
|
|
28
|
-
airflow/providers/fab/auth_manager/cli_commands/definition.py,sha256=
|
|
28
|
+
airflow/providers/fab/auth_manager/cli_commands/definition.py,sha256=qKw6V7htxQPG4DmoRnXtJlm2oK9ec5h5o-cwcErhNkk,12842
|
|
29
|
+
airflow/providers/fab/auth_manager/cli_commands/permissions_command.py,sha256=ITn62u5rW2clf_PwupSs4joAlbkAk6w-HHgPHeSgQWo,7715
|
|
29
30
|
airflow/providers/fab/auth_manager/cli_commands/role_command.py,sha256=4w1tHTR5gBbsymeqGIJ4Rs8CmGdw0l49y58pfI0DB_s,9098
|
|
30
31
|
airflow/providers/fab/auth_manager/cli_commands/sync_perm_command.py,sha256=VpW-rWhgHAL_ReU66D_BrsxlXQN4okfxzj6dyE5IfwA,1663
|
|
31
32
|
airflow/providers/fab/auth_manager/cli_commands/user_command.py,sha256=jkJZnuw17YGTCuUZHtnkSQ6pcUr38nDHetuRdV-0N5o,10273
|
|
@@ -40,7 +41,7 @@ airflow/providers/fab/auth_manager/schemas/role_and_permission_schema.py,sha256=
|
|
|
40
41
|
airflow/providers/fab/auth_manager/schemas/user_schema.py,sha256=MLnZotQqAg_BFvJunrSwbwur5CaTjk1ww3eCI3aPT6Y,2401
|
|
41
42
|
airflow/providers/fab/auth_manager/security_manager/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
42
43
|
airflow/providers/fab/auth_manager/security_manager/constants.py,sha256=x1Sjl_Mu3wmaSy3NFZlHxK2z-juzWmMs1SrzJ0aiBBQ,907
|
|
43
|
-
airflow/providers/fab/auth_manager/security_manager/override.py,sha256=
|
|
44
|
+
airflow/providers/fab/auth_manager/security_manager/override.py,sha256=FgPPnzHyNWseiou_ui5NMQkXXMnneTeoQ0mW-fWikc8,99886
|
|
44
45
|
airflow/providers/fab/auth_manager/views/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
45
46
|
airflow/providers/fab/auth_manager/views/permissions.py,sha256=CT6jMCDHtirs0Qe4Penb6VwQq1yZeZ1lOLZITIlVqm4,2904
|
|
46
47
|
airflow/providers/fab/auth_manager/views/roles_list.py,sha256=DwJ1iOCfpbxsWTEFWjW5_Jo3fmrZwxj1rPeflTaSg7A,1512
|
|
@@ -58,8 +59,8 @@ airflow/providers/fab/www/airflow_flask_app.py,sha256=-JPQ-mS1kKEj5adENnoVSD4LaF
|
|
|
58
59
|
airflow/providers/fab/www/app.py,sha256=4Bmh5KOx-ZbfbmP5EdjOaOlcE9NWsAeBXGdKWzfFkkQ,5346
|
|
59
60
|
airflow/providers/fab/www/auth.py,sha256=KfxXu5Gnawdukifnay9QRz46iOgMWIaKjHuYyp_aXKc,11881
|
|
60
61
|
airflow/providers/fab/www/constants.py,sha256=UaDdEt_JsqcMYAMn0s9VBvVTKnRoLrvc2Ii59iOg5iQ,1346
|
|
61
|
-
airflow/providers/fab/www/package-lock.json,sha256=
|
|
62
|
-
airflow/providers/fab/www/package.json,sha256=
|
|
62
|
+
airflow/providers/fab/www/package-lock.json,sha256=lsYPyt1pE7F6cBv6owVswHCP17rg0gdRwQfKf1WxdF8,329414
|
|
63
|
+
airflow/providers/fab/www/package.json,sha256=dEcb_XJBnJS1rvg6oPNZs7uONAlIQnjwx7IubxBFHFo,2355
|
|
63
64
|
airflow/providers/fab/www/security_appless.py,sha256=J0OJGRPq6NK2vY6qfMRvyMUEc-E59vXucquQdjgsndY,1655
|
|
64
65
|
airflow/providers/fab/www/security_manager.py,sha256=7YCUYuQufEaxPNnIK5OUrdcx9Gmz4FNpy50rxCKisN4,4859
|
|
65
66
|
airflow/providers/fab/www/session.py,sha256=qyy8ipXLe4qH7D52tH3aKY6hyJNJ5tUfHel7_1S4BGg,1741
|
|
@@ -125,9 +126,9 @@ airflow/providers/fab/www/templates/appbuilder/index.html,sha256=ZaZsNdD8fCENqdn
|
|
|
125
126
|
airflow/providers/fab/www/templates/appbuilder/navbar.html,sha256=1Q8u90aONY_PKTBtApwyp0EeudSsJyysW2UYo9Fa1cc,10215
|
|
126
127
|
airflow/providers/fab/www/templates/appbuilder/navbar_menu.html,sha256=WWQ-_QLMqcW4Cpx_1_yulaQO-soD6ztnY2zfmBAUAGI,2034
|
|
127
128
|
airflow/providers/fab/www/templates/appbuilder/navbar_right.html,sha256=qrwZDBbzLi4yhLrfai842MJDdQ4C31Xz9hJ3NoG5mo0,2488
|
|
128
|
-
apache_airflow_providers_fab-2.4.
|
|
129
|
-
apache_airflow_providers_fab-2.4.
|
|
130
|
-
apache_airflow_providers_fab-2.4.
|
|
131
|
-
apache_airflow_providers_fab-2.4.
|
|
132
|
-
apache_airflow_providers_fab-2.4.
|
|
133
|
-
apache_airflow_providers_fab-2.4.
|
|
129
|
+
apache_airflow_providers_fab-2.4.3.dist-info/entry_points.txt,sha256=m05kASp7vFi0ZmQ--CFp7GeJpPL7UT2RQF8EEP5XRX8,99
|
|
130
|
+
apache_airflow_providers_fab-2.4.3.dist-info/licenses/3rd-party-licenses/LICENSES-ui.txt,sha256=C9vBr_KiUhI3jjCS754n_SPi-ylD8SiJgXlOWuNOO98,3688
|
|
131
|
+
apache_airflow_providers_fab-2.4.3.dist-info/licenses/NOTICE,sha256=GrKwLaFNGIn3J86ucRfNIExRSCD6-7nty84-84F2ad4,448
|
|
132
|
+
apache_airflow_providers_fab-2.4.3.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
133
|
+
apache_airflow_providers_fab-2.4.3.dist-info/METADATA,sha256=3CY818oyJ5AyQm-sg1AdwL6TIPeY3eUy-jXlQVXM79c,7114
|
|
134
|
+
apache_airflow_providers_fab-2.4.3.dist-info/RECORD,,
|
{apache_airflow_providers_fab-2.4.2.dist-info → apache_airflow_providers_fab-2.4.3.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|