apache-airflow-providers-fab 3.1.2__tar.gz → 3.2.0__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 (254) hide show
  1. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/PKG-INFO +9 -7
  2. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/README.rst +5 -4
  3. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/webserver-authentication.rst +80 -0
  4. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/changelog.rst +33 -0
  5. apache_airflow_providers_fab-3.2.0/docs/img/azure-ad-authentication.jpeg +0 -0
  6. apache_airflow_providers_fab-3.2.0/docs/img/azure-ad-token-claims.jpeg +0 -0
  7. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/index.rst +4 -3
  8. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/provider.yaml +10 -1
  9. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/pyproject.toml +4 -3
  10. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/__init__.py +1 -1
  11. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_endpoints/user_endpoint.py +3 -1
  12. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/roles.py +6 -0
  13. apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/users.py +68 -0
  14. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v2-fab-auth-manager-generated.yaml +467 -0
  15. apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/auth_manager/api_fastapi/routes/users.py +133 -0
  16. apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/auth_manager/api_fastapi/services/users.py +219 -0
  17. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/fab_auth_manager.py +14 -5
  18. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/models/__init__.py +6 -6
  19. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/security_manager/override.py +88 -77
  20. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/get_provider_info.py +7 -0
  21. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/package-lock.json +616 -481
  22. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/package.json +6 -6
  23. apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/743.0c0bf201ae17e66a9a3f.js → apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/743.8fb7d21632ed892227fe.js +1 -1
  24. apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/main.bc1f701c3d133e2a3bab.js → apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/main.8cffe40bcf7cca998f4e.js +2 -2
  25. apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/manifest.json +22 -0
  26. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/js/main.js +11 -0
  27. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/templates/airflow/main.html +1 -0
  28. apache_airflow_providers_fab-3.2.0/tests/unit/fab/auth_manager/api_fastapi/datamodels/test_users.py +234 -0
  29. apache_airflow_providers_fab-3.2.0/tests/unit/fab/auth_manager/api_fastapi/routes/test_users.py +582 -0
  30. apache_airflow_providers_fab-3.2.0/tests/unit/fab/auth_manager/api_fastapi/services/test_users.py +462 -0
  31. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/test_fab_auth_manager.py +18 -1
  32. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/test_security.py +22 -12
  33. apache_airflow_providers_fab-3.2.0/www-hash.txt +1 -0
  34. apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/manifest.json +0 -22
  35. apache_airflow_providers_fab-3.1.2/www-hash.txt +0 -1
  36. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/.pre-commit-config.yaml +0 -0
  37. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/3rd-party-licenses/LICENSES-ui.txt +0 -0
  38. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/LICENSE +0 -0
  39. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/NOTICE +0 -0
  40. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/api-ref/fab-public-api-ref.rst +0 -0
  41. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/api-ref/fab-token-api-ref.rst +0 -0
  42. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/access-control.rst +0 -0
  43. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/api-authentication.rst +0 -0
  44. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/configuring-flask-app.rst +0 -0
  45. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/index.rst +0 -0
  46. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/security.rst +0 -0
  47. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/sso.rst +0 -0
  48. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/token.rst +0 -0
  49. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/cli-ref.rst +0 -0
  50. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/commits.rst +0 -0
  51. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/conf.py +0 -0
  52. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/configurations-ref.rst +0 -0
  53. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/img/add-role.png +0 -0
  54. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/img/diagram_fab_auth_manager_airflow_architecture.md5sum +0 -0
  55. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/img/diagram_fab_auth_manager_airflow_architecture.png +0 -0
  56. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/img/diagram_fab_auth_manager_airflow_architecture.py +0 -0
  57. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/img/new-role.png +0 -0
  58. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/installing-providers-from-sources.rst +0 -0
  59. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/migrations-ref.rst +0 -0
  60. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/security.rst +0 -0
  61. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/upgrading.rst +0 -0
  62. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/__init__.py +0 -0
  63. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/3rd-party-licenses/LICENSES-ui.txt +0 -0
  64. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/__init__.py +0 -0
  65. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/alembic.ini +0 -0
  66. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/__init__.py +0 -0
  67. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api/__init__.py +0 -0
  68. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api/auth/__init__.py +0 -0
  69. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api/auth/backend/__init__.py +0 -0
  70. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py +0 -0
  71. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py +0 -0
  72. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api/auth/backend/session.py +0 -0
  73. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_endpoints/__init__.py +0 -0
  74. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_endpoints/role_and_permission_endpoint.py +0 -0
  75. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/__init__.py +0 -0
  76. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/__init__.py +0 -0
  77. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/login.py +0 -0
  78. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/__init__.py +0 -0
  79. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/parameters.py +0 -0
  80. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/routes/__init__.py +0 -0
  81. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/routes/login.py +0 -0
  82. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/routes/roles.py +0 -0
  83. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/security.py +0 -0
  84. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/services/__init__.py +0 -0
  85. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/services/login.py +0 -0
  86. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/services/roles.py +0 -0
  87. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/api_fastapi/sorting.py +0 -0
  88. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/cli_commands/__init__.py +0 -0
  89. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/cli_commands/db_command.py +0 -0
  90. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/cli_commands/permissions_command.py +0 -0
  91. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/cli_commands/role_command.py +0 -0
  92. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/cli_commands/sync_perm_command.py +0 -0
  93. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/cli_commands/user_command.py +0 -0
  94. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/cli_commands/utils.py +0 -0
  95. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/models/anonymous_user.py +0 -0
  96. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/models/db.py +0 -0
  97. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/openapi/__init__.py +0 -0
  98. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/openapi/v1-flask-api.yaml +0 -0
  99. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/schemas/__init__.py +0 -0
  100. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/schemas/role_and_permission_schema.py +0 -0
  101. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/schemas/user_schema.py +0 -0
  102. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/security_manager/__init__.py +0 -0
  103. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/security_manager/constants.py +0 -0
  104. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/views/__init__.py +0 -0
  105. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/views/permissions.py +0 -0
  106. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/views/roles_list.py +0 -0
  107. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/views/user.py +0 -0
  108. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/views/user_edit.py +0 -0
  109. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/views/user_stats.py +0 -0
  110. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/cli/__init__.py +0 -0
  111. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/cli/definition.py +0 -0
  112. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/README +0 -0
  113. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/__init__.py +0 -0
  114. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/env.py +0 -0
  115. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/script.py.mako +0 -0
  116. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/versions/0000_1_4_0_create_ab_tables_if_missing.py +0 -0
  117. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/versions/__init__.py +0 -0
  118. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/version_compat.py +0 -0
  119. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/__init__.py +0 -0
  120. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/airflow_flask_app.py +0 -0
  121. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/api_connexion/__init__.py +0 -0
  122. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/api_connexion/exceptions.py +0 -0
  123. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/api_connexion/parameters.py +0 -0
  124. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/api_connexion/security.py +0 -0
  125. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/api_connexion/types.py +0 -0
  126. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/app.py +0 -0
  127. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/auth.py +0 -0
  128. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/constants.py +0 -0
  129. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/extensions/__init__.py +0 -0
  130. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/extensions/init_appbuilder.py +0 -0
  131. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/extensions/init_jinja_globals.py +0 -0
  132. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/extensions/init_manifest_files.py +0 -0
  133. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/extensions/init_security.py +0 -0
  134. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/extensions/init_session.py +0 -0
  135. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/extensions/init_views.py +0 -0
  136. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/extensions/init_wsgi_middlewares.py +0 -0
  137. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/security/__init__.py +0 -0
  138. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/security/permissions.py +0 -0
  139. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/security_appless.py +0 -0
  140. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/security_manager.py +0 -0
  141. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/session.py +0 -0
  142. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/css/bootstrap-theme.css +0 -0
  143. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/css/flash.css +0 -0
  144. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/css/loading-dots.css +0 -0
  145. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/css/main.css +0 -0
  146. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/css/material-icons.css +0 -0
  147. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/dist/48f0ea180c40270a5b05.png +0 -0
  148. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/dist/649c0b07771e68fafdeb.png +0 -0
  149. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/743.0c0bf201ae17e66a9a3f.js.LICENSE.txt → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/743.8fb7d21632ed892227fe.js.LICENSE.txt +0 -0
  150. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.ef6fc04c9b6920cd75c9.css → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.51e5d14856ee1ebc83ca.css +0 -0
  151. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.ef6fc04c9b6920cd75c9.js → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.51e5d14856ee1ebc83ca.js +0 -0
  152. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/dist/f7490d556a6c42e49ba4.png +0 -0
  153. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/flash.eaaf777ec1b3628cf7be.css → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/flash.865b6940c00b2a9041b3.css +0 -0
  154. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/flash.eaaf777ec1b3628cf7be.js → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/flash.865b6940c00b2a9041b3.js +0 -0
  155. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.css +0 -0
  156. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js +0 -0
  157. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js.LICENSE.txt +0 -0
  158. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/loadingDots.76f4332c0a932c3dc08f.css → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/loadingDots.07f5b9805847242736e1.css +0 -0
  159. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/loadingDots.76f4332c0a932c3dc08f.js → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/loadingDots.07f5b9805847242736e1.js +0 -0
  160. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/main.bc1f701c3d133e2a3bab.css → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/main.8cffe40bcf7cca998f4e.css +0 -0
  161. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/main.bc1f701c3d133e2a3bab.js.LICENSE.txt → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/main.8cffe40bcf7cca998f4e.js.LICENSE.txt +0 -0
  162. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/materialIcons.ad07a489b2f0fc1a96bf.css → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/materialIcons.4fe84ae36604d84dec78.css +0 -0
  163. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/materialIcons.ad07a489b2f0fc1a96bf.js → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/materialIcons.4fe84ae36604d84dec78.js +0 -0
  164. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/moment.5b85b4f6be2fe9c405ac.js → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/moment.0ec3ee3fb60dc999b1fd.js +0 -0
  165. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/dist/oss-licenses.json +0 -0
  166. /apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/runtime.254c277d91ce3ac79c64.js → /apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/runtime.45b36fb8335446865b53.js +0 -0
  167. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/js/datetime_utils.js +0 -0
  168. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/pin_100.png +0 -0
  169. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/pin_32.png +0 -0
  170. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/sort_asc.png +0 -0
  171. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/sort_both.png +0 -0
  172. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/static/sort_desc.png +0 -0
  173. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/templates/airflow/_messages.html +0 -0
  174. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/templates/airflow/error.html +0 -0
  175. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/templates/airflow/traceback.html +0 -0
  176. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/templates/appbuilder/flash.html +0 -0
  177. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/templates/appbuilder/index.html +0 -0
  178. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/templates/appbuilder/navbar.html +0 -0
  179. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/templates/appbuilder/navbar_menu.html +0 -0
  180. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/templates/appbuilder/navbar_right.html +0 -0
  181. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/utils.py +0 -0
  182. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/views.py +0 -0
  183. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/webpack.config.js +0 -0
  184. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/conftest.py +0 -0
  185. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/__init__.py +0 -0
  186. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/__init__.py +0 -0
  187. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/__init__.py +0 -0
  188. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api/__init__.py +0 -0
  189. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api/auth/__init__.py +0 -0
  190. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api/auth/backend/__init__.py +0 -0
  191. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api/auth/backend/test_basic_auth.py +0 -0
  192. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api/auth/backend/test_kerberos_auth.py +0 -0
  193. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api/auth/backend/test_session.py +0 -0
  194. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_endpoints/__init__.py +0 -0
  195. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_endpoints/api_connexion_utils.py +0 -0
  196. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_endpoints/remote_user_api_auth_backend.py +0 -0
  197. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_endpoints/test_auth.py +0 -0
  198. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_endpoints/test_role_and_permission_endpoint.py +0 -0
  199. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_endpoints/test_user_endpoint.py +0 -0
  200. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/__init__.py +0 -0
  201. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/conftest.py +0 -0
  202. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/datamodels/__init__.py +0 -0
  203. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/datamodels/test_roles.py +0 -0
  204. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/routes/__init__.py +0 -0
  205. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/routes/test_login.py +0 -0
  206. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/routes/test_roles.py +0 -0
  207. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/services/__init__.py +0 -0
  208. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py +0 -0
  209. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/services/test_roles.py +0 -0
  210. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/test_parameters.py +0 -0
  211. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/test_security.py +0 -0
  212. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api_fastapi/test_sorting.py +0 -0
  213. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/cli/__init__.py +0 -0
  214. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/cli_commands/__init__.py +0 -0
  215. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/cli_commands/test_db_command.py +0 -0
  216. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/cli_commands/test_permissions_command.py +0 -0
  217. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/cli_commands/test_role_command.py +0 -0
  218. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/cli_commands/test_sync_perm_command.py +0 -0
  219. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/cli_commands/test_user_command.py +0 -0
  220. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/cli_commands/test_utils.py +0 -0
  221. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/conftest.py +0 -0
  222. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/models/__init__.py +0 -0
  223. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/models/test_anonymous_user.py +0 -0
  224. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/models/test_db.py +0 -0
  225. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/models/test_user_model.py +0 -0
  226. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/schemas/__init__.py +0 -0
  227. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/schemas/test_role_and_permission_schema.py +0 -0
  228. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/schemas/test_user_schema.py +0 -0
  229. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/security_manager/__init__.py +0 -0
  230. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/security_manager/test_constants.py +0 -0
  231. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/security_manager/test_override.py +0 -0
  232. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/test_models.py +0 -0
  233. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/views/__init__.py +0 -0
  234. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/views/test_permissions.py +0 -0
  235. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/views/test_roles_list.py +0 -0
  236. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/views/test_user.py +0 -0
  237. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/views/test_user_edit.py +0 -0
  238. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/views/test_user_stats.py +0 -0
  239. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/cli/__init__.py +0 -0
  240. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/cli/test_definition.py +0 -0
  241. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/db_manager/__init__.py +0 -0
  242. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/db_manager/test_fab_db_manager.py +0 -0
  243. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/decorators.py +0 -0
  244. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/plugins/__init__.py +0 -0
  245. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/plugins/conftest.py +0 -0
  246. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/plugins/test_plugin.py +0 -0
  247. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/utils.py +0 -0
  248. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/__init__.py +0 -0
  249. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/test_auth.py +0 -0
  250. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/test_utils.py +0 -0
  251. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/views/__init__.py +0 -0
  252. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/views/conftest.py +0 -0
  253. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/views/test_connection_form_fields.py +0 -0
  254. {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/views/test_views_custom_user_views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-fab
3
- Version: 3.1.2
3
+ Version: 3.2.0
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>
@@ -36,11 +36,12 @@ Requires-Dist: connexion[flask]>=2.14.2,<3.0; python_version < '3.13'
36
36
  Requires-Dist: jmespath>=0.7.0; python_version < '3.13'
37
37
  Requires-Dist: werkzeug>=2.2,<4; python_version < '3.13'
38
38
  Requires-Dist: wtforms>=3.0,<4; python_version < '3.13'
39
+ Requires-Dist: cachetools>=6.0; python_version < '3.13'
39
40
  Requires-Dist: flask_limiter>3,<4,!=3.13
40
41
  Requires-Dist: kerberos>=1.3.0 ; extra == "kerberos" and ( python_version < '3.13')
41
42
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
42
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/3.1.2/changelog.html
43
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/3.1.2
43
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/3.2.0/changelog.html
44
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/3.2.0
44
45
  Project-URL: Mastodon, https://fosstodon.org/@airflow
45
46
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
46
47
  Project-URL: Source Code, https://github.com/apache/airflow
@@ -72,7 +73,7 @@ Provides-Extra: kerberos
72
73
 
73
74
  Package ``apache-airflow-providers-fab``
74
75
 
75
- Release: ``3.1.2``
76
+ Release: ``3.2.0``
76
77
 
77
78
 
78
79
  `Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
@@ -85,7 +86,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
85
86
  are in ``airflow.providers.fab`` python package.
86
87
 
87
88
  You can find package information and changelog for the provider
88
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/3.1.2/>`_.
89
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/3.2.0/>`_.
89
90
 
90
91
  Installation
91
92
  ------------
@@ -103,7 +104,7 @@ Requirements
103
104
  PIP package Version required
104
105
  ========================================== ==========================================
105
106
  ``apache-airflow`` ``>=3.0.2``
106
- ``apache-airflow-providers-common-compat`` ``>=1.10.1``
107
+ ``apache-airflow-providers-common-compat`` ``>=1.12.0``
107
108
  ``blinker`` ``>=1.6.2; python_version < "3.13"``
108
109
  ``flask`` ``>=2.2.1,<2.3; python_version < "3.13"``
109
110
  ``flask-appbuilder`` ``==5.0.1; python_version < "3.13"``
@@ -116,6 +117,7 @@ PIP package Version required
116
117
  ``jmespath`` ``>=0.7.0; python_version < "3.13"``
117
118
  ``werkzeug`` ``>=2.2,<4; python_version < "3.13"``
118
119
  ``wtforms`` ``>=3.0,<4; python_version < "3.13"``
120
+ ``cachetools`` ``>=6.0; python_version < "3.13"``
119
121
  ``flask_limiter`` ``>3,!=3.13,<4``
120
122
  ========================================== ==========================================
121
123
 
@@ -148,5 +150,5 @@ Extra Dependencies
148
150
  ============ ============================================
149
151
 
150
152
  The changelog for the provider package can be found in the
151
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/3.1.2/changelog.html>`_.
153
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/3.2.0/changelog.html>`_.
152
154
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  Package ``apache-airflow-providers-fab``
25
25
 
26
- Release: ``3.1.2``
26
+ Release: ``3.2.0``
27
27
 
28
28
 
29
29
  `Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
@@ -36,7 +36,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
36
36
  are in ``airflow.providers.fab`` python package.
37
37
 
38
38
  You can find package information and changelog for the provider
39
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/3.1.2/>`_.
39
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/3.2.0/>`_.
40
40
 
41
41
  Installation
42
42
  ------------
@@ -54,7 +54,7 @@ Requirements
54
54
  PIP package Version required
55
55
  ========================================== ==========================================
56
56
  ``apache-airflow`` ``>=3.0.2``
57
- ``apache-airflow-providers-common-compat`` ``>=1.10.1``
57
+ ``apache-airflow-providers-common-compat`` ``>=1.12.0``
58
58
  ``blinker`` ``>=1.6.2; python_version < "3.13"``
59
59
  ``flask`` ``>=2.2.1,<2.3; python_version < "3.13"``
60
60
  ``flask-appbuilder`` ``==5.0.1; python_version < "3.13"``
@@ -67,6 +67,7 @@ PIP package Version required
67
67
  ``jmespath`` ``>=0.7.0; python_version < "3.13"``
68
68
  ``werkzeug`` ``>=2.2,<4; python_version < "3.13"``
69
69
  ``wtforms`` ``>=3.0,<4; python_version < "3.13"``
70
+ ``cachetools`` ``>=6.0; python_version < "3.13"``
70
71
  ``flask_limiter`` ``>3,!=3.13,<4``
71
72
  ========================================== ==========================================
72
73
 
@@ -99,4 +100,4 @@ Extra Dependencies
99
100
  ============ ============================================
100
101
 
101
102
  The changelog for the provider package can be found in the
102
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/3.1.2/changelog.html>`_.
103
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/3.2.0/changelog.html>`_.
@@ -238,6 +238,86 @@ webserver_config.py itself if you wish.
238
238
  log.debug(f"User info from GitHub: {user_data}\nTeam info from GitHub: {teams}")
239
239
  return {"username": "github_" + user_data.get("login"), "role_keys": roles}
240
240
 
241
+ Example using role / group based Authorization with Azure Active Directory
242
+ '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
243
+
244
+ Here is an example of what you might have in your ``webserver_config.py``:
245
+
246
+ .. code-block:: python
247
+
248
+ from airflow.providers.fab.auth_manager.security_manager.override import FabAirflowSecurityManagerOverride
249
+ from flask_appbuilder.security.manager import AUTH_OAUTH
250
+
251
+ AUTH_TYPE = AUTH_OAUTH
252
+ AUTH_USER_REGISTRATION = True
253
+ AUTH_ROLES_SYNC_AT_LOGIN = True
254
+
255
+ AUTH_ROLES_MAPPING = {
256
+ "Azure-Admins": ["Admin"],
257
+ "Azure-Users": ["User"],
258
+ "Azure-Viewers": ["Viewer"],
259
+ }
260
+
261
+ OAUTH_PROVIDERS = [
262
+ {
263
+ "name": "azure",
264
+ "icon": "fa-windows",
265
+ "token_key": "access_token",
266
+ "remote_app": {
267
+ "client_id": "<your-client-id>",
268
+ "client_secret": "<your-client-secret>",
269
+ "api_base_url": "https://graph.microsoft.com/v1.0/",
270
+ "client_kwargs": {"scope": "openid email profile"},
271
+ "access_token_url": "https://login.microsoftonline.com/<your-tenant-id>/oauth2/v2.0/token",
272
+ "authorize_url": "https://login.microsoftonline.com/<your-tenant-id>/oauth2/v2.0/authorize",
273
+ "request_token_url": None,
274
+ },
275
+ }
276
+ ]
277
+
278
+
279
+ class AzureAdSecurityManager(FabAirflowSecurityManagerOverride):
280
+ def get_oauth_user_info(self, provider, response):
281
+ if provider != "azure":
282
+ return {}
283
+
284
+ groups = response.get("groups", [])
285
+ roles = response.get("roles", [])
286
+
287
+ return {
288
+ "username": response.get("preferred_username"),
289
+ "email": response.get("email"),
290
+ "first_name": response.get("given_name"),
291
+ "last_name": response.get("family_name"),
292
+ "role_keys": groups or roles,
293
+ }
294
+
295
+
296
+ SECURITY_MANAGER_CLASS = AzureAdSecurityManager
297
+
298
+ .. note::
299
+
300
+ * Azure AD group or role claims must be explicitly enabled in the application
301
+ registration (for example via ``groupMembershipClaims``).
302
+ * Depending on tenant configuration, group claims may be returned as IDs
303
+ rather than display names.
304
+ * For large group memberships, querying Microsoft Graph may be required
305
+ instead of relying solely on token claims.
306
+
307
+ .. figure:: /img/azure-ad-authentication.jpeg
308
+ :alt: Azure AD app registration authentication settings
309
+
310
+ Azure AD app registration authentication configuration showing the redirect URI
311
+ (``http://localhost:8080/auth/oauth-authorized/azure``) required for Airflow OAuth
312
+ integration.
313
+
314
+ .. figure:: /img/azure-ad-token-claims.jpeg
315
+ :alt: Azure AD token configuration with group or role claims enabled
316
+
317
+ Azure AD app registration token configuration showing the ``groups`` optional claim
318
+ enabled, which allows Azure AD group or role information to be included in the token
319
+ and mapped to Airflow RBAC roles.
320
+
241
321
  Example using team based Authorization with KeyCloak
242
322
  ''''''''''''''''''''''''''''''''''''''''''''''''''''''''
243
323
  Here is an example of what you might have in your webserver_config.py:
@@ -20,6 +20,39 @@
20
20
  Changelog
21
21
  ---------
22
22
 
23
+ 3.2.0
24
+ .....
25
+
26
+ Features
27
+ ~~~~~~~~
28
+
29
+ * ``Cache user object fetched per request in FAB auth manager for improved performance. (#60274)``
30
+
31
+ Bug Fixes
32
+ ~~~~~~~~~
33
+
34
+ * ``(bugfix): Add dark theme support for FAB Security pages (#60908)``
35
+ * ``fix(fab): Align ORM column sizes with migration definitions (#60869)``
36
+
37
+ Misc
38
+ ~~~~
39
+
40
+ * ``Migrate Flask based user APIs to Fastapi (#60973)``
41
+ * ``Improve typing in Fab (#61001)``
42
+ * ``Bump lodash from 4.17.21 to 4.17.23 in /providers/fab/src/airflow/providers/fab/www (#60911)``
43
+ * ``Bump mini-css-extract-plugin from 2.9.4 to 2.10.0 in /providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates group across 1 directory (#60831)``
44
+ * ``Remove non-logic redundant selection and query in FAB (#60807)``
45
+ * ``Bump the fab-ui-package-updates group across 1 directory with 5 updates (#60791)``
46
+ * ``Migrate FAB POST /users to FastAPI (#60523)``
47
+
48
+ Doc-only
49
+ ~~~~~~~~
50
+
51
+ * ``Add Azure AD OAuth webserver authentication example with role mapping (#60756)``
52
+
53
+ .. Below changes are excluded from the changelog. Move them to
54
+ appropriate section above if needed. Do not delete the lines(!):
55
+
23
56
  3.1.2
24
57
  .....
25
58
 
@@ -84,7 +84,7 @@ apache-airflow-providers-fab package
84
84
  `Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
85
85
 
86
86
 
87
- Release: 3.1.2
87
+ Release: 3.2.0
88
88
 
89
89
  Provider package
90
90
  ----------------
@@ -121,6 +121,7 @@ PIP package Version required
121
121
  ``jmespath`` ``>=0.7.0; python_version < "3.13"``
122
122
  ``werkzeug`` ``>=2.2,<4; python_version < "3.13"``
123
123
  ``wtforms`` ``>=3.0,<4; python_version < "3.13"``
124
+ ``cachetools`` ``>=6.0; python_version < "3.13"``
124
125
  ``flask_limiter`` ``>3,!=3.13,<4``
125
126
  ========================================== ==========================================
126
127
 
@@ -149,5 +150,5 @@ Downloading official packages
149
150
  You can download officially released packages and verify their checksums and signatures from the
150
151
  `Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
151
152
 
152
- * `The apache-airflow-providers-fab 3.1.2 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.1.2.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.1.2.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.1.2.tar.gz.sha512>`__)
153
- * `The apache-airflow-providers-fab 3.1.2 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.1.2-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.1.2-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.1.2-py3-none-any.whl.sha512>`__)
153
+ * `The apache-airflow-providers-fab 3.2.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.2.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.2.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.2.0.tar.gz.sha512>`__)
154
+ * `The apache-airflow-providers-fab 3.2.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.2.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.2.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-3.2.0-py3-none-any.whl.sha512>`__)
@@ -28,13 +28,14 @@ description: |
28
28
  # For providers until we think it should be released.
29
29
  state: ready
30
30
 
31
- source-date-epoch: 1768334947
31
+ source-date-epoch: 1769461317
32
32
 
33
33
  # Note that those versions are maintained by release manager - do not update them manually
34
34
  # with the exception of case where other provider in sources has >= new provider version.
35
35
  # In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
36
36
  # to be done in the same PR
37
37
  versions:
38
+ - 3.2.0
38
39
  - 3.1.2
39
40
  - 3.1.1
40
41
  - 3.1.0
@@ -250,6 +251,14 @@ config:
250
251
  type: integer
251
252
  example: ~
252
253
  default: "1"
254
+ cache_ttl:
255
+ description: |
256
+ Number of seconds after which the user cache will expire to refetch updated user and
257
+ permissions.
258
+ version_added: 3.2.0
259
+ type: integer
260
+ example: ~
261
+ default: "30"
253
262
 
254
263
  auth-managers:
255
264
  - airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
25
25
 
26
26
  [project]
27
27
  name = "apache-airflow-providers-fab"
28
- version = "3.1.2"
28
+ version = "3.2.0"
29
29
  description = "Provider package apache-airflow-providers-fab for Apache Airflow"
30
30
  readme = "README.rst"
31
31
  license = "Apache-2.0"
@@ -81,6 +81,7 @@ dependencies = [
81
81
  "jmespath>=0.7.0; python_version < '3.13'",
82
82
  "werkzeug>=2.2,<4; python_version < '3.13'",
83
83
  "wtforms>=3.0,<4; python_version < '3.13'",
84
+ "cachetools>=6.0; python_version < '3.13'",
84
85
 
85
86
  # https://github.com/dpgaspar/Flask-AppBuilder/blob/release/4.6.3/setup.py#L54C8-L54C26
86
87
  # with an exclusion to account for https://github.com/alisaifee/flask-limiter/issues/479
@@ -131,8 +132,8 @@ apache-airflow-providers-common-sql = {workspace = true}
131
132
  apache-airflow-providers-standard = {workspace = true}
132
133
 
133
134
  [project.urls]
134
- "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/3.1.2"
135
- "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/3.1.2/changelog.html"
135
+ "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/3.2.0"
136
+ "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/3.2.0/changelog.html"
136
137
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
137
138
  "Source Code" = "https://github.com/apache/airflow"
138
139
  "Slack Chat" = "https://s.apache.org/airflow-slack"
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "3.1.2"
32
+ __version__ = "3.2.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "3.0.2"
@@ -120,7 +120,9 @@ def post_user() -> APIResponse:
120
120
  raise BadRequest(detail=detail)
121
121
 
122
122
  if not roles_to_add: # No roles provided, use the F.A.B's default registered user role.
123
- roles_to_add.append(security_manager.find_role(security_manager.auth_user_registration_role))
123
+ r = security_manager.find_role(security_manager.auth_user_registration_role)
124
+ if r:
125
+ roles_to_add.append(r)
124
126
 
125
127
  user = security_manager.add_user(role=roles_to_add, **data)
126
128
  if not user:
@@ -40,6 +40,12 @@ class ActionResource(BaseModel):
40
40
  resource: Resource
41
41
 
42
42
 
43
+ class Role(BaseModel):
44
+ """Lightweight role reference used by /users schemas."""
45
+
46
+ name: str
47
+
48
+
43
49
  class RoleBody(StrictBaseModel):
44
50
  """Incoming payload for creating/updating a role."""
45
51
 
@@ -0,0 +1,68 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+ from __future__ import annotations
18
+
19
+ from pydantic import Field, SecretStr
20
+
21
+ from airflow.api_fastapi.common.types import UtcDateTime
22
+ from airflow.api_fastapi.core_api.base import BaseModel, StrictBaseModel
23
+ from airflow.providers.fab.auth_manager.api_fastapi.datamodels.roles import Role
24
+
25
+
26
+ class UserBody(StrictBaseModel):
27
+ """Incoming payload for creating a user."""
28
+
29
+ username: str = Field(min_length=1)
30
+ email: str = Field(min_length=1)
31
+ first_name: str = Field(min_length=1)
32
+ last_name: str = Field(min_length=1)
33
+ roles: list[Role] | None = None
34
+ password: SecretStr
35
+
36
+
37
+ class UserPatchBody(StrictBaseModel):
38
+ """Incoming payload for updating a user (all fields optional)."""
39
+
40
+ username: str | None = Field(default=None, min_length=1)
41
+ email: str | None = Field(default=None, min_length=1)
42
+ first_name: str | None = Field(default=None, min_length=1)
43
+ last_name: str | None = Field(default=None, min_length=1)
44
+ roles: list[Role] | None = None
45
+ password: SecretStr | None = None
46
+
47
+
48
+ class UserResponse(BaseModel):
49
+ """Outgoing representation of a user (no password)."""
50
+
51
+ username: str
52
+ email: str
53
+ first_name: str
54
+ last_name: str
55
+ roles: list[Role] | None = None
56
+ active: bool | None = None
57
+ last_login: UtcDateTime | None = None
58
+ login_count: int | None = None
59
+ fail_login_count: int | None = None
60
+ created_on: UtcDateTime | None = None
61
+ changed_on: UtcDateTime | None = None
62
+
63
+
64
+ class UserCollectionResponse(BaseModel):
65
+ """Response model for a collection of users."""
66
+
67
+ users: list[UserResponse]
68
+ total_entries: int