apache-airflow-providers-fab 1.4.0rc1__tar.gz → 1.4.1__tar.gz
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.
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/PKG-INFO +42 -20
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/README.rst +34 -14
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/__init__.py +1 -1
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py +1 -3
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py +1 -1
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/fab_auth_manager.py +12 -9
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/models/anonymous_user.py +1 -1
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/security_manager/override.py +11 -5
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/get_provider_info.py +3 -1
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/pyproject.toml +9 -6
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/LICENSE +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/alembic.ini +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/api/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/api/auth/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/api/auth/backend/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/api_endpoints/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/api_endpoints/role_and_permission_endpoint.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/api_endpoints/user_endpoint.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/cli_commands/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/cli_commands/db_command.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/cli_commands/definition.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/cli_commands/role_command.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/cli_commands/sync_perm_command.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/cli_commands/user_command.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/cli_commands/utils.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/decorators/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/decorators/auth.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/models/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/models/db.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/openapi/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/openapi/v1.yaml +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/security_manager/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/security_manager/constants.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/views/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/views/permissions.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/views/roles_list.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/views/user.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/views/user_edit.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/auth_manager/views/user_stats.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/migrations/README +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/migrations/__init__.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/migrations/env.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/migrations/script.py.mako +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/migrations/versions/0001_1_4_0_placeholder_migration.py +0 -0
- {apache_airflow_providers_fab-1.4.0rc1 → apache_airflow_providers_fab-1.4.1}/airflow/providers/fab/migrations/versions/__init__.py +0 -0
@@ -1,11 +1,11 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: apache-airflow-providers-fab
|
3
|
-
Version: 1.4.
|
3
|
+
Version: 1.4.1
|
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>
|
7
7
|
Maintainer-email: Apache Software Foundation <dev@airflow.apache.org>
|
8
|
-
Requires-Python: ~=3.
|
8
|
+
Requires-Python: ~=3.9
|
9
9
|
Description-Content-Type: text/x-rst
|
10
10
|
Classifier: Development Status :: 5 - Production/Stable
|
11
11
|
Classifier: Environment :: Console
|
@@ -15,26 +15,28 @@ Classifier: Intended Audience :: System Administrators
|
|
15
15
|
Classifier: Framework :: Apache Airflow
|
16
16
|
Classifier: Framework :: Apache Airflow :: Provider
|
17
17
|
Classifier: License :: OSI Approved :: Apache Software License
|
18
|
-
Classifier: Programming Language :: Python :: 3.8
|
19
18
|
Classifier: Programming Language :: Python :: 3.9
|
20
19
|
Classifier: Programming Language :: Python :: 3.10
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
23
22
|
Classifier: Topic :: System :: Monitoring
|
24
|
-
Requires-Dist: apache-airflow>=2.
|
23
|
+
Requires-Dist: apache-airflow-providers-common-compat>=1.2.0
|
24
|
+
Requires-Dist: apache-airflow>=2.9.0
|
25
25
|
Requires-Dist: flask-appbuilder==4.5.0
|
26
26
|
Requires-Dist: flask-login>=0.6.2
|
27
27
|
Requires-Dist: flask>=2.2,<2.3
|
28
28
|
Requires-Dist: google-re2>=1.0
|
29
29
|
Requires-Dist: jmespath>=0.7.0
|
30
|
+
Requires-Dist: apache-airflow-providers-common-compat ; extra == "common.compat"
|
30
31
|
Requires-Dist: kerberos>=1.3.0 ; extra == "kerberos"
|
31
32
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
32
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.
|
33
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.
|
33
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1/changelog.html
|
34
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1
|
34
35
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
35
36
|
Project-URL: Source Code, https://github.com/apache/airflow
|
36
37
|
Project-URL: Twitter, https://twitter.com/ApacheAirflow
|
37
38
|
Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
39
|
+
Provides-Extra: common.compat
|
38
40
|
Provides-Extra: kerberos
|
39
41
|
|
40
42
|
|
@@ -81,7 +83,7 @@ Provides-Extra: kerberos
|
|
81
83
|
|
82
84
|
Package ``apache-airflow-providers-fab``
|
83
85
|
|
84
|
-
Release: ``1.4.
|
86
|
+
Release: ``1.4.1``
|
85
87
|
|
86
88
|
|
87
89
|
`Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
|
@@ -94,7 +96,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
|
|
94
96
|
are in ``airflow.providers.fab`` python package.
|
95
97
|
|
96
98
|
You can find package information and changelog for the provider
|
97
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.
|
99
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1/>`_.
|
98
100
|
|
99
101
|
Installation
|
100
102
|
------------
|
@@ -103,21 +105,41 @@ You can install this package on top of an existing Airflow 2 installation (see `
|
|
103
105
|
for the minimum Airflow version supported) via
|
104
106
|
``pip install apache-airflow-providers-fab``
|
105
107
|
|
106
|
-
The package supports the following python versions: 3.
|
108
|
+
The package supports the following python versions: 3.9,3.10,3.11,3.12
|
107
109
|
|
108
110
|
Requirements
|
109
111
|
------------
|
110
112
|
|
111
|
-
|
112
|
-
PIP package
|
113
|
-
|
114
|
-
``apache-airflow``
|
115
|
-
``
|
116
|
-
``flask
|
117
|
-
``flask-
|
118
|
-
``
|
119
|
-
``
|
120
|
-
|
113
|
+
========================================== ==================
|
114
|
+
PIP package Version required
|
115
|
+
========================================== ==================
|
116
|
+
``apache-airflow`` ``>=2.9.0``
|
117
|
+
``apache-airflow-providers-common-compat`` ``>=1.2.0``
|
118
|
+
``flask`` ``>=2.2,<2.3``
|
119
|
+
``flask-appbuilder`` ``==4.5.0``
|
120
|
+
``flask-login`` ``>=0.6.2``
|
121
|
+
``google-re2`` ``>=1.0``
|
122
|
+
``jmespath`` ``>=0.7.0``
|
123
|
+
========================================== ==================
|
124
|
+
|
125
|
+
Cross provider package dependencies
|
126
|
+
-----------------------------------
|
127
|
+
|
128
|
+
Those are dependencies that might be needed in order to use all the features of the package.
|
129
|
+
You need to install the specified provider packages in order to use them.
|
130
|
+
|
131
|
+
You can install such cross-provider dependencies when installing from PyPI. For example:
|
132
|
+
|
133
|
+
.. code-block:: bash
|
134
|
+
|
135
|
+
pip install apache-airflow-providers-fab[common.compat]
|
136
|
+
|
137
|
+
|
138
|
+
================================================================================================================== =================
|
139
|
+
Dependent package Extra
|
140
|
+
================================================================================================================== =================
|
141
|
+
`apache-airflow-providers-common-compat <https://airflow.apache.org/docs/apache-airflow-providers-common-compat>`_ ``common.compat``
|
142
|
+
================================================================================================================== =================
|
121
143
|
|
122
144
|
The changelog for the provider package can be found in the
|
123
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.
|
145
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1/changelog.html>`_.
|
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
Package ``apache-airflow-providers-fab``
|
44
44
|
|
45
|
-
Release: ``1.4.
|
45
|
+
Release: ``1.4.1``
|
46
46
|
|
47
47
|
|
48
48
|
`Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
|
@@ -55,7 +55,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
|
|
55
55
|
are in ``airflow.providers.fab`` python package.
|
56
56
|
|
57
57
|
You can find package information and changelog for the provider
|
58
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.
|
58
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1/>`_.
|
59
59
|
|
60
60
|
Installation
|
61
61
|
------------
|
@@ -64,21 +64,41 @@ You can install this package on top of an existing Airflow 2 installation (see `
|
|
64
64
|
for the minimum Airflow version supported) via
|
65
65
|
``pip install apache-airflow-providers-fab``
|
66
66
|
|
67
|
-
The package supports the following python versions: 3.
|
67
|
+
The package supports the following python versions: 3.9,3.10,3.11,3.12
|
68
68
|
|
69
69
|
Requirements
|
70
70
|
------------
|
71
71
|
|
72
|
-
|
73
|
-
PIP package
|
74
|
-
|
75
|
-
``apache-airflow``
|
76
|
-
``
|
77
|
-
``flask
|
78
|
-
``flask-
|
79
|
-
``
|
80
|
-
``
|
81
|
-
|
72
|
+
========================================== ==================
|
73
|
+
PIP package Version required
|
74
|
+
========================================== ==================
|
75
|
+
``apache-airflow`` ``>=2.9.0``
|
76
|
+
``apache-airflow-providers-common-compat`` ``>=1.2.0``
|
77
|
+
``flask`` ``>=2.2,<2.3``
|
78
|
+
``flask-appbuilder`` ``==4.5.0``
|
79
|
+
``flask-login`` ``>=0.6.2``
|
80
|
+
``google-re2`` ``>=1.0``
|
81
|
+
``jmespath`` ``>=0.7.0``
|
82
|
+
========================================== ==================
|
83
|
+
|
84
|
+
Cross provider package dependencies
|
85
|
+
-----------------------------------
|
86
|
+
|
87
|
+
Those are dependencies that might be needed in order to use all the features of the package.
|
88
|
+
You need to install the specified provider packages in order to use them.
|
89
|
+
|
90
|
+
You can install such cross-provider dependencies when installing from PyPI. For example:
|
91
|
+
|
92
|
+
.. code-block:: bash
|
93
|
+
|
94
|
+
pip install apache-airflow-providers-fab[common.compat]
|
95
|
+
|
96
|
+
|
97
|
+
================================================================================================================== =================
|
98
|
+
Dependent package Extra
|
99
|
+
================================================================================================================== =================
|
100
|
+
`apache-airflow-providers-common-compat <https://airflow.apache.org/docs/apache-airflow-providers-common-compat>`_ ``common.compat``
|
101
|
+
================================================================================================================== =================
|
82
102
|
|
83
103
|
The changelog for the provider package can be found in the
|
84
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.
|
104
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1/changelog.html>`_.
|
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
|
|
29
29
|
|
30
30
|
__all__ = ["__version__"]
|
31
31
|
|
32
|
-
__version__ = "1.4.
|
32
|
+
__version__ = "1.4.1"
|
33
33
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
35
35
|
"2.9.0"
|
@@ -62,9 +62,7 @@ def requires_authentication(function: T):
|
|
62
62
|
|
63
63
|
@wraps(function)
|
64
64
|
def decorated(*args, **kwargs):
|
65
|
-
if auth_current_user() is not None or current_app.
|
66
|
-
"AUTH_ROLE_PUBLIC", None
|
67
|
-
):
|
65
|
+
if auth_current_user() is not None or current_app.config.get("AUTH_ROLE_PUBLIC", None):
|
68
66
|
return function(*args, **kwargs)
|
69
67
|
else:
|
70
68
|
return Response("Unauthorized", 401, {"WWW-Authenticate": "Basic"})
|
@@ -124,7 +124,7 @@ def requires_authentication(function: T, find_user: Callable[[str], BaseUser] |
|
|
124
124
|
|
125
125
|
@wraps(function)
|
126
126
|
def decorated(*args, **kwargs):
|
127
|
-
if current_app.
|
127
|
+
if current_app.config.get("AUTH_ROLE_PUBLIC", None):
|
128
128
|
response = function(*args, **kwargs)
|
129
129
|
return make_response(response)
|
130
130
|
|
@@ -37,7 +37,6 @@ from airflow.auth.managers.models.resource_details import (
|
|
37
37
|
ConnectionDetails,
|
38
38
|
DagAccessEntity,
|
39
39
|
DagDetails,
|
40
|
-
DatasetDetails,
|
41
40
|
PoolDetails,
|
42
41
|
VariableDetails,
|
43
42
|
)
|
@@ -67,7 +66,6 @@ from airflow.security.permissions import (
|
|
67
66
|
RESOURCE_DAG_DEPENDENCIES,
|
68
67
|
RESOURCE_DAG_RUN,
|
69
68
|
RESOURCE_DAG_WARNING,
|
70
|
-
RESOURCE_DATASET,
|
71
69
|
RESOURCE_DOCS,
|
72
70
|
RESOURCE_IMPORT_ERROR,
|
73
71
|
RESOURCE_JOB,
|
@@ -94,7 +92,15 @@ if TYPE_CHECKING:
|
|
94
92
|
from airflow.cli.cli_config import (
|
95
93
|
CLICommand,
|
96
94
|
)
|
95
|
+
from airflow.providers.common.compat.assets import AssetDetails
|
97
96
|
from airflow.providers.fab.auth_manager.security_manager.override import FabAirflowSecurityManagerOverride
|
97
|
+
from airflow.security.permissions import RESOURCE_ASSET
|
98
|
+
else:
|
99
|
+
try:
|
100
|
+
from airflow.security.permissions import RESOURCE_ASSET
|
101
|
+
except ImportError:
|
102
|
+
from airflow.security.permissions import RESOURCE_DATASET as RESOURCE_ASSET
|
103
|
+
|
98
104
|
|
99
105
|
_MAP_DAG_ACCESS_ENTITY_TO_FAB_RESOURCE_TYPE: dict[DagAccessEntity, tuple[str, ...]] = {
|
100
106
|
DagAccessEntity.AUDIT_LOG: (RESOURCE_AUDIT_LOG,),
|
@@ -263,10 +269,10 @@ class FabAuthManager(BaseAuthManager):
|
|
263
269
|
for resource_type in resource_types
|
264
270
|
)
|
265
271
|
|
266
|
-
def
|
267
|
-
self, *, method: ResourceMethod, details:
|
272
|
+
def is_authorized_asset(
|
273
|
+
self, *, method: ResourceMethod, details: AssetDetails | None = None, user: BaseUser | None = None
|
268
274
|
) -> bool:
|
269
|
-
return self._is_authorized(method=method, resource_type=
|
275
|
+
return self._is_authorized(method=method, resource_type=RESOURCE_ASSET, user=user)
|
270
276
|
|
271
277
|
def is_authorized_pool(
|
272
278
|
self, *, method: ResourceMethod, details: PoolDetails | None = None, user: BaseUser | None = None
|
@@ -342,10 +348,7 @@ class FabAuthManager(BaseAuthManager):
|
|
342
348
|
resources.add(resource[len(permissions.RESOURCE_DAG_PREFIX) :])
|
343
349
|
else:
|
344
350
|
resources.add(resource)
|
345
|
-
return
|
346
|
-
dag.dag_id
|
347
|
-
for dag in session.execute(select(DagModel.dag_id).where(DagModel.dag_id.in_(resources)))
|
348
|
-
}
|
351
|
+
return set(session.scalars(select(DagModel.dag_id).where(DagModel.dag_id.in_(resources))))
|
349
352
|
|
350
353
|
@cached_property
|
351
354
|
def security_manager(self) -> FabAirflowSecurityManagerOverride:
|
@@ -35,7 +35,7 @@ class AnonymousUser(AnonymousUserMixin, BaseUser):
|
|
35
35
|
@property
|
36
36
|
def roles(self):
|
37
37
|
if not self._roles:
|
38
|
-
public_role = current_app.
|
38
|
+
public_role = current_app.config.get("AUTH_ROLE_PUBLIC", None)
|
39
39
|
self._roles = {current_app.appbuilder.sm.find_role(public_role)} if public_role else set()
|
40
40
|
return self._roles
|
41
41
|
|
@@ -115,6 +115,12 @@ from airflow.www.session import AirflowDatabaseSessionInterface
|
|
115
115
|
|
116
116
|
if TYPE_CHECKING:
|
117
117
|
from airflow.auth.managers.base_auth_manager import ResourceMethod
|
118
|
+
from airflow.security.permissions import RESOURCE_ASSET
|
119
|
+
else:
|
120
|
+
try:
|
121
|
+
from airflow.security.permissions import RESOURCE_ASSET
|
122
|
+
except ImportError:
|
123
|
+
from airflow.security.permissions import RESOURCE_DATASET as RESOURCE_ASSET
|
118
124
|
|
119
125
|
log = logging.getLogger(__name__)
|
120
126
|
|
@@ -234,7 +240,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
234
240
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG_DEPENDENCIES),
|
235
241
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG_CODE),
|
236
242
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG_RUN),
|
237
|
-
(permissions.ACTION_CAN_READ,
|
243
|
+
(permissions.ACTION_CAN_READ, RESOURCE_ASSET),
|
238
244
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_CLUSTER_ACTIVITY),
|
239
245
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_POOL),
|
240
246
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_IMPORT_ERROR),
|
@@ -253,7 +259,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
253
259
|
(permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DAG),
|
254
260
|
(permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DAG_DEPENDENCIES),
|
255
261
|
(permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DAG_RUN),
|
256
|
-
(permissions.ACTION_CAN_ACCESS_MENU,
|
262
|
+
(permissions.ACTION_CAN_ACCESS_MENU, RESOURCE_ASSET),
|
257
263
|
(permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_CLUSTER_ACTIVITY),
|
258
264
|
(permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DOCS),
|
259
265
|
(permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DOCS_MENU),
|
@@ -273,7 +279,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
273
279
|
(permissions.ACTION_CAN_CREATE, permissions.RESOURCE_DAG_RUN),
|
274
280
|
(permissions.ACTION_CAN_EDIT, permissions.RESOURCE_DAG_RUN),
|
275
281
|
(permissions.ACTION_CAN_DELETE, permissions.RESOURCE_DAG_RUN),
|
276
|
-
(permissions.ACTION_CAN_CREATE,
|
282
|
+
(permissions.ACTION_CAN_CREATE, RESOURCE_ASSET),
|
277
283
|
]
|
278
284
|
# [END security_user_perms]
|
279
285
|
|
@@ -302,8 +308,8 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
302
308
|
(permissions.ACTION_CAN_EDIT, permissions.RESOURCE_VARIABLE),
|
303
309
|
(permissions.ACTION_CAN_DELETE, permissions.RESOURCE_VARIABLE),
|
304
310
|
(permissions.ACTION_CAN_DELETE, permissions.RESOURCE_XCOM),
|
305
|
-
(permissions.ACTION_CAN_DELETE,
|
306
|
-
(permissions.ACTION_CAN_CREATE,
|
311
|
+
(permissions.ACTION_CAN_DELETE, RESOURCE_ASSET),
|
312
|
+
(permissions.ACTION_CAN_CREATE, RESOURCE_ASSET),
|
307
313
|
]
|
308
314
|
# [END security_op_perms]
|
309
315
|
|
@@ -28,8 +28,9 @@ def get_provider_info():
|
|
28
28
|
"name": "Fab",
|
29
29
|
"description": "`Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__\n",
|
30
30
|
"state": "ready",
|
31
|
-
"source-date-epoch":
|
31
|
+
"source-date-epoch": 1728485088,
|
32
32
|
"versions": [
|
33
|
+
"1.4.1",
|
33
34
|
"1.4.0",
|
34
35
|
"1.3.0",
|
35
36
|
"1.2.2",
|
@@ -45,6 +46,7 @@ def get_provider_info():
|
|
45
46
|
],
|
46
47
|
"dependencies": [
|
47
48
|
"apache-airflow>=2.9.0",
|
49
|
+
"apache-airflow-providers-common-compat>=1.2.0",
|
48
50
|
"flask>=2.2,<2.3",
|
49
51
|
"flask-appbuilder==4.5.0",
|
50
52
|
"flask-login>=0.6.2",
|
@@ -28,7 +28,7 @@ build-backend = "flit_core.buildapi"
|
|
28
28
|
|
29
29
|
[project]
|
30
30
|
name = "apache-airflow-providers-fab"
|
31
|
-
version = "1.4.
|
31
|
+
version = "1.4.1"
|
32
32
|
description = "Provider package apache-airflow-providers-fab for Apache Airflow"
|
33
33
|
readme = "README.rst"
|
34
34
|
authors = [
|
@@ -47,16 +47,16 @@ classifiers = [
|
|
47
47
|
"Framework :: Apache Airflow",
|
48
48
|
"Framework :: Apache Airflow :: Provider",
|
49
49
|
"License :: OSI Approved :: Apache Software License",
|
50
|
-
"Programming Language :: Python :: 3.8",
|
51
50
|
"Programming Language :: Python :: 3.9",
|
52
51
|
"Programming Language :: Python :: 3.10",
|
53
52
|
"Programming Language :: Python :: 3.11",
|
54
53
|
"Programming Language :: Python :: 3.12",
|
55
54
|
"Topic :: System :: Monitoring",
|
56
55
|
]
|
57
|
-
requires-python = "~=3.
|
56
|
+
requires-python = "~=3.9"
|
58
57
|
dependencies = [
|
59
|
-
"apache-airflow>=2.
|
58
|
+
"apache-airflow-providers-common-compat>=1.2.0",
|
59
|
+
"apache-airflow>=2.9.0",
|
60
60
|
"flask-appbuilder==4.5.0",
|
61
61
|
"flask-login>=0.6.2",
|
62
62
|
"flask>=2.2,<2.3",
|
@@ -65,8 +65,8 @@ dependencies = [
|
|
65
65
|
]
|
66
66
|
|
67
67
|
[project.urls]
|
68
|
-
"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.
|
69
|
-
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.
|
68
|
+
"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1"
|
69
|
+
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1/changelog.html"
|
70
70
|
"Bug Tracker" = "https://github.com/apache/airflow/issues"
|
71
71
|
"Source Code" = "https://github.com/apache/airflow"
|
72
72
|
"Slack Chat" = "https://s.apache.org/airflow-slack"
|
@@ -76,6 +76,9 @@ dependencies = [
|
|
76
76
|
[project.entry-points."apache_airflow_provider"]
|
77
77
|
provider_info = "airflow.providers.fab.get_provider_info:get_provider_info"
|
78
78
|
[project.optional-dependencies]
|
79
|
+
"common.compat" = [
|
80
|
+
"apache-airflow-providers-common-compat",
|
81
|
+
]
|
79
82
|
"kerberos" = [
|
80
83
|
"kerberos>=1.3.0",
|
81
84
|
]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|