apache-airflow-providers-fab 1.2.0rc1__tar.gz → 1.2.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.2.0rc1 → apache_airflow_providers_fab-1.2.1}/PKG-INFO +7 -7
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/README.rst +3 -3
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/__init__.py +1 -1
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/security_manager/override.py +23 -8
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/get_provider_info.py +2 -2
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/pyproject.toml +4 -4
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/LICENSE +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/api/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/api/auth/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/api/auth/backend/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/api_endpoints/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/api_endpoints/role_and_permission_endpoint.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/api_endpoints/user_endpoint.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/cli_commands/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/cli_commands/definition.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/cli_commands/role_command.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/cli_commands/sync_perm_command.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/cli_commands/user_command.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/cli_commands/utils.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/decorators/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/decorators/auth.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/fab_auth_manager.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/models/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/models/anonymous_user.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/openapi/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/openapi/v1.yaml +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/security_manager/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/security_manager/constants.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/views/__init__.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/views/permissions.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/views/roles_list.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/views/user.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/views/user_edit.py +0 -0
- {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/views/user_stats.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: apache-airflow-providers-fab
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.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>
|
@@ -21,15 +21,15 @@ Classifier: Programming Language :: Python :: 3.10
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
22
22
|
Classifier: Programming Language :: Python :: 3.12
|
23
23
|
Classifier: Topic :: System :: Monitoring
|
24
|
-
Requires-Dist: apache-airflow>=2.9.
|
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
30
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
31
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.
|
32
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.
|
31
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.1/changelog.html
|
32
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.1
|
33
33
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
34
34
|
Project-URL: Source Code, https://github.com/apache/airflow
|
35
35
|
Project-URL: Twitter, https://twitter.com/ApacheAirflow
|
@@ -79,7 +79,7 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
|
79
79
|
|
80
80
|
Package ``apache-airflow-providers-fab``
|
81
81
|
|
82
|
-
Release: ``1.2.
|
82
|
+
Release: ``1.2.1``
|
83
83
|
|
84
84
|
|
85
85
|
`Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
|
@@ -92,7 +92,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
|
|
92
92
|
are in ``airflow.providers.fab`` python package.
|
93
93
|
|
94
94
|
You can find package information and changelog for the provider
|
95
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.
|
95
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.1/>`_.
|
96
96
|
|
97
97
|
Installation
|
98
98
|
------------
|
@@ -118,4 +118,4 @@ PIP package Version required
|
|
118
118
|
==================== ==================
|
119
119
|
|
120
120
|
The changelog for the provider package can be found in the
|
121
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.
|
121
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.1/changelog.html>`_.
|
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
Package ``apache-airflow-providers-fab``
|
44
44
|
|
45
|
-
Release: ``1.2.
|
45
|
+
Release: ``1.2.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.2.
|
58
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.1/>`_.
|
59
59
|
|
60
60
|
Installation
|
61
61
|
------------
|
@@ -81,4 +81,4 @@ PIP package Version required
|
|
81
81
|
==================== ==================
|
82
82
|
|
83
83
|
The changelog for the provider package can be found in the
|
84
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.
|
84
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.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.2.
|
32
|
+
__version__ = "1.2.1"
|
33
33
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
35
35
|
"2.9.0"
|
@@ -27,6 +27,7 @@ import warnings
|
|
27
27
|
from typing import TYPE_CHECKING, Any, Callable, Collection, Container, Iterable, Sequence
|
28
28
|
|
29
29
|
import jwt
|
30
|
+
import packaging.version
|
30
31
|
import re2
|
31
32
|
from deprecated import deprecated
|
32
33
|
from flask import flash, g, has_request_context, session
|
@@ -71,6 +72,7 @@ from sqlalchemy.exc import MultipleResultsFound
|
|
71
72
|
from sqlalchemy.orm import Session, joinedload
|
72
73
|
from werkzeug.security import check_password_hash, generate_password_hash
|
73
74
|
|
75
|
+
from airflow import __version__ as airflow_version
|
74
76
|
from airflow.auth.managers.utils.fab import get_method_from_fab_action_map
|
75
77
|
from airflow.configuration import conf
|
76
78
|
from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning, RemovedInAirflow3Warning
|
@@ -125,13 +127,21 @@ log = logging.getLogger(__name__)
|
|
125
127
|
MAX_NUM_DATABASE_USER_SESSIONS = 50000
|
126
128
|
|
127
129
|
|
128
|
-
# The following
|
129
|
-
# to make CSRF protection effective.
|
130
|
+
# The following logic patches the logout method within AuthView, so it supports POST method
|
131
|
+
# to make CSRF protection effective. It is backward-compatible with Airflow versions <= 2.9.2 as it still
|
132
|
+
# allows utilizing the GET method for them.
|
133
|
+
# You could remove the patch and configure it when it is supported
|
130
134
|
# natively by Flask-AppBuilder (https://github.com/dpgaspar/Flask-AppBuilder/issues/2248)
|
135
|
+
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) <= packaging.version.parse(
|
136
|
+
"2.9.2"
|
137
|
+
):
|
138
|
+
_methods = ["GET", "POST"]
|
139
|
+
else:
|
140
|
+
_methods = ["POST"]
|
131
141
|
|
132
142
|
|
133
143
|
class _ModifiedAuthView(AuthView):
|
134
|
-
@expose("/logout/", methods=
|
144
|
+
@expose("/logout/", methods=_methods)
|
135
145
|
def logout(self):
|
136
146
|
return super().logout()
|
137
147
|
|
@@ -1638,7 +1648,8 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
1638
1648
|
return self.get_session.query(self.user_model).all()
|
1639
1649
|
|
1640
1650
|
def update_user_auth_stat(self, user, success=True):
|
1641
|
-
"""
|
1651
|
+
"""
|
1652
|
+
Update user authentication stats.
|
1642
1653
|
|
1643
1654
|
This is done upon successful/unsuccessful authentication attempts.
|
1644
1655
|
|
@@ -2185,7 +2196,8 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
2185
2196
|
return wraps
|
2186
2197
|
|
2187
2198
|
def get_oauth_user_info(self, provider: str, resp: dict[str, Any]) -> dict[str, Any]:
|
2188
|
-
"""
|
2199
|
+
"""
|
2200
|
+
There are different OAuth APIs with different ways to retrieve user info.
|
2189
2201
|
|
2190
2202
|
All providers have different ways to retrieve user info.
|
2191
2203
|
"""
|
@@ -2353,7 +2365,8 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
2353
2365
|
return _provider.get("token_key", "oauth_token")
|
2354
2366
|
|
2355
2367
|
def get_oauth_token_secret_name(self, provider):
|
2356
|
-
"""
|
2368
|
+
"""
|
2369
|
+
Get the ``token_secret`` name for the oauth provider.
|
2357
2370
|
|
2358
2371
|
If none is configured, defaults to ``oauth_secret``. This is configured
|
2359
2372
|
using ``OAUTH_PROVIDERS`` and ``token_secret``.
|
@@ -2499,7 +2512,8 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
2499
2512
|
"""
|
2500
2513
|
|
2501
2514
|
def _rotate_session_id(self):
|
2502
|
-
"""
|
2515
|
+
"""
|
2516
|
+
Rotate the session ID.
|
2503
2517
|
|
2504
2518
|
We need to do this upon successful authentication when using the
|
2505
2519
|
database session backend.
|
@@ -2667,7 +2681,8 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
2667
2681
|
def _get_user_permission_resources(
|
2668
2682
|
self, user: User | None, action_name: str, resource_names: list[str] | None = None
|
2669
2683
|
) -> set[str]:
|
2670
|
-
"""
|
2684
|
+
"""
|
2685
|
+
Get resource names with a certain action name that a user has access to.
|
2671
2686
|
|
2672
2687
|
Mainly used to fetch all menu permissions on a single db call, will also
|
2673
2688
|
check public permissions and builtin roles
|
@@ -28,8 +28,8 @@ 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":
|
32
|
-
"versions": ["1.2.0", "1.1.1", "1.1.0", "1.0.4", "1.0.3", "1.0.2", "1.0.1", "1.0.0"],
|
31
|
+
"source-date-epoch": 1720423149,
|
32
|
+
"versions": ["1.2.1", "1.2.0", "1.1.1", "1.1.0", "1.0.4", "1.0.3", "1.0.2", "1.0.1", "1.0.0"],
|
33
33
|
"dependencies": [
|
34
34
|
"apache-airflow>=2.9.0",
|
35
35
|
"flask>=2.2,<2.3",
|
@@ -28,7 +28,7 @@ build-backend = "flit_core.buildapi"
|
|
28
28
|
|
29
29
|
[project]
|
30
30
|
name = "apache-airflow-providers-fab"
|
31
|
-
version = "1.2.
|
31
|
+
version = "1.2.1"
|
32
32
|
description = "Provider package apache-airflow-providers-fab for Apache Airflow"
|
33
33
|
readme = "README.rst"
|
34
34
|
authors = [
|
@@ -56,7 +56,7 @@ classifiers = [
|
|
56
56
|
]
|
57
57
|
requires-python = "~=3.8"
|
58
58
|
dependencies = [
|
59
|
-
"apache-airflow>=2.9.
|
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.2.
|
69
|
-
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.
|
68
|
+
"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.1"
|
69
|
+
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.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"
|
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
|