apache-airflow-providers-fab 2.0.0rc4__py3-none-any.whl → 2.0.1__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.
Files changed (23) hide show
  1. airflow/providers/fab/__init__.py +1 -1
  2. airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py +1 -2
  3. airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py +2 -2
  4. airflow/providers/fab/auth_manager/api_fastapi/services/login.py +1 -2
  5. airflow/providers/fab/auth_manager/fab_auth_manager.py +17 -18
  6. airflow/providers/fab/auth_manager/security_manager/override.py +15 -22
  7. airflow/providers/fab/www/auth.py +6 -8
  8. airflow/providers/fab/www/extensions/init_appbuilder.py +1 -2
  9. airflow/providers/fab/www/extensions/init_jinja_globals.py +0 -12
  10. airflow/providers/fab/www/extensions/init_views.py +2 -4
  11. airflow/providers/fab/www/package-lock.json +4 -4
  12. airflow/providers/fab/www/package.json +1 -1
  13. airflow/providers/fab/www/templates/airflow/main.html +0 -14
  14. airflow/providers/fab/www/templates/appbuilder/navbar.html +1 -1
  15. airflow/providers/fab/www/views.py +2 -3
  16. {apache_airflow_providers_fab-2.0.0rc4.dist-info → apache_airflow_providers_fab-2.0.1.dist-info}/METADATA +10 -8
  17. {apache_airflow_providers_fab-2.0.0rc4.dist-info → apache_airflow_providers_fab-2.0.1.dist-info}/RECORD +23 -21
  18. apache_airflow_providers_fab-2.0.1.dist-info/licenses/3rd-party-licenses/LICENSES-ui.txt +87 -0
  19. apache_airflow_providers_fab-2.0.1.dist-info/licenses/NOTICE +14 -0
  20. /airflow/providers/fab/auth_manager/api_fastapi/openapi/{v1-generated.yaml → v1-fab-auth-manager-generated.yaml} +0 -0
  21. /airflow/providers/fab/auth_manager/openapi/{v1.yaml → v1-flask-api.yaml} +0 -0
  22. {apache_airflow_providers_fab-2.0.0rc4.dist-info → apache_airflow_providers_fab-2.0.1.dist-info}/WHEEL +0 -0
  23. {apache_airflow_providers_fab-2.0.0rc4.dist-info → apache_airflow_providers_fab-2.0.1.dist-info}/entry_points.txt +0 -0
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "2.0.0"
32
+ __version__ = "2.0.1"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "3.0.0"
@@ -63,7 +63,6 @@ def requires_authentication(function: T):
63
63
  def decorated(*args, **kwargs):
64
64
  if auth_current_user() is not None or current_app.config.get("AUTH_ROLE_PUBLIC", None):
65
65
  return function(*args, **kwargs)
66
- else:
67
- return Response("Unauthorized", 401, {"WWW-Authenticate": "Basic"})
66
+ return Response("Unauthorized", 401, {"WWW-Authenticate": "Basic"})
68
67
 
69
68
  return cast("T", decorated)
@@ -101,7 +101,7 @@ def _gssapi_authenticate(token) -> _KerberosAuth | None:
101
101
  user=kerberos.authGSSServerUserName(state),
102
102
  token=kerberos.authGSSServerResponse(state),
103
103
  )
104
- elif return_code == kerberos.AUTH_GSS_CONTINUE:
104
+ if return_code == kerberos.AUTH_GSS_CONTINUE:
105
105
  return _KerberosAuth(return_code=return_code)
106
106
  return _KerberosAuth(return_code=return_code)
107
107
  except kerberos.GSSError:
@@ -139,7 +139,7 @@ def requires_authentication(function: T, find_user: Callable[[str], BaseUser] |
139
139
  if auth.token is not None:
140
140
  response.headers["WWW-Authenticate"] = f"negotiate {auth.token}"
141
141
  return response
142
- elif auth.return_code != kerberos.AUTH_GSS_CONTINUE:
142
+ if auth.return_code != kerberos.AUTH_GSS_CONTINUE:
143
143
  return _forbidden()
144
144
  return _unauthorized()
145
145
 
@@ -54,5 +54,4 @@ class FABAuthManagerLogin:
54
54
  user=user, expiration_time_in_seconds=expiration_time_in_seconds
55
55
  )
56
56
  )
57
- else:
58
- raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid password")
57
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid password")
@@ -233,7 +233,7 @@ class FabAuthManager(BaseAuthManager[User]):
233
233
 
234
234
  def get_api_endpoints(self) -> None | Blueprint:
235
235
  folder = Path(__file__).parents[0].resolve() # this is airflow/auth/managers/fab/
236
- with folder.joinpath("openapi", "v1.yaml").open() as f:
236
+ with folder.joinpath("openapi", "v1-flask-api.yaml").open() as f:
237
237
  specification = safe_load(f)
238
238
  return FlaskApi(
239
239
  specification=specification,
@@ -329,24 +329,23 @@ class FabAuthManager(BaseAuthManager[User]):
329
329
  if not access_entity:
330
330
  # Scenario 1
331
331
  return self._is_authorized_dag(method=method, details=details, user=user)
332
- else:
333
- # Scenario 2
334
- resource_types = self._get_fab_resource_types(access_entity)
335
- dag_method: ResourceMethod = "GET" if method == "GET" else "PUT"
336
-
337
- if (details and details.id) and not self._is_authorized_dag(
338
- method=dag_method, details=details, user=user
339
- ):
340
- return False
341
-
342
- return all(
343
- (
344
- self._is_authorized(method=method, resource_type=resource_type, user=user)
345
- if resource_type != RESOURCE_DAG_RUN or not hasattr(permissions, "resource_name")
346
- else self._is_authorized_dag_run(method=method, details=details, user=user)
347
- )
348
- for resource_type in resource_types
332
+ # Scenario 2
333
+ resource_types = self._get_fab_resource_types(access_entity)
334
+ dag_method: ResourceMethod = "GET" if method == "GET" else "PUT"
335
+
336
+ if (details and details.id) and not self._is_authorized_dag(
337
+ method=dag_method, details=details, user=user
338
+ ):
339
+ return False
340
+
341
+ return all(
342
+ (
343
+ self._is_authorized(method=method, resource_type=resource_type, user=user)
344
+ if resource_type != RESOURCE_DAG_RUN or not hasattr(permissions, "resource_name")
345
+ else self._is_authorized_dag_run(method=method, details=details, user=user)
349
346
  )
347
+ for resource_type in resource_types
348
+ )
350
349
 
351
350
  def is_authorized_backfill(
352
351
  self,
@@ -1401,12 +1401,11 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
1401
1401
  .filter(func.lower(self.user_model.username) == func.lower(username))
1402
1402
  .one_or_none()
1403
1403
  )
1404
- else:
1405
- return (
1406
- self.get_session.query(self.user_model)
1407
- .filter(func.lower(self.user_model.username) == func.lower(username))
1408
- .one_or_none()
1409
- )
1404
+ return (
1405
+ self.get_session.query(self.user_model)
1406
+ .filter(func.lower(self.user_model.username) == func.lower(username))
1407
+ .one_or_none()
1408
+ )
1410
1409
  except MultipleResultsFound:
1411
1410
  log.error("Multiple results found for user %s", username)
1412
1411
  return None
@@ -1883,8 +1882,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
1883
1882
  self._rotate_session_id()
1884
1883
  self.update_user_auth_stat(user)
1885
1884
  return user
1886
- else:
1887
- return None
1885
+ return None
1888
1886
 
1889
1887
  except ldap.LDAPError as e:
1890
1888
  msg = None
@@ -1893,9 +1891,8 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
1893
1891
  if (msg is not None) and ("desc" in msg):
1894
1892
  log.error(LOGMSG_ERR_SEC_AUTH_LDAP, e.message["desc"])
1895
1893
  return None
1896
- else:
1897
- log.error(e)
1898
- return None
1894
+ log.error(e)
1895
+ return None
1899
1896
 
1900
1897
  def check_password(self, username, password) -> bool:
1901
1898
  """
@@ -1933,14 +1930,13 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
1933
1930
  )
1934
1931
  log.info(LOGMSG_WAR_SEC_LOGIN_FAILED, username)
1935
1932
  return None
1936
- elif check_password_hash(user.password, password):
1933
+ if check_password_hash(user.password, password):
1937
1934
  self._rotate_session_id()
1938
1935
  self.update_user_auth_stat(user, True)
1939
1936
  return user
1940
- else:
1941
- self.update_user_auth_stat(user, False)
1942
- log.info(LOGMSG_WAR_SEC_LOGIN_FAILED, username)
1943
- return None
1937
+ self.update_user_auth_stat(user, False)
1938
+ log.info(LOGMSG_WAR_SEC_LOGIN_FAILED, username)
1939
+ return None
1944
1940
 
1945
1941
  def set_oauth_session(self, provider, oauth_response):
1946
1942
  """Set the current session with OAuth user secrets."""
@@ -2033,8 +2029,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
2033
2029
  self._rotate_session_id()
2034
2030
  self.update_user_auth_stat(user)
2035
2031
  return user
2036
- else:
2037
- return None
2032
+ return None
2038
2033
 
2039
2034
  def get_oauth_user_info(self, provider: str, resp: dict[str, Any]) -> dict[str, Any]:
2040
2035
  """
@@ -2108,8 +2103,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
2108
2103
  "email": data["email"],
2109
2104
  "role_keys": data.get("groups", []),
2110
2105
  }
2111
- else:
2112
- log.error(data.get("error_description"))
2106
+ log.error(data.get("error_description"))
2113
2107
  return {}
2114
2108
  # for Auth0
2115
2109
  if provider == "auth0":
@@ -2147,8 +2141,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
2147
2141
  "role_keys": me.get("groups", []),
2148
2142
  }
2149
2143
 
2150
- else:
2151
- return {}
2144
+ return {}
2152
2145
 
2153
2146
  @staticmethod
2154
2147
  def oauth_token_getter():
@@ -91,9 +91,8 @@ def has_access_with_pk(f):
91
91
  resource_pk=kwargs.get("pk"),
92
92
  ):
93
93
  return f(self, *args, **kwargs)
94
- else:
95
- log.warning(LOGMSG_ERR_SEC_ACCESS_DENIED, permission_str, self.__class__.__name__)
96
- flash(as_unicode(FLAMSG_ERR_SEC_ACCESS_DENIED), "danger")
94
+ log.warning(LOGMSG_ERR_SEC_ACCESS_DENIED, permission_str, self.__class__.__name__)
95
+ flash(as_unicode(FLAMSG_ERR_SEC_ACCESS_DENIED), "danger")
97
96
  return redirect(get_auth_manager().get_url_login(next_url=request.url))
98
97
 
99
98
  f._permission_name = permission_str
@@ -139,7 +138,7 @@ def _has_access(*, is_authorized: bool, func: Callable, args, kwargs):
139
138
  """
140
139
  if is_authorized:
141
140
  return func(*args, **kwargs)
142
- elif get_fab_auth_manager().is_logged_in() and not get_auth_manager().is_authorized_view(
141
+ if get_fab_auth_manager().is_logged_in() and not get_auth_manager().is_authorized_view(
143
142
  access_view=AccessView.WEBSITE,
144
143
  user=get_fab_auth_manager().get_user(),
145
144
  ):
@@ -151,11 +150,10 @@ def _has_access(*, is_authorized: bool, func: Callable, args, kwargs):
151
150
  ),
152
151
  403,
153
152
  )
154
- elif not get_fab_auth_manager().is_logged_in():
153
+ if not get_fab_auth_manager().is_logged_in():
155
154
  return redirect(get_auth_manager().get_url_login(next_url=request.url))
156
- else:
157
- access_denied = get_access_denied_message()
158
- flash(access_denied, "danger")
155
+ access_denied = get_access_denied_message()
156
+ flash(access_denied, "danger")
159
157
  return redirect(url_for("FabIndexView.index"))
160
158
 
161
159
 
@@ -236,8 +236,7 @@ class AirflowAppBuilder:
236
236
  """
237
237
  if self.app:
238
238
  return self.app
239
- else:
240
- return current_app
239
+ return current_app
241
240
 
242
241
  @property
243
242
  def get_session(self):
@@ -23,7 +23,6 @@ import pendulum
23
23
  import airflow
24
24
  from airflow.api_fastapi.app import get_auth_manager
25
25
  from airflow.configuration import conf
26
- from airflow.settings import STATE_COLORS
27
26
  from airflow.utils.net import get_hostname
28
27
  from airflow.utils.platform import get_airflow_git_version
29
28
 
@@ -38,14 +37,6 @@ def init_jinja_globals(app, enable_plugins: bool):
38
37
  elif server_timezone == "utc":
39
38
  server_timezone = "UTC"
40
39
 
41
- default_ui_timezone = conf.get("webserver", "default_ui_timezone")
42
- if default_ui_timezone == "system":
43
- default_ui_timezone = pendulum.local_timezone().name # type: ignore[operator]
44
- elif default_ui_timezone == "utc":
45
- default_ui_timezone = "UTC"
46
- if not default_ui_timezone:
47
- default_ui_timezone = server_timezone
48
-
49
40
  expose_hostname = conf.getboolean("webserver", "EXPOSE_HOSTNAME")
50
41
  hostname = get_hostname() if expose_hostname else "redact"
51
42
 
@@ -60,14 +51,11 @@ def init_jinja_globals(app, enable_plugins: bool):
60
51
  def prepare_jinja_globals():
61
52
  extra_globals = {
62
53
  "server_timezone": server_timezone,
63
- "default_ui_timezone": default_ui_timezone,
64
54
  "hostname": hostname,
65
55
  "navbar_color": conf.get("webserver", "NAVBAR_COLOR"),
66
56
  "navbar_text_color": conf.get("webserver", "NAVBAR_TEXT_COLOR"),
67
57
  "navbar_hover_color": conf.get("webserver", "NAVBAR_HOVER_COLOR"),
68
58
  "navbar_text_hover_color": conf.get("webserver", "NAVBAR_TEXT_HOVER_COLOR"),
69
- "navbar_logo_text_color": conf.get("webserver", "NAVBAR_LOGO_TEXT_COLOR"),
70
- "state_color_mapping": STATE_COLORS,
71
59
  "airflow_version": airflow_version,
72
60
  "git_version": git_version,
73
61
  "show_plugin_message": enable_plugins,
@@ -146,15 +146,13 @@ def init_api_error_handlers(app: Flask) -> None:
146
146
  # i.e. "no route for it" defined, need to be handled
147
147
  # here on the application level
148
148
  return common_error_handler(ex)
149
- else:
150
- return views.not_found(ex)
149
+ return views.not_found(ex)
151
150
 
152
151
  @app.errorhandler(405)
153
152
  def _handle_method_not_allowed(ex):
154
153
  if any([request.path.startswith(p) for p in base_paths]):
155
154
  return common_error_handler(ex)
156
- else:
157
- return views.method_not_allowed(ex)
155
+ return views.method_not_allowed(ex)
158
156
 
159
157
  app.register_error_handler(ProblemException, common_error_handler)
160
158
 
@@ -23,7 +23,7 @@
23
23
  "css-loader": "7.1.2",
24
24
  "css-minimizer-webpack-plugin": "^7.0.2",
25
25
  "eslint": "^9.24.0",
26
- "eslint-config-prettier": "^10.1.1",
26
+ "eslint-config-prettier": "^10.1.2",
27
27
  "eslint-plugin-html": "^8.1.2",
28
28
  "eslint-plugin-import": "^2.27.5",
29
29
  "eslint-plugin-node": "^11.1.0",
@@ -4010,9 +4010,9 @@
4010
4010
  }
4011
4011
  },
4012
4012
  "node_modules/eslint-config-prettier": {
4013
- "version": "10.1.1",
4014
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz",
4015
- "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==",
4013
+ "version": "10.1.2",
4014
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz",
4015
+ "integrity": "sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==",
4016
4016
  "dev": true,
4017
4017
  "license": "MIT",
4018
4018
  "bin": {
@@ -49,7 +49,7 @@
49
49
  "css-loader": "7.1.2",
50
50
  "css-minimizer-webpack-plugin": "^7.0.2",
51
51
  "eslint": "^9.24.0",
52
- "eslint-config-prettier": "^10.1.1",
52
+ "eslint-config-prettier": "^10.1.2",
53
53
  "eslint-plugin-html": "^8.1.2",
54
54
  "eslint-plugin-import": "^2.27.5",
55
55
  "eslint-plugin-node": "^11.1.0",
@@ -35,20 +35,6 @@
35
35
  <link rel="stylesheet" type="text/css" href="{{ url_for_asset('main.css') }}">
36
36
  <link rel="stylesheet" type="text/css" href="{{ url_for_asset('loadingDots.css') }}">
37
37
  <link rel="stylesheet" type="text/css" href="{{ url_for_asset('jquery-ui.min.css') }}">
38
- <style type="text/css">
39
- {% for state, state_color in state_color_mapping.items() %}
40
- span.{{state}} {
41
- background-color: {{state_color}};
42
- }
43
- {% endfor %}
44
- .navbar-nav > li > a {
45
- color: {{ navbar_text_color }};
46
- }
47
- .navbar-nav > li > a:hover {
48
- background-color: {{ navbar_hover_color }};
49
- color: {{ navbar_text_hover_color }};
50
- }
51
- </style>
52
38
  <link rel="icon" type="image/png" href="{{ url_for('static', filename='pin_32.png') }}">
53
39
  {% endblock %}
54
40
 
@@ -41,7 +41,7 @@
41
41
  <path fill-rule="evenodd" clip-rule="evenodd" d="M4.4028 16.9752C6.32267 15.0072 10.1207 14.0942 17.953 17.867C15.2128 11.7354 11.6107 9.58661 10.5795 10.6437L4.4028 16.9752Z" fill="#0cb6ff"/>
42
42
  <path d="M17.9649 18.6209C18.3825 18.6157 18.7169 18.273 18.7117 17.8553C18.7065 17.4377 18.3638 17.1034 17.9462 17.1085C17.5285 17.1137 17.1942 17.4564 17.1994 17.8741C17.2045 18.2917 17.5473 18.626 17.9649 18.6209Z" fill="#4a4848"/>
43
43
  </g>
44
- <path d="M38.9349 24.0977C38.8442 24.0977 38.765 24.0636 38.6969 23.9957C38.629 23.9276 38.5949 23.8484 38.5949 23.7577C38.5949 23.6669 38.6006 23.6048 38.612 23.5707L42.8273 12.5738C42.9178 12.3245 43.0992 12.1999 43.3712 12.1999H44.5269C44.7988 12.1999 44.98 12.3245 45.0708 12.5738L49.269 23.5707L49.3029 23.7577C49.3029 23.8484 49.269 23.9276 49.2009 23.9957C49.133 24.0636 49.0536 24.0977 48.9631 24.0977H48.0962C47.9715 24.0977 47.8753 24.0693 47.8072 24.0128C47.7393 23.9447 47.6938 23.8768 47.6712 23.8087L46.7364 21.3952H41.1616L40.2266 23.8087C40.204 23.8768 40.153 23.9447 40.0738 24.0128C40.0057 24.0693 39.915 24.0977 39.8018 24.0977H38.9349ZM46.2435 19.9334L43.949 13.8995L41.6545 19.9334H46.2435ZM51.1544 13.6106C51.041 13.6106 50.9447 13.5766 50.8653 13.5086C50.7972 13.4293 50.7633 13.333 50.7633 13.2197V12.3018C50.7633 12.1885 50.7972 12.0922 50.8653 12.0129C50.9447 11.9336 51.041 11.8939 51.1544 11.8939H52.2251C52.3384 11.8939 52.4347 11.9336 52.5139 12.0129C52.5933 12.0922 52.633 12.1885 52.633 12.3018V13.2197C52.633 13.333 52.5933 13.4293 52.5139 13.5086C52.4347 13.5766 52.3384 13.6106 52.2251 13.6106H51.1544ZM51.2903 24.0977C51.177 24.0977 51.0807 24.0636 51.0013 23.9957C50.9332 23.9163 50.8993 23.82 50.8993 23.7066V15.6502C50.8993 15.5369 50.9332 15.4462 51.0013 15.3783C51.0807 15.299 51.177 15.2593 51.2903 15.2593H52.106C52.2193 15.2593 52.3101 15.299 52.3779 15.3783C52.4574 15.4462 52.4971 15.5369 52.4971 15.6502V23.7066C52.4971 23.82 52.4574 23.9163 52.3779 23.9957C52.3101 24.0636 52.2193 24.0977 52.106 24.0977H51.2903ZM55.4067 24.0977C55.2933 24.0977 55.1971 24.0636 55.1176 23.9957C55.0498 23.9163 55.0158 23.82 55.0158 23.7066V15.6672C55.0158 15.5539 55.0498 15.4576 55.1176 15.3783C55.1971 15.299 55.2933 15.2593 55.4067 15.2593H56.1886C56.3017 15.2593 56.3982 15.299 56.4774 15.3783C56.5568 15.4576 56.5965 15.5539 56.5965 15.6672V16.4151C57.061 15.6446 57.8543 15.2593 58.976 15.2593H59.6388C59.7522 15.2593 59.8429 15.299 59.9108 15.3783C59.9902 15.4462 60.0297 15.5369 60.0297 15.6502V16.3471C60.0297 16.4604 59.9902 16.5511 59.9108 16.619C59.8429 16.687 59.7522 16.721 59.6388 16.721H58.6191C58.0071 16.721 57.5255 16.9023 57.1744 17.2649C56.823 17.6163 56.6473 18.0978 56.6473 18.7096V23.7066C56.6473 23.82 56.6078 23.9163 56.5284 23.9957C56.449 24.0636 56.3528 24.0977 56.2394 24.0977H55.4067ZM62.7472 24.0977C62.634 24.0977 62.5376 24.0636 62.4584 23.9957C62.3903 23.9163 62.3563 23.82 62.3563 23.7066V16.619H60.9116C60.7982 16.619 60.702 16.585 60.6228 16.5171C60.5547 16.4377 60.5207 16.3414 60.5207 16.2281V15.6502C60.5207 15.5369 60.5547 15.4462 60.6228 15.3783C60.702 15.299 60.7982 15.2593 60.9116 15.2593H62.3563V14.4094C62.3563 12.4832 63.3308 11.52 65.2797 11.52H66.2316C66.3449 11.52 66.4356 11.5597 66.5035 11.639C66.5829 11.707 66.6226 11.7976 66.6226 11.9109V12.4888C66.6226 12.6021 66.5829 12.6984 66.5035 12.7778C66.4356 12.8457 66.3449 12.8797 66.2316 12.8797H65.3139C64.8039 12.8797 64.447 13.0157 64.2429 13.2877C64.0391 13.5483 63.937 13.9505 63.937 14.4944V15.2593H67.5743V11.9109C67.5743 11.7976 67.6084 11.707 67.6763 11.639C67.7557 11.5597 67.852 11.52 67.9653 11.52H68.747C68.8604 11.52 68.9511 11.5597 69.019 11.639C69.0984 11.707 69.1381 11.7976 69.1381 11.9109V23.7066C69.1381 23.82 69.0984 23.9163 69.019 23.9957C68.9511 24.0636 68.8604 24.0977 68.747 24.0977H67.9653C67.852 24.0977 67.7557 24.0636 67.6763 23.9957C67.6084 23.9163 67.5743 23.82 67.5743 23.7066V16.619H63.937V23.7066C63.937 23.82 63.8973 23.9163 63.8181 23.9957C63.75 24.0636 63.6595 24.0977 63.5462 24.0977H62.7472ZM75.2842 24.2676C74.0378 24.2676 73.0691 23.9163 72.3779 23.2138C71.698 22.5112 71.3353 21.5765 71.2901 20.4093L71.273 19.6786L71.2901 18.9477C71.3353 17.7917 71.7036 16.8627 72.3948 16.1601C73.086 15.4462 74.0491 15.0893 75.2842 15.0893C76.5193 15.0893 77.4825 15.4462 78.1737 16.1601C78.8649 16.8627 79.2331 17.7917 79.2786 18.9477C79.2899 19.0723 79.2954 19.3159 79.2954 19.6786C79.2954 20.041 79.2899 20.2846 79.2786 20.4093C79.2331 21.5765 78.8649 22.5112 78.1737 23.2138C77.4938 23.9163 76.5306 24.2676 75.2842 24.2676ZM75.2842 22.9589C75.998 22.9589 76.559 22.7322 76.967 22.279C77.3862 21.8258 77.6129 21.1741 77.6469 20.3243C77.6582 20.2109 77.6637 19.9958 77.6637 19.6786C77.6637 19.3611 77.6582 19.146 77.6469 19.0326C77.6129 18.1828 77.3862 17.5311 76.967 17.078C76.559 16.6247 75.998 16.3981 75.2842 16.3981C74.5704 16.3981 74.0039 16.6247 73.5846 17.078C73.1654 17.5311 72.9444 18.1828 72.9218 19.0326L72.9047 19.6786L72.9218 20.3243C72.9444 21.1741 73.1654 21.8258 73.5846 22.279C74.0039 22.7322 74.5704 22.9589 75.2842 22.9589ZM83.5371 24.0977C83.3898 24.0977 83.2764 24.0636 83.197 23.9957C83.1178 23.9276 83.0497 23.82 82.9932 23.6727L80.5795 15.7862L80.5456 15.6162C80.5456 15.5142 80.5795 15.4293 80.6476 15.3613C80.7268 15.2933 80.8118 15.2593 80.9025 15.2593H81.6503C81.7636 15.2593 81.8543 15.2933 81.9222 15.3613C82.0016 15.4179 82.0526 15.4803 82.0753 15.5482L83.9619 21.956L85.9844 15.6162C86.0073 15.5256 86.0581 15.4462 86.1375 15.3783C86.2169 15.299 86.3245 15.2593 86.4605 15.2593H87.0383C87.1743 15.2593 87.2819 15.299 87.3613 15.3783C87.4407 15.4462 87.4915 15.5256 87.5143 15.6162L89.5369 21.956L91.4235 15.5482C91.4349 15.4916 91.4745 15.4293 91.5424 15.3613C91.6218 15.2933 91.7181 15.2593 91.8315 15.2593H92.5963C92.687 15.2593 92.7662 15.2933 92.8343 15.3613C92.9022 15.4293 92.9361 15.5142 92.9361 15.6162L92.9022 15.7862L90.5056 23.6727C90.4491 23.82 90.381 23.9276 90.3018 23.9957C90.2224 24.0636 90.1035 24.0977 89.9449 24.0977H89.2818C88.9759 24.0977 88.7889 23.956 88.7211 23.6727L86.7493 17.5879L84.7777 23.6727C84.6872 23.956 84.4945 24.0977 84.1999 24.0977H83.5371Z" fill="{{ navbar_logo_text_color }}"/>
44
+ <path d="M38.9349 24.0977C38.8442 24.0977 38.765 24.0636 38.6969 23.9957C38.629 23.9276 38.5949 23.8484 38.5949 23.7577C38.5949 23.6669 38.6006 23.6048 38.612 23.5707L42.8273 12.5738C42.9178 12.3245 43.0992 12.1999 43.3712 12.1999H44.5269C44.7988 12.1999 44.98 12.3245 45.0708 12.5738L49.269 23.5707L49.3029 23.7577C49.3029 23.8484 49.269 23.9276 49.2009 23.9957C49.133 24.0636 49.0536 24.0977 48.9631 24.0977H48.0962C47.9715 24.0977 47.8753 24.0693 47.8072 24.0128C47.7393 23.9447 47.6938 23.8768 47.6712 23.8087L46.7364 21.3952H41.1616L40.2266 23.8087C40.204 23.8768 40.153 23.9447 40.0738 24.0128C40.0057 24.0693 39.915 24.0977 39.8018 24.0977H38.9349ZM46.2435 19.9334L43.949 13.8995L41.6545 19.9334H46.2435ZM51.1544 13.6106C51.041 13.6106 50.9447 13.5766 50.8653 13.5086C50.7972 13.4293 50.7633 13.333 50.7633 13.2197V12.3018C50.7633 12.1885 50.7972 12.0922 50.8653 12.0129C50.9447 11.9336 51.041 11.8939 51.1544 11.8939H52.2251C52.3384 11.8939 52.4347 11.9336 52.5139 12.0129C52.5933 12.0922 52.633 12.1885 52.633 12.3018V13.2197C52.633 13.333 52.5933 13.4293 52.5139 13.5086C52.4347 13.5766 52.3384 13.6106 52.2251 13.6106H51.1544ZM51.2903 24.0977C51.177 24.0977 51.0807 24.0636 51.0013 23.9957C50.9332 23.9163 50.8993 23.82 50.8993 23.7066V15.6502C50.8993 15.5369 50.9332 15.4462 51.0013 15.3783C51.0807 15.299 51.177 15.2593 51.2903 15.2593H52.106C52.2193 15.2593 52.3101 15.299 52.3779 15.3783C52.4574 15.4462 52.4971 15.5369 52.4971 15.6502V23.7066C52.4971 23.82 52.4574 23.9163 52.3779 23.9957C52.3101 24.0636 52.2193 24.0977 52.106 24.0977H51.2903ZM55.4067 24.0977C55.2933 24.0977 55.1971 24.0636 55.1176 23.9957C55.0498 23.9163 55.0158 23.82 55.0158 23.7066V15.6672C55.0158 15.5539 55.0498 15.4576 55.1176 15.3783C55.1971 15.299 55.2933 15.2593 55.4067 15.2593H56.1886C56.3017 15.2593 56.3982 15.299 56.4774 15.3783C56.5568 15.4576 56.5965 15.5539 56.5965 15.6672V16.4151C57.061 15.6446 57.8543 15.2593 58.976 15.2593H59.6388C59.7522 15.2593 59.8429 15.299 59.9108 15.3783C59.9902 15.4462 60.0297 15.5369 60.0297 15.6502V16.3471C60.0297 16.4604 59.9902 16.5511 59.9108 16.619C59.8429 16.687 59.7522 16.721 59.6388 16.721H58.6191C58.0071 16.721 57.5255 16.9023 57.1744 17.2649C56.823 17.6163 56.6473 18.0978 56.6473 18.7096V23.7066C56.6473 23.82 56.6078 23.9163 56.5284 23.9957C56.449 24.0636 56.3528 24.0977 56.2394 24.0977H55.4067ZM62.7472 24.0977C62.634 24.0977 62.5376 24.0636 62.4584 23.9957C62.3903 23.9163 62.3563 23.82 62.3563 23.7066V16.619H60.9116C60.7982 16.619 60.702 16.585 60.6228 16.5171C60.5547 16.4377 60.5207 16.3414 60.5207 16.2281V15.6502C60.5207 15.5369 60.5547 15.4462 60.6228 15.3783C60.702 15.299 60.7982 15.2593 60.9116 15.2593H62.3563V14.4094C62.3563 12.4832 63.3308 11.52 65.2797 11.52H66.2316C66.3449 11.52 66.4356 11.5597 66.5035 11.639C66.5829 11.707 66.6226 11.7976 66.6226 11.9109V12.4888C66.6226 12.6021 66.5829 12.6984 66.5035 12.7778C66.4356 12.8457 66.3449 12.8797 66.2316 12.8797H65.3139C64.8039 12.8797 64.447 13.0157 64.2429 13.2877C64.0391 13.5483 63.937 13.9505 63.937 14.4944V15.2593H67.5743V11.9109C67.5743 11.7976 67.6084 11.707 67.6763 11.639C67.7557 11.5597 67.852 11.52 67.9653 11.52H68.747C68.8604 11.52 68.9511 11.5597 69.019 11.639C69.0984 11.707 69.1381 11.7976 69.1381 11.9109V23.7066C69.1381 23.82 69.0984 23.9163 69.019 23.9957C68.9511 24.0636 68.8604 24.0977 68.747 24.0977H67.9653C67.852 24.0977 67.7557 24.0636 67.6763 23.9957C67.6084 23.9163 67.5743 23.82 67.5743 23.7066V16.619H63.937V23.7066C63.937 23.82 63.8973 23.9163 63.8181 23.9957C63.75 24.0636 63.6595 24.0977 63.5462 24.0977H62.7472ZM75.2842 24.2676C74.0378 24.2676 73.0691 23.9163 72.3779 23.2138C71.698 22.5112 71.3353 21.5765 71.2901 20.4093L71.273 19.6786L71.2901 18.9477C71.3353 17.7917 71.7036 16.8627 72.3948 16.1601C73.086 15.4462 74.0491 15.0893 75.2842 15.0893C76.5193 15.0893 77.4825 15.4462 78.1737 16.1601C78.8649 16.8627 79.2331 17.7917 79.2786 18.9477C79.2899 19.0723 79.2954 19.3159 79.2954 19.6786C79.2954 20.041 79.2899 20.2846 79.2786 20.4093C79.2331 21.5765 78.8649 22.5112 78.1737 23.2138C77.4938 23.9163 76.5306 24.2676 75.2842 24.2676ZM75.2842 22.9589C75.998 22.9589 76.559 22.7322 76.967 22.279C77.3862 21.8258 77.6129 21.1741 77.6469 20.3243C77.6582 20.2109 77.6637 19.9958 77.6637 19.6786C77.6637 19.3611 77.6582 19.146 77.6469 19.0326C77.6129 18.1828 77.3862 17.5311 76.967 17.078C76.559 16.6247 75.998 16.3981 75.2842 16.3981C74.5704 16.3981 74.0039 16.6247 73.5846 17.078C73.1654 17.5311 72.9444 18.1828 72.9218 19.0326L72.9047 19.6786L72.9218 20.3243C72.9444 21.1741 73.1654 21.8258 73.5846 22.279C74.0039 22.7322 74.5704 22.9589 75.2842 22.9589ZM83.5371 24.0977C83.3898 24.0977 83.2764 24.0636 83.197 23.9957C83.1178 23.9276 83.0497 23.82 82.9932 23.6727L80.5795 15.7862L80.5456 15.6162C80.5456 15.5142 80.5795 15.4293 80.6476 15.3613C80.7268 15.2933 80.8118 15.2593 80.9025 15.2593H81.6503C81.7636 15.2593 81.8543 15.2933 81.9222 15.3613C82.0016 15.4179 82.0526 15.4803 82.0753 15.5482L83.9619 21.956L85.9844 15.6162C86.0073 15.5256 86.0581 15.4462 86.1375 15.3783C86.2169 15.299 86.3245 15.2593 86.4605 15.2593H87.0383C87.1743 15.2593 87.2819 15.299 87.3613 15.3783C87.4407 15.4462 87.4915 15.5256 87.5143 15.6162L89.5369 21.956L91.4235 15.5482C91.4349 15.4916 91.4745 15.4293 91.5424 15.3613C91.6218 15.2933 91.7181 15.2593 91.8315 15.2593H92.5963C92.687 15.2593 92.7662 15.2933 92.8343 15.3613C92.9022 15.4293 92.9361 15.5142 92.9361 15.6162L92.9022 15.7862L90.5056 23.6727C90.4491 23.82 90.381 23.9276 90.3018 23.9957C90.2224 24.0636 90.1035 24.0977 89.9449 24.0977H89.2818C88.9759 24.0977 88.7889 23.956 88.7211 23.6727L86.7493 17.5879L84.7777 23.6727C84.6872 23.956 84.4945 24.0977 84.1999 24.0977H83.5371Z" fill="#51504f"/>
45
45
  </svg>
46
46
  </a>
47
47
  </div>
@@ -68,14 +68,13 @@ class FabIndexView(IndexView):
68
68
  def index(self):
69
69
  if g.user is not None and g.user.is_authenticated:
70
70
  token = get_auth_manager().generate_jwt(g.user)
71
- response = make_response(redirect(f"{conf.get('api', 'base_url')}", code=302))
71
+ response = make_response(redirect(f"{conf.get('api', 'base_url', fallback='/')}", code=302))
72
72
 
73
73
  secure = conf.has_option("api", "ssl_cert")
74
74
  response.set_cookie(COOKIE_NAME_JWT_TOKEN, token, secure=secure)
75
75
 
76
76
  return response
77
- else:
78
- return redirect(conf.get("api", "base_url", fallback="/"), code=302)
77
+ return redirect(conf.get("api", "base_url", fallback="/"), code=302)
79
78
 
80
79
 
81
80
  def show_traceback(error):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-fab
3
- Version: 2.0.0rc4
3
+ Version: 2.0.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>
@@ -20,8 +20,10 @@ Classifier: Programming Language :: Python :: 3.10
20
20
  Classifier: Programming Language :: Python :: 3.11
21
21
  Classifier: Programming Language :: Python :: 3.12
22
22
  Classifier: Topic :: System :: Monitoring
23
- Requires-Dist: apache-airflow>=3.0.0rc0
24
- Requires-Dist: apache-airflow-providers-common-compat>=1.2.1rc0
23
+ License-File: 3rd-party-licenses/LICENSES-ui.txt
24
+ License-File: NOTICE
25
+ Requires-Dist: apache-airflow>=3.0.0
26
+ Requires-Dist: apache-airflow-providers-common-compat>=1.2.1
25
27
  Requires-Dist: blinker>=1.6.2
26
28
  Requires-Dist: flask>=2.2.1,<2.3
27
29
  Requires-Dist: flask-appbuilder==4.5.3
@@ -34,8 +36,8 @@ Requires-Dist: werkzeug>=2.2,<4
34
36
  Requires-Dist: wtforms>=3.0,<4
35
37
  Requires-Dist: kerberos>=1.3.0 ; extra == "kerberos"
36
38
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
37
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.0/changelog.html
38
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.0
39
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.1/changelog.html
40
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.1
39
41
  Project-URL: Mastodon, https://fosstodon.org/@airflow
40
42
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
41
43
  Project-URL: Source Code, https://github.com/apache/airflow
@@ -67,7 +69,7 @@ Provides-Extra: kerberos
67
69
 
68
70
  Package ``apache-airflow-providers-fab``
69
71
 
70
- Release: ``2.0.0``
72
+ Release: ``2.0.1``
71
73
 
72
74
 
73
75
  `Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
@@ -80,7 +82,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
80
82
  are in ``airflow.providers.fab`` python package.
81
83
 
82
84
  You can find package information and changelog for the provider
83
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.0/>`_.
85
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.1/>`_.
84
86
 
85
87
  Installation
86
88
  ------------
@@ -131,5 +133,5 @@ Dependent package
131
133
  ================================================================================================================== =================
132
134
 
133
135
  The changelog for the provider package can be found in the
134
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.0/changelog.html>`_.
136
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.1/changelog.html>`_.
135
137
 
@@ -1,14 +1,14 @@
1
1
  airflow/providers/fab/LICENSE,sha256=gXPVwptPlW1TJ4HSuG5OMPg-a3h43OGMkZRR1rpwfJA,10850
2
- airflow/providers/fab/__init__.py,sha256=bBthzGfg08N53PgXbtsOBKt1Xr0sH_NhfEGCL-Oeons,1490
2
+ airflow/providers/fab/__init__.py,sha256=KbbacGY_UmDBwSCzgYNde3-GsIUAq2oNQLVaERkQY7M,1490
3
3
  airflow/providers/fab/alembic.ini,sha256=_1SvObfjMAkuD7DN5VR2S6Rd7_F81pORZT-w7GJldIA,4461
4
4
  airflow/providers/fab/get_provider_info.py,sha256=I1fRKp4u-vUmSjoVyFmdD_spXfWhmdIqtlnWe2F5m40,5149
5
5
  airflow/providers/fab/auth_manager/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
6
- airflow/providers/fab/auth_manager/fab_auth_manager.py,sha256=4gwd5En0e0fviMGdd4BphN-S1cgykzk2RLcbsc8IOns,25843
6
+ airflow/providers/fab/auth_manager/fab_auth_manager.py,sha256=4auEloL69uQOkeD1FmNHEqNcgoXm_pjNeyOvQHuTPXc,25779
7
7
  airflow/providers/fab/auth_manager/api/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
8
8
  airflow/providers/fab/auth_manager/api/auth/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
9
9
  airflow/providers/fab/auth_manager/api/auth/backend/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
10
- airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py,sha256=TFvx99qOS-HcHXvDkMlpiauttuHMG3veZYT4xH3LbXs,2510
11
- airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py,sha256=60ukPvKf-o7emmKS0A_l2cMToGRWEB_s4k4IOu64dFM,5005
10
+ airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py,sha256=D5ZhPegWazFcwJlIjLJbJM5i7PnUTjwDBqC91eufwok,2492
11
+ airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py,sha256=dD8Q1WYH2bc4neA1PFxiGwTCvMCFHIHadz4WRiQApAA,5001
12
12
  airflow/providers/fab/auth_manager/api/auth/backend/session.py,sha256=aNDrYNidwr99NWgrl5WA6TY5CbHYif6chVRUPgYVOWc,1504
13
13
  airflow/providers/fab/auth_manager/api_endpoints/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
14
14
  airflow/providers/fab/auth_manager/api_endpoints/role_and_permission_endpoint.py,sha256=CIBNyj3zMK1NjHCv6C3KB48foRKCBMozIUxAW5R5YfQ,7607
@@ -17,11 +17,11 @@ airflow/providers/fab/auth_manager/api_fastapi/__init__.py,sha256=9hdXHABrVpkbpj
17
17
  airflow/providers/fab/auth_manager/api_fastapi/datamodels/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
18
18
  airflow/providers/fab/auth_manager/api_fastapi/datamodels/login.py,sha256=Ndj8BR0K0tbmBNyrgAvE4GK_SeY7RTE6cfYB3I3g7iY,1092
19
19
  airflow/providers/fab/auth_manager/api_fastapi/openapi/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
20
- airflow/providers/fab/auth_manager/api_fastapi/openapi/v1-generated.yaml,sha256=v5EA4oiuGiZlKf8nHly1lPMtp5yjdxKSC-7IHfJsab4,4098
20
+ airflow/providers/fab/auth_manager/api_fastapi/openapi/v1-fab-auth-manager-generated.yaml,sha256=v5EA4oiuGiZlKf8nHly1lPMtp5yjdxKSC-7IHfJsab4,4098
21
21
  airflow/providers/fab/auth_manager/api_fastapi/routes/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
22
22
  airflow/providers/fab/auth_manager/api_fastapi/routes/login.py,sha256=Vr2AO2Dlt2QoEYyal5SmzbBO72U-mq-dbPE-b2ODQ74,2131
23
23
  airflow/providers/fab/auth_manager/api_fastapi/services/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
24
- airflow/providers/fab/auth_manager/api_fastapi/services/login.py,sha256=lG6L3PvpPtT8y9RYNCzaAEHe6vnlOdfkap5T_eS0Z8Y,2483
24
+ airflow/providers/fab/auth_manager/api_fastapi/services/login.py,sha256=Waw3Gal4uHkehxgSprmyTUofZYz5H8X8tqddecmwVxo,2465
25
25
  airflow/providers/fab/auth_manager/cli_commands/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
26
26
  airflow/providers/fab/auth_manager/cli_commands/db_command.py,sha256=SeNg8giLDUX5aniF2XFM7txVQ6N2dDV6BRZnV-UzWX8,2151
27
27
  airflow/providers/fab/auth_manager/cli_commands/definition.py,sha256=XIAPqoHwkFHshfbj6yGIs7xUrR-uSE1F7V71n44PttA,11483
@@ -33,13 +33,13 @@ airflow/providers/fab/auth_manager/models/__init__.py,sha256=Maaid2MjfR3wswj5Ssb
33
33
  airflow/providers/fab/auth_manager/models/anonymous_user.py,sha256=mGLV26biw5db6hymFZ6qL7oCyVNaLduwDWS0kYuMZDg,1886
34
34
  airflow/providers/fab/auth_manager/models/db.py,sha256=zKwih8X_nh82jbNfiiucn6Spxshp5Vz_JNqTdCCJ0Ws,4973
35
35
  airflow/providers/fab/auth_manager/openapi/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
36
- airflow/providers/fab/auth_manager/openapi/v1.yaml,sha256=9sAaTNXVBYfHKILn6fRKfROC3hAattsQu4wwG22nO64,20346
36
+ airflow/providers/fab/auth_manager/openapi/v1-flask-api.yaml,sha256=9sAaTNXVBYfHKILn6fRKfROC3hAattsQu4wwG22nO64,20346
37
37
  airflow/providers/fab/auth_manager/schemas/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
38
38
  airflow/providers/fab/auth_manager/schemas/role_and_permission_schema.py,sha256=aDB0naczyEsGYaF3U3djF-Ui6lxPdgWHvgcwjyJn_X8,2526
39
39
  airflow/providers/fab/auth_manager/schemas/user_schema.py,sha256=MLnZotQqAg_BFvJunrSwbwur5CaTjk1ww3eCI3aPT6Y,2401
40
40
  airflow/providers/fab/auth_manager/security_manager/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
41
41
  airflow/providers/fab/auth_manager/security_manager/constants.py,sha256=x1Sjl_Mu3wmaSy3NFZlHxK2z-juzWmMs1SrzJ0aiBBQ,907
42
- airflow/providers/fab/auth_manager/security_manager/override.py,sha256=lNmjFrkjL0tvnYugie4VZ42pUA6jW4RsGoCRzXNlukA,97281
42
+ airflow/providers/fab/auth_manager/security_manager/override.py,sha256=geYJDV4pjlqinNl6gUJqTYbkRm6PP5VbGMvN500kDBY,97105
43
43
  airflow/providers/fab/auth_manager/views/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
44
44
  airflow/providers/fab/auth_manager/views/permissions.py,sha256=CT6jMCDHtirs0Qe4Penb6VwQq1yZeZ1lOLZITIlVqm4,2904
45
45
  airflow/providers/fab/auth_manager/views/roles_list.py,sha256=DwJ1iOCfpbxsWTEFWjW5_Jo3fmrZwxj1rPeflTaSg7A,1512
@@ -55,15 +55,15 @@ airflow/providers/fab/migrations/versions/__init__.py,sha256=9hdXHABrVpkbpjZgUft
55
55
  airflow/providers/fab/www/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
56
56
  airflow/providers/fab/www/airflow_flask_app.py,sha256=-JPQ-mS1kKEj5adENnoVSD4LaFrh36l1THnVhFYF8d4,1057
57
57
  airflow/providers/fab/www/app.py,sha256=RhUCSxS4Sivwu7aeLOqIVADszBh9uWOs1oni99FY9Rk,4951
58
- airflow/providers/fab/www/auth.py,sha256=FbDJOlfO70cg1OatrWZOiiNsjPlDWnuh5QLu-iEXH9A,12659
58
+ airflow/providers/fab/www/auth.py,sha256=1oLlJybsjOqxhcmD_Rbtcg5nQySmfArJnIw7jq09V18,12615
59
59
  airflow/providers/fab/www/constants.py,sha256=VUg48B-EZAUZ2IIdmL31Iv0lRlP0yLNPNTufB7rsWr0,1352
60
- airflow/providers/fab/www/package-lock.json,sha256=kbZdRu-c51C2FpNXnVLV4kisr8VjtIDOjaT0DbGlUbc,328250
61
- airflow/providers/fab/www/package.json,sha256=Z7P02yIy22rlcD6Qm0KCOK8c9cZuxu1-sLuUizi9tC4,2357
60
+ airflow/providers/fab/www/package-lock.json,sha256=wfidNP3hYpGzqGMWaW-tQaWfI_h_dhAIeHlteba76Gc,328250
61
+ airflow/providers/fab/www/package.json,sha256=5EKDjPXa64LlZjb1dwZfJsjD6irMThGh4ln2NLBs68g,2357
62
62
  airflow/providers/fab/www/security_appless.py,sha256=J0OJGRPq6NK2vY6qfMRvyMUEc-E59vXucquQdjgsndY,1655
63
63
  airflow/providers/fab/www/security_manager.py,sha256=Zr6xqjego7Z1-1h2HHyWLt1ZBKG8yHHmNPfEXNxXaRY,4850
64
64
  airflow/providers/fab/www/session.py,sha256=qyy8ipXLe4qH7D52tH3aKY6hyJNJ5tUfHel7_1S4BGg,1741
65
65
  airflow/providers/fab/www/utils.py,sha256=9D_ESPV6ar5GOenD2Jm-lS7pW78yzxCWC5N-3kgMem8,9982
66
- airflow/providers/fab/www/views.py,sha256=-xTQPTerP3vVLbWy6GvT_FI3c1yV3qY7lCR9gioZPNA,4750
66
+ airflow/providers/fab/www/views.py,sha256=dB7kPNxFhT6nwrPuRbp5Wwebuc0DJemmO2oiCFR_oRI,4746
67
67
  airflow/providers/fab/www/webpack.config.js,sha256=_TYJ8cnmJW0vxb87xY4eNr9ZE7G5NFUPuiXvpF6SKys,6124
68
68
  airflow/providers/fab/www/api_connexion/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
69
69
  airflow/providers/fab/www/api_connexion/exceptions.py,sha256=j0S90JH6Q5hnkshfiZot7Yb9hAvFs1JON0EYjW2bxW0,5783
@@ -71,12 +71,12 @@ airflow/providers/fab/www/api_connexion/parameters.py,sha256=9XbKYdjpQ9KesyPK6Eb
71
71
  airflow/providers/fab/www/api_connexion/security.py,sha256=tc6IA-lFVovRWV6ETQdAleq73scapD_1kUPQcn4rwH8,3063
72
72
  airflow/providers/fab/www/api_connexion/types.py,sha256=FY96u5nR-ByiKBhoxC_kKVoXalH9GDhexXIGmCbBmKw,1094
73
73
  airflow/providers/fab/www/extensions/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
74
- airflow/providers/fab/www/extensions/init_appbuilder.py,sha256=ZktxW33J4nHDpoXRJtrJP3L88mscxirlE83JAJZAKbs,22172
75
- airflow/providers/fab/www/extensions/init_jinja_globals.py,sha256=TfNOEsdLg9mflzDz6hU7lB2ZMkEJvgr-ruB6qKBBLoI,3199
74
+ airflow/providers/fab/www/extensions/init_appbuilder.py,sha256=G3c40QYqdtP8-BeqPONh53RWr9d2gSNxL1d6rUVv2CE,22154
75
+ airflow/providers/fab/www/extensions/init_jinja_globals.py,sha256=d3y5bsnFvHSf-LldXMaRsPu3nN6Bkyuc1uyMgnDGnV8,2613
76
76
  airflow/providers/fab/www/extensions/init_manifest_files.py,sha256=DLeAcH2zMGbT-eDLYdXztP7HJG7H-e1jmSTolimZeAI,2125
77
77
  airflow/providers/fab/www/extensions/init_security.py,sha256=sDwMjNMMQgyn2tsQAVkNHArPVbWe9qua66iOO59YGoU,2110
78
78
  airflow/providers/fab/www/extensions/init_session.py,sha256=y8zUVSngawNhkO4egEkhrQ_2v03wCeDjm8LUaNY0sZ8,2637
79
- airflow/providers/fab/www/extensions/init_views.py,sha256=OiLfHshii7R1s3lOpTQEzs2syIq-5Arm4Gt-AXGxsKI,6447
79
+ airflow/providers/fab/www/extensions/init_views.py,sha256=4zFnPwFhO3wfqnDDvsRgeU5jjy2JImgMia-flg6BZgQ,6411
80
80
  airflow/providers/fab/www/security/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
81
81
  airflow/providers/fab/www/security/permissions.py,sha256=5Srt7nuYHOOee439CHKJ74FnCgYkesG32a_6WFCXcOA,4537
82
82
  airflow/providers/fab/www/static/sort_asc.png,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -112,14 +112,16 @@ airflow/providers/fab/www/static/js/datetime_utils.js,sha256=Nq8gP1tRy-ztodREw8Q
112
112
  airflow/providers/fab/www/static/js/main.js,sha256=MUyTstwNQiN9GNT7yHBSt2Oh4Cr3M173CUFSXX6cI2g,9194
113
113
  airflow/providers/fab/www/templates/airflow/_messages.html,sha256=DKKiboYjmRqPRIP3BpUYsIxK5xKGpZy2yRk67lcAW5Y,1147
114
114
  airflow/providers/fab/www/templates/airflow/error.html,sha256=AEXwcesuTXQdzfjJrTr2hX2L1Oxtr-FgehWV9dCBCBA,1327
115
- airflow/providers/fab/www/templates/airflow/main.html,sha256=LYIkSwrXy5UjqFOqlA991ILpz5Dj_1z5bEteGfEUz_c,2919
115
+ airflow/providers/fab/www/templates/airflow/main.html,sha256=jhaCcpxLveCHyFeOOJOsp2AQEUIOsfO1x4TVAvL3vGE,2522
116
116
  airflow/providers/fab/www/templates/airflow/traceback.html,sha256=jyHjbK9V6RccA4P5ml4p1E6o8w1pZ8-aGa0NXp4Lvtk,2273
117
117
  airflow/providers/fab/www/templates/appbuilder/flash.html,sha256=CfY_E0Bq_vSnWI58UqlcchTfLFfnr-mxRLdS_hwr_Ps,1408
118
118
  airflow/providers/fab/www/templates/appbuilder/index.html,sha256=ZaZsNdD8fCENqdnZMbjGbCaK5R9WNFRW5vk8y43pCsk,810
119
- airflow/providers/fab/www/templates/appbuilder/navbar.html,sha256=N3KTgWFw720Hyr3NGYz787oRYLGQXDrRW1mLXIABLxc,10236
119
+ airflow/providers/fab/www/templates/appbuilder/navbar.html,sha256=1Q8u90aONY_PKTBtApwyp0EeudSsJyysW2UYo9Fa1cc,10215
120
120
  airflow/providers/fab/www/templates/appbuilder/navbar_menu.html,sha256=WWQ-_QLMqcW4Cpx_1_yulaQO-soD6ztnY2zfmBAUAGI,2034
121
121
  airflow/providers/fab/www/templates/appbuilder/navbar_right.html,sha256=qrwZDBbzLi4yhLrfai842MJDdQ4C31Xz9hJ3NoG5mo0,2488
122
- apache_airflow_providers_fab-2.0.0rc4.dist-info/entry_points.txt,sha256=m05kASp7vFi0ZmQ--CFp7GeJpPL7UT2RQF8EEP5XRX8,99
123
- apache_airflow_providers_fab-2.0.0rc4.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
124
- apache_airflow_providers_fab-2.0.0rc4.dist-info/METADATA,sha256=eos_T7JlJUryv5r9NzAJZNwwi0IHjq9I1PlB_bS2lig,6086
125
- apache_airflow_providers_fab-2.0.0rc4.dist-info/RECORD,,
122
+ apache_airflow_providers_fab-2.0.1.dist-info/entry_points.txt,sha256=m05kASp7vFi0ZmQ--CFp7GeJpPL7UT2RQF8EEP5XRX8,99
123
+ apache_airflow_providers_fab-2.0.1.dist-info/licenses/3rd-party-licenses/LICENSES-ui.txt,sha256=C9vBr_KiUhI3jjCS754n_SPi-ylD8SiJgXlOWuNOO98,3688
124
+ apache_airflow_providers_fab-2.0.1.dist-info/licenses/NOTICE,sha256=GrKwLaFNGIn3J86ucRfNIExRSCD6-7nty84-84F2ad4,448
125
+ apache_airflow_providers_fab-2.0.1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
126
+ apache_airflow_providers_fab-2.0.1.dist-info/METADATA,sha256=_jTQcpatF_yMMbTIlLTkWr3fvcH0jx_1TTkDyv4uNnI,6147
127
+ apache_airflow_providers_fab-2.0.1.dist-info/RECORD,,
@@ -0,0 +1,87 @@
1
+ Apache Airflow
2
+ Copyright 2016-2025 The Apache Software Foundation
3
+
4
+ This product includes software developed at The Apache Software
5
+ Foundation (http://www.apache.org/).
6
+
7
+ =======================================================================
8
+ css-loader|5.2.7:
9
+ -----
10
+ MIT
11
+ Copyright JS Foundation and other contributors
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining
14
+ a copy of this software and associated documentation files (the
15
+ 'Software'), to deal in the Software without restriction, including
16
+ without limitation the rights to use, copy, modify, merge, publish,
17
+ distribute, sublicense, and/or sell copies of the Software, and to
18
+ permit persons to whom the Software is furnished to do so, subject to
19
+ the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be
22
+ included in all copies or substantial portions of the Software.
23
+
24
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
25
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
27
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
28
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
29
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
+
32
+ webpack-contrib/css-loader
33
+
34
+
35
+ moment|2.30.1:
36
+ -----
37
+ MIT
38
+ Copyright (c) JS Foundation and other contributors
39
+
40
+ Permission is hereby granted, free of charge, to any person
41
+ obtaining a copy of this software and associated documentation
42
+ files (the "Software"), to deal in the Software without
43
+ restriction, including without limitation the rights to use,
44
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
45
+ copies of the Software, and to permit persons to whom the
46
+ Software is furnished to do so, subject to the following
47
+ conditions:
48
+
49
+ The above copyright notice and this permission notice shall be
50
+ included in all copies or substantial portions of the Software.
51
+
52
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
53
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
54
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
55
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
56
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
57
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
58
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
59
+ OTHER DEALINGS IN THE SOFTWARE.
60
+
61
+ https://github.com/moment/moment.git
62
+
63
+
64
+ moment-timezone|0.5.46:
65
+ -----
66
+ MIT
67
+ The MIT License (MIT)
68
+
69
+ Copyright (c) JS Foundation and other contributors
70
+
71
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
72
+ this software and associated documentation files (the "Software"), to deal in
73
+ the Software without restriction, including without limitation the rights to
74
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
75
+ the Software, and to permit persons to whom the Software is furnished to do so,
76
+ subject to the following conditions:
77
+
78
+ The above copyright notice and this permission notice shall be included in all
79
+ copies or substantial portions of the Software.
80
+
81
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
82
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
83
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
84
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
85
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
86
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
87
+ https://github.com/moment/moment-timezone.git
@@ -0,0 +1,14 @@
1
+ Apache Airflow
2
+ Copyright 2016-2025 The Apache Software Foundation
3
+
4
+ This product includes software developed at The Apache Software
5
+ Foundation (http://www.apache.org/).
6
+
7
+ =======================================================================
8
+
9
+ Flask App Builder:
10
+ -----
11
+ This product contains a modified portion of 'Flask App Builder' developed by Daniel Vaz Gaspar.
12
+ (https://github.com/dpgaspar/Flask-AppBuilder).
13
+
14
+ * Copyright 2013, Daniel Vaz Gaspar