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.
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/PKG-INFO +9 -7
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/README.rst +5 -4
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/webserver-authentication.rst +80 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/changelog.rst +33 -0
- apache_airflow_providers_fab-3.2.0/docs/img/azure-ad-authentication.jpeg +0 -0
- apache_airflow_providers_fab-3.2.0/docs/img/azure-ad-token-claims.jpeg +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/index.rst +4 -3
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/provider.yaml +10 -1
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/pyproject.toml +4 -3
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/__init__.py +1 -1
- {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
- {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
- apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/users.py +68 -0
- {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
- apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/auth_manager/api_fastapi/routes/users.py +133 -0
- apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/auth_manager/api_fastapi/services/users.py +219 -0
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/get_provider_info.py +7 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/package-lock.json +616 -481
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/package.json +6 -6
- 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
- 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
- apache_airflow_providers_fab-3.2.0/src/airflow/providers/fab/www/static/dist/manifest.json +22 -0
- {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
- {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
- apache_airflow_providers_fab-3.2.0/tests/unit/fab/auth_manager/api_fastapi/datamodels/test_users.py +234 -0
- apache_airflow_providers_fab-3.2.0/tests/unit/fab/auth_manager/api_fastapi/routes/test_users.py +582 -0
- apache_airflow_providers_fab-3.2.0/tests/unit/fab/auth_manager/api_fastapi/services/test_users.py +462 -0
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/test_security.py +22 -12
- apache_airflow_providers_fab-3.2.0/www-hash.txt +1 -0
- apache_airflow_providers_fab-3.1.2/src/airflow/providers/fab/www/static/dist/manifest.json +0 -22
- apache_airflow_providers_fab-3.1.2/www-hash.txt +0 -1
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/.pre-commit-config.yaml +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/3rd-party-licenses/LICENSES-ui.txt +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/LICENSE +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/NOTICE +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/api-ref/fab-public-api-ref.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/api-ref/fab-token-api-ref.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/access-control.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/api-authentication.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/configuring-flask-app.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/index.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/security.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/sso.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/auth-manager/token.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/cli-ref.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/commits.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/conf.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/configurations-ref.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/img/add-role.png +0 -0
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/img/new-role.png +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/installing-providers-from-sources.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/migrations-ref.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/security.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/upgrading.rst +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/__init__.py +0 -0
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/alembic.ini +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/auth_manager/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/cli/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/cli/definition.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/README +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/env.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/script.py.mako +0 -0
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/migrations/versions/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/version_compat.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/app.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/auth.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/constants.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/extensions/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/security/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/security/permissions.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/security_appless.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/security_manager.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/session.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- /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
- /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
- /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
- {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
- /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
- /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
- {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
- {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
- {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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- {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
- /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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/utils.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/views.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/src/airflow/providers/fab/www/webpack.config.js +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/conftest.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/api/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/cli/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/conftest.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/models/__init__.py +0 -0
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/schemas/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/test_models.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/auth_manager/views/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/cli/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/cli/test_definition.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/db_manager/__init__.py +0 -0
- {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
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/decorators.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/plugins/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/plugins/conftest.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/plugins/test_plugin.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/utils.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/test_auth.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/test_utils.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/views/__init__.py +0 -0
- {apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/tests/unit/fab/www/views/conftest.py +0 -0
- {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
- {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.
|
|
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.
|
|
43
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/3.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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:
|
{apache_airflow_providers_fab-3.1.2 → apache_airflow_providers_fab-3.2.0}/docs/changelog.rst
RENAMED
|
@@ -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
|
|
|
Binary file
|
|
Binary file
|
|
@@ -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.
|
|
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.
|
|
153
|
-
* `The apache-airflow-providers-fab 3.
|
|
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:
|
|
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.
|
|
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.
|
|
135
|
-
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/3.
|
|
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.
|
|
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
|
-
|
|
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
|