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.
Files changed (37) hide show
  1. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/PKG-INFO +7 -7
  2. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/README.rst +3 -3
  3. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/__init__.py +1 -1
  4. {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
  5. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/get_provider_info.py +2 -2
  6. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/pyproject.toml +4 -4
  7. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/LICENSE +0 -0
  8. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/__init__.py +0 -0
  9. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/api/__init__.py +0 -0
  10. {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
  11. {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
  12. {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
  13. {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
  14. {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
  15. {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
  16. {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
  17. {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
  18. {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
  19. {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
  20. {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
  21. {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
  22. {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
  23. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/decorators/__init__.py +0 -0
  24. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/decorators/auth.py +0 -0
  25. {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
  26. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/models/__init__.py +0 -0
  27. {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
  28. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/openapi/__init__.py +0 -0
  29. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/openapi/v1.yaml +0 -0
  30. {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
  31. {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
  32. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/views/__init__.py +0 -0
  33. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/views/permissions.py +0 -0
  34. {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
  35. {apache_airflow_providers_fab-1.2.0rc1 → apache_airflow_providers_fab-1.2.1}/airflow/providers/fab/auth_manager/views/user.py +0 -0
  36. {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
  37. {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.0rc1
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.0rc0
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.0/changelog.html
32
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.0
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.0.rc1``
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.0/>`_.
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.0/changelog.html>`_.
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.0.rc1``
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.0/>`_.
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.0/changelog.html>`_.
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.0"
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 class patches the logout method within AuthView, so it only supports POST method
129
- # to make CSRF protection effective. You could remove the patch and configure it when it is supported
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=["POST"])
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
- """Update user authentication stats.
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
- """There are different OAuth APIs with different ways to retrieve user info.
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
- """Get the ``token_secret`` name for the oauth provider.
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
- """Rotate the session ID.
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
- """Get resource names with a certain action name that a user has access to.
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": 1718604369,
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.0.rc1"
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.0rc0",
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.0"
69
- "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/1.2.0/changelog.html"
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"