This is an automated email from the ASF dual-hosted git repository.
ash pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 8cc9f1fca93 Relocate airflow.auth to airflow.api_fastapi.auth (#47492)
8cc9f1fca93 is described below
commit 8cc9f1fca9343768e9aa7bb4c802e7d2fc109719
Author: Ash Berlin-Taylor <[email protected]>
AuthorDate: Fri Mar 7 23:40:01 2025 +0000
Relocate airflow.auth to airflow.api_fastapi.auth (#47492)
---
.github/workflows/basic-tests.yml | 12 +++++-----
.pre-commit-config.yaml | 26 +++++++++-------------
airflow/api_fastapi/app.py | 2 +-
airflow/{ => api_fastapi}/auth/__init__.py | 0
.../{ => api_fastapi}/auth/managers/__init__.py | 0
.../auth/managers/base_auth_manager.py | 8 +++----
.../auth/managers/models/__init__.py | 0
.../auth/managers/models/base_user.py | 0
.../auth/managers/models/batch_apis.py | 4 ++--
.../auth/managers/models/resource_details.py | 0
.../auth/managers/simple/__init__.py | 0
.../auth/managers/simple/datamodels/__init__.py | 0
.../auth/managers/simple/datamodels/login.py | 0
.../auth/managers/simple/openapi/__init__.py | 0
.../auth/managers/simple/openapi/v1-generated.yaml | 0
.../auth/managers/simple/routes/__init__.py | 0
.../auth/managers/simple/routes/login.py | 4 ++--
.../auth/managers/simple/services/__init__.py | 0
.../auth/managers/simple/services/login.py | 6 ++---
.../auth/managers/simple/simple_auth_manager.py | 17 ++++++--------
.../auth/managers/simple/ui/dev/index.html | 0
.../auth/managers/simple/ui/index.html | 0
.../simple/ui/openapi-gen/queries/common.ts | 0
.../simple/ui/openapi-gen/queries/index.ts | 0
.../ui/openapi-gen/queries/infiniteQueries.ts | 0
.../simple/ui/openapi-gen/queries/prefetch.ts | 0
.../simple/ui/openapi-gen/queries/queries.ts | 0
.../simple/ui/openapi-gen/queries/suspense.ts | 0
.../ui/openapi-gen/requests/core/ApiError.ts | 0
.../openapi-gen/requests/core/ApiRequestOptions.ts | 0
.../ui/openapi-gen/requests/core/ApiResult.ts | 0
.../openapi-gen/requests/core/CancelablePromise.ts | 0
.../simple/ui/openapi-gen/requests/core/OpenAPI.ts | 0
.../simple/ui/openapi-gen/requests/core/request.ts | 0
.../simple/ui/openapi-gen/requests/index.ts | 0
.../simple/ui/openapi-gen/requests/schemas.gen.ts | 0
.../simple/ui/openapi-gen/requests/services.gen.ts | 0
.../simple/ui/openapi-gen/requests/types.gen.ts | 0
.../auth/managers/simple/ui/package-lock.json | 0
.../auth/managers/simple/ui/package.json | 0
.../auth/managers/simple/ui/pnpm-lock.yaml | 0
.../managers/simple/ui/src/login/Login.test.tsx | 0
.../auth/managers/simple/ui/src/login/Login.tsx | 0
.../managers/simple/ui/src/login/LoginForm.tsx | 0
.../auth/managers/simple/ui/src/main.tsx | 0
.../simple/ui/src/queries/useCreateToken.ts | 0
.../auth/managers/simple/ui/src/queryClient.ts | 0
.../auth/managers/simple/ui/src/router.tsx | 0
.../auth/managers/simple/ui/src/test-utils.tsx | 0
.../auth/managers/simple/ui/tests-setup.ts | 0
.../auth/managers/simple/ui/vite.config.ts | 0
.../{ => api_fastapi}/auth/managers/simple/user.py | 2 +-
.../auth/managers/utils/__init__.py | 0
.../{ => api_fastapi}/auth/managers/utils/fab.py | 2 +-
.../core_api/routes/public/dag_parsing.py | 4 ++--
airflow/api_fastapi/core_api/security.py | 6 ++---
airflow/api_fastapi/logging/decorators.py | 2 +-
airflow/configuration.py | 2 +-
clients/python/test_python_client.py | 4 ++--
codecov.yml | 2 +-
contributing-docs/08_static_code_checks.rst | 3 +--
.../commands/release_management_commands.py | 2 +-
.../src/airflow_breeze/utils/selective_checks.py | 4 ++--
.../tests/test_pytest_args_for_test_types.py | 1 -
newsfragments/41348.significant.rst | 8 +++----
.../amazon/aws/auth_manager/avp/entities.py | 2 +-
.../amazon/aws/auth_manager/avp/facade.py | 2 +-
.../amazon/aws/auth_manager/aws_auth_manager.py | 10 ++++-----
.../providers/amazon/aws/auth_manager/user.py | 11 +++++----
.../amazon/aws/auth_manager/avp/test_facade.py | 2 +-
.../aws/auth_manager/test_aws_auth_manager.py | 6 ++---
.../providers/common/compat/assets/__init__.py | 4 ++--
.../databricks/plugins/databricks_workflow.py | 5 ++++-
.../providers/edge/plugins/edge_executor_plugin.py | 6 +++--
.../auth_manager/api/auth/backend/kerberos_auth.py | 2 +-
.../providers/fab/auth_manager/fab_auth_manager.py | 11 +++++----
.../providers/fab/auth_manager/models/__init__.py | 2 +-
.../fab/auth_manager/models/anonymous_user.py | 2 +-
.../providers/fab/www/api_connexion/security.py | 2 +-
.../fab/src/airflow/providers/fab/www/auth.py | 6 ++---
.../airflow/providers/fab/www/security_manager.py | 2 +-
.../unit/fab/auth_manager/test_fab_auth_manager.py | 8 +++++--
.../tests/unit/fab/auth_manager/test_security.py | 8 +++----
providers/fab/tests/unit/fab/www/test_auth.py | 2 +-
pyproject.toml | 1 -
scripts/ci/pre_commit/compile_ui_assets.py | 4 +++-
scripts/cov/other_coverage.py | 1 -
.../in_container/run_update_fastapi_api_spec.py | 20 +++++++++++------
tests/{ => api_fastapi}/auth/__init__.py | 0
tests/{ => api_fastapi}/auth/managers/__init__.py | 0
.../auth/managers/simple/__init__.py | 0
.../auth/managers/simple/conftest.py | 4 ++--
.../auth/managers/simple/routes/__init__.py | 0
.../auth/managers/simple/routes/test_login.py | 6 ++---
.../auth/managers/simple/services/__init__.py | 0
.../auth/managers/simple/services/test_login.py | 6 ++---
.../managers/simple/test_simple_auth_manager.py | 4 ++--
.../auth/managers/simple/test_user.py | 0
.../auth/managers/test_base_auth_manager.py | 14 ++++++------
tests/api_fastapi/conftest.py | 8 +++----
tests/api_fastapi/core_api/test_security.py | 6 ++---
101 files changed, 149 insertions(+), 139 deletions(-)
diff --git a/.github/workflows/basic-tests.yml
b/.github/workflows/basic-tests.yml
index 39df43a611f..775c72f0523 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -131,22 +131,22 @@ jobs:
- name: "Restore eslint cache (simple auth manager UI)"
uses:
apache/infrastructure-actions/stash/restore@1c35b5ccf8fba5d4c3fdf25a045ca91aa0cbc468
with:
- path: airflow/auth/managers/simple/ui/node_modules/
+ path: airflow/api_fastapi/auth/managers/simple/ui/node_modules/
key: >
cache-simple-am-ui-node-modules-v1-
- ${{ runner.os }}-${{
hashFiles('airflow/auth/managers/simple/ui/**/pnpm-lock.yaml') }}
+ ${{ runner.os }}-${{
hashFiles('airflow/api_fastapi/auth/managers/simple/ui/**/pnpm-lock.yaml') }}
id: restore-eslint-cache-simple-am-ui
- - run: cd airflow/auth/managers/simple/ui && pnpm install
--frozen-lockfile
- - run: cd airflow/auth/managers/simple/ui && pnpm test
+ - run: cd airflow/api_fastapi/auth/managers/simple/ui && pnpm install
--frozen-lockfile
+ - run: cd airflow/api_fastapi/auth/managers/simple/ui && pnpm test
env:
FORCE_COLOR: 2
- name: "Save eslint cache (ui)"
uses:
apache/infrastructure-actions/stash/save@1c35b5ccf8fba5d4c3fdf25a045ca91aa0cbc468
with:
- path: airflow/auth/managers/simple/ui/node_modules/
+ path: airflow/api_fastapi/auth/managers/simple/ui/node_modules/
key: >
cache-simple-am-ui-node-modules-v1-
- ${{ runner.os }}-${{
hashFiles('airflow/auth/managers/simple/ui/**/pnpm-lock.yaml') }}
+ ${{ runner.os }}-${{
hashFiles('airflow/api_fastapi/auth/managers/simple/ui/**/pnpm-lock.yaml') }}
if-no-files-found: 'error'
retention-days: '2'
if: steps.restore-eslint-cache-simple-am-ui.outputs.stash-hit != 'true'
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3daa77dad08..d9ef02045b8 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -125,7 +125,7 @@ repos:
- --fuzzy-match-generates-todo
- id: insert-license
name: Add license for all YAML files except Helm templates
- exclude:
^\.github/.*$|^chart/templates/.*|.*/reproducible_build.yaml$|^airflow/api_fastapi/core_api/openapi/v1-generated.yaml$|^airflow/auth/managers/simple/openapi/v1-generated.yaml$|^providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v1-generated.yaml$|^.*/pnpm-lock.yaml$
+ exclude:
^\.github/.*$|^chart/templates/.*|.*/reproducible_build.yaml$|^.*/v1-generated.yaml$|^.*/pnpm-lock.yaml$
types: [yaml]
files: \.ya?ml$
args:
@@ -281,9 +281,8 @@ repos:
^.*airflow\.template\.yaml$|
^.*init_git_sync\.template\.yaml$|
^chart/(?:templates|files)/.*\.yaml$|
- ^airflow/api_fastapi/core_api/openapi/v1-generated\.yaml$|
+ .*/v1-generated\.yaml$|
^.*openapi.*\.yaml$|
- ^airflow/api_fastapi/core_api/openapi/v1-generated\.yaml$|
^\.pre-commit-config\.yaml$|
^.*/reproducible_build.yaml$|
^.*pnpm-lock\.yaml$
@@ -825,7 +824,7 @@ repos:
language: node
stages: ['manual']
types_or: [javascript, ts, tsx]
- files: ^airflow/ui/|^airflow/auth/managers/simple/ui/
+ files: ^airflow/ui/|^airflow/api_fastapi/auth/managers/simple/ui/
entry: ./scripts/ci/pre_commit/compile_ui_assets.py
pass_filenames: false
additional_dependencies: ['[email protected]']
@@ -842,7 +841,7 @@ repos:
language: node
stages: ['manual']
types_or: [javascript, ts, tsx]
- files: ^airflow/ui/|^airflow/auth/managers/simple/ui/
+ files: ^airflow/ui/|^airflow/api_fastapi/auth/managers/simple/ui/
entry: ./scripts/ci/pre_commit/compile_ui_assets_dev.py
pass_filenames: false
additional_dependencies: ['[email protected]']
@@ -1131,15 +1130,6 @@ repos:
additional_dependencies: ['rich>=12.4.4']
pass_filenames: false
files: ^tests/.*\.py$
- - id: ts-compile-format-lint-ui
- name: Compile / format / lint UI
- description: TS types generation / ESLint / Prettier new UI files
- language: node
- types_or: [javascript, ts, tsx, yaml, css, json]
- files:
^airflow/ui/|^airflow/api_fastapi/core_api/openapi/v1-generated\.yaml$|^airflow/auth/managers/simple/ui/|^airflow/auth/managers/simple/openapi/v1-generated\.yaml$
- entry: ./scripts/ci/pre_commit/lint_ui.py
- additional_dependencies: ['[email protected]']
- pass_filenames: false
- id: check-tests-unittest-testcase
name: Unit tests do not inherit from unittest.TestCase
description: Check that unit tests do not inherit from
unittest.TestCase
@@ -1324,7 +1314,7 @@ repos:
language: python
entry: ./scripts/ci/pre_commit/update_fastapi_api_spec.py
pass_filenames: false
- files:
^airflow/api_fastapi/.*\.py$|^airflow/auth/managers/simple/.*\.py$|^providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/.*\.py$
+ files:
^airflow/api_fastapi/.*\.py$|^airflow/api_fastapi/auth/managers/simple/.*\.py$|^providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/.*\.py$
exclude: ^airflow/api_fastapi/execution_api/.*
additional_dependencies: ['rich>=12.4.4']
- id: ts-compile-format-lint-ui
@@ -1332,7 +1322,11 @@ repos:
description: TS types generation / ESLint / Prettier new UI files
language: node
types_or: [javascript, ts, tsx, yaml, css, json]
- files:
^airflow/ui/|^airflow/api_fastapi/core_api/openapi/v1-generated\.yaml$|^airflow/auth/managers/simple/ui/|^airflow/auth/managers/simple/openapi/v1-generated\.yaml$
+ files: |
+ (?x)
+
^airflow/ui/|^airflow/api_fastapi/core_api/openapi/v1-generated\.yaml$ |
+ ^airflow/api_fastapi/auth/managers/simple/ui/ |
+ ^airflow/api_fastapi/auth/managers/simple/openapi/v1-generated\.yaml$
entry: ./scripts/ci/pre_commit/lint_ui.py
additional_dependencies: ['[email protected]']
pass_filenames: false
diff --git a/airflow/api_fastapi/app.py b/airflow/api_fastapi/app.py
index 9f7369f0be1..3238d66bd87 100644
--- a/airflow/api_fastapi/app.py
+++ b/airflow/api_fastapi/app.py
@@ -38,7 +38,7 @@ from airflow.configuration import conf
from airflow.exceptions import AirflowConfigException
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import BaseAuthManager
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
BaseAuthManager
log = logging.getLogger(__name__)
diff --git a/airflow/auth/__init__.py b/airflow/api_fastapi/auth/__init__.py
similarity index 100%
rename from airflow/auth/__init__.py
rename to airflow/api_fastapi/auth/__init__.py
diff --git a/airflow/auth/managers/__init__.py
b/airflow/api_fastapi/auth/managers/__init__.py
similarity index 100%
rename from airflow/auth/managers/__init__.py
rename to airflow/api_fastapi/auth/managers/__init__.py
diff --git a/airflow/auth/managers/base_auth_manager.py
b/airflow/api_fastapi/auth/managers/base_auth_manager.py
similarity index 97%
rename from airflow/auth/managers/base_auth_manager.py
rename to airflow/api_fastapi/auth/managers/base_auth_manager.py
index f3b86600a05..6d2e2eb3f4c 100644
--- a/airflow/auth/managers/base_auth_manager.py
+++ b/airflow/api_fastapi/auth/managers/base_auth_manager.py
@@ -24,8 +24,8 @@ from typing import TYPE_CHECKING, Any, Generic, TypeVar
from jwt import InvalidTokenError
from sqlalchemy import select
-from airflow.auth.managers.models.base_user import BaseUser
-from airflow.auth.managers.models.resource_details import DagDetails
+from airflow.api_fastapi.auth.managers.models.base_user import BaseUser
+from airflow.api_fastapi.auth.managers.models.resource_details import
DagDetails
from airflow.configuration import conf
from airflow.models import DagModel
from airflow.typing_compat import Literal
@@ -39,13 +39,13 @@ if TYPE_CHECKING:
from fastapi import FastAPI
from sqlalchemy.orm import Session
- from airflow.auth.managers.models.batch_apis import (
+ from airflow.api_fastapi.auth.managers.models.batch_apis import (
IsAuthorizedConnectionRequest,
IsAuthorizedDagRequest,
IsAuthorizedPoolRequest,
IsAuthorizedVariableRequest,
)
- from airflow.auth.managers.models.resource_details import (
+ from airflow.api_fastapi.auth.managers.models.resource_details import (
AccessView,
AssetDetails,
ConfigurationDetails,
diff --git a/airflow/auth/managers/models/__init__.py
b/airflow/api_fastapi/auth/managers/models/__init__.py
similarity index 100%
rename from airflow/auth/managers/models/__init__.py
rename to airflow/api_fastapi/auth/managers/models/__init__.py
diff --git a/airflow/auth/managers/models/base_user.py
b/airflow/api_fastapi/auth/managers/models/base_user.py
similarity index 100%
rename from airflow/auth/managers/models/base_user.py
rename to airflow/api_fastapi/auth/managers/models/base_user.py
diff --git a/airflow/auth/managers/models/batch_apis.py
b/airflow/api_fastapi/auth/managers/models/batch_apis.py
similarity index 92%
rename from airflow/auth/managers/models/batch_apis.py
rename to airflow/api_fastapi/auth/managers/models/batch_apis.py
index ac37f68c723..2fe11b659af 100644
--- a/airflow/auth/managers/models/batch_apis.py
+++ b/airflow/api_fastapi/auth/managers/models/batch_apis.py
@@ -20,8 +20,8 @@ from __future__ import annotations
from typing import TYPE_CHECKING, TypedDict
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
- from airflow.auth.managers.models.resource_details import (
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
+ from airflow.api_fastapi.auth.managers.models.resource_details import (
ConnectionDetails,
DagAccessEntity,
DagDetails,
diff --git a/airflow/auth/managers/models/resource_details.py
b/airflow/api_fastapi/auth/managers/models/resource_details.py
similarity index 100%
rename from airflow/auth/managers/models/resource_details.py
rename to airflow/api_fastapi/auth/managers/models/resource_details.py
diff --git a/airflow/auth/managers/simple/__init__.py
b/airflow/api_fastapi/auth/managers/simple/__init__.py
similarity index 100%
rename from airflow/auth/managers/simple/__init__.py
rename to airflow/api_fastapi/auth/managers/simple/__init__.py
diff --git a/airflow/auth/managers/simple/datamodels/__init__.py
b/airflow/api_fastapi/auth/managers/simple/datamodels/__init__.py
similarity index 100%
rename from airflow/auth/managers/simple/datamodels/__init__.py
rename to airflow/api_fastapi/auth/managers/simple/datamodels/__init__.py
diff --git a/airflow/auth/managers/simple/datamodels/login.py
b/airflow/api_fastapi/auth/managers/simple/datamodels/login.py
similarity index 100%
rename from airflow/auth/managers/simple/datamodels/login.py
rename to airflow/api_fastapi/auth/managers/simple/datamodels/login.py
diff --git a/airflow/auth/managers/simple/openapi/__init__.py
b/airflow/api_fastapi/auth/managers/simple/openapi/__init__.py
similarity index 100%
rename from airflow/auth/managers/simple/openapi/__init__.py
rename to airflow/api_fastapi/auth/managers/simple/openapi/__init__.py
diff --git a/airflow/auth/managers/simple/openapi/v1-generated.yaml
b/airflow/api_fastapi/auth/managers/simple/openapi/v1-generated.yaml
similarity index 100%
rename from airflow/auth/managers/simple/openapi/v1-generated.yaml
rename to airflow/api_fastapi/auth/managers/simple/openapi/v1-generated.yaml
diff --git a/airflow/auth/managers/simple/routes/__init__.py
b/airflow/api_fastapi/auth/managers/simple/routes/__init__.py
similarity index 100%
rename from airflow/auth/managers/simple/routes/__init__.py
rename to airflow/api_fastapi/auth/managers/simple/routes/__init__.py
diff --git a/airflow/auth/managers/simple/routes/login.py
b/airflow/api_fastapi/auth/managers/simple/routes/login.py
similarity index 91%
rename from airflow/auth/managers/simple/routes/login.py
rename to airflow/api_fastapi/auth/managers/simple/routes/login.py
index 9ea0f9287bd..2a4360cd4b1 100644
--- a/airflow/auth/managers/simple/routes/login.py
+++ b/airflow/api_fastapi/auth/managers/simple/routes/login.py
@@ -19,10 +19,10 @@ from __future__ import annotations
from fastapi import status
+from airflow.api_fastapi.auth.managers.simple.datamodels.login import
LoginBody, LoginResponse
+from airflow.api_fastapi.auth.managers.simple.services.login import
SimpleAuthManagerLogin
from airflow.api_fastapi.common.router import AirflowRouter
from airflow.api_fastapi.core_api.openapi.exceptions import
create_openapi_http_exception_doc
-from airflow.auth.managers.simple.datamodels.login import LoginBody,
LoginResponse
-from airflow.auth.managers.simple.services.login import SimpleAuthManagerLogin
from airflow.configuration import conf
login_router = AirflowRouter(tags=["SimpleAuthManagerLogin"])
diff --git a/airflow/auth/managers/simple/services/__init__.py
b/airflow/api_fastapi/auth/managers/simple/services/__init__.py
similarity index 100%
rename from airflow/auth/managers/simple/services/__init__.py
rename to airflow/api_fastapi/auth/managers/simple/services/__init__.py
diff --git a/airflow/auth/managers/simple/services/login.py
b/airflow/api_fastapi/auth/managers/simple/services/login.py
similarity index 90%
rename from airflow/auth/managers/simple/services/login.py
rename to airflow/api_fastapi/auth/managers/simple/services/login.py
index 35953382147..fa5cfe19142 100644
--- a/airflow/auth/managers/simple/services/login.py
+++ b/airflow/api_fastapi/auth/managers/simple/services/login.py
@@ -20,9 +20,9 @@ from __future__ import annotations
from fastapi import HTTPException, status
from airflow.api_fastapi.app import get_auth_manager
-from airflow.auth.managers.simple.datamodels.login import LoginBody,
LoginResponse
-from airflow.auth.managers.simple.simple_auth_manager import SimpleAuthManager
-from airflow.auth.managers.simple.user import SimpleAuthManagerUser
+from airflow.api_fastapi.auth.managers.simple.datamodels.login import
LoginBody, LoginResponse
+from airflow.api_fastapi.auth.managers.simple.simple_auth_manager import
SimpleAuthManager
+from airflow.api_fastapi.auth.managers.simple.user import SimpleAuthManagerUser
from airflow.configuration import conf
diff --git a/airflow/auth/managers/simple/simple_auth_manager.py
b/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py
similarity index 94%
rename from airflow/auth/managers/simple/simple_auth_manager.py
rename to airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py
index e70500676a7..58f65c9cf22 100644
--- a/airflow/auth/managers/simple/simple_auth_manager.py
+++ b/airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py
@@ -32,14 +32,13 @@ from starlette.staticfiles import StaticFiles
from starlette.templating import Jinja2Templates
from termcolor import colored
-from airflow.auth.managers.base_auth_manager import BaseAuthManager
-from airflow.auth.managers.simple.user import SimpleAuthManagerUser
+from airflow.api_fastapi.auth.managers.base_auth_manager import BaseAuthManager
+from airflow.api_fastapi.auth.managers.simple.user import SimpleAuthManagerUser
from airflow.configuration import AIRFLOW_HOME, conf
-from airflow.settings import AIRFLOW_PATH
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
- from airflow.auth.managers.models.resource_details import (
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
+ from airflow.api_fastapi.auth.managers.models.resource_details import (
AccessView,
AssetDetails,
ConfigurationDetails,
@@ -218,13 +217,11 @@ class
SimpleAuthManager(BaseAuthManager[SimpleAuthManagerUser]):
This sub application, if specified, is mounted in the main FastAPI
application.
"""
- from airflow.auth.managers.simple.routes.login import login_router
+ from airflow.api_fastapi.auth.managers.simple.routes.login import
login_router
dev_mode = os.environ.get("DEV_MODE", False) == "true"
- directory = Path(AIRFLOW_PATH) / (
- "airflow/auth/managers/simple/ui/dev" if dev_mode else
"airflow/auth/managers/simple/ui/dist"
- )
- Path(directory).mkdir(exist_ok=True)
+ directory = Path(__file__).parent.joinpath("ui", "dev" if dev_mode
else "dist")
+ directory.mkdir(exist_ok=True)
templates = Jinja2Templates(directory=directory)
diff --git a/airflow/auth/managers/simple/ui/dev/index.html
b/airflow/api_fastapi/auth/managers/simple/ui/dev/index.html
similarity index 100%
rename from airflow/auth/managers/simple/ui/dev/index.html
rename to airflow/api_fastapi/auth/managers/simple/ui/dev/index.html
diff --git a/airflow/auth/managers/simple/ui/index.html
b/airflow/api_fastapi/auth/managers/simple/ui/index.html
similarity index 100%
rename from airflow/auth/managers/simple/ui/index.html
rename to airflow/api_fastapi/auth/managers/simple/ui/index.html
diff --git a/airflow/auth/managers/simple/ui/openapi-gen/queries/common.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/common.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/queries/common.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/common.ts
diff --git a/airflow/auth/managers/simple/ui/openapi-gen/queries/index.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/index.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/queries/index.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/index.ts
diff --git
a/airflow/auth/managers/simple/ui/openapi-gen/queries/infiniteQueries.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/infiniteQueries.ts
similarity index 100%
rename from
airflow/auth/managers/simple/ui/openapi-gen/queries/infiniteQueries.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/infiniteQueries.ts
diff --git a/airflow/auth/managers/simple/ui/openapi-gen/queries/prefetch.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/prefetch.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/queries/prefetch.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/prefetch.ts
diff --git a/airflow/auth/managers/simple/ui/openapi-gen/queries/queries.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/queries.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/queries/queries.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/queries.ts
diff --git a/airflow/auth/managers/simple/ui/openapi-gen/queries/suspense.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/suspense.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/queries/suspense.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/suspense.ts
diff --git
a/airflow/auth/managers/simple/ui/openapi-gen/requests/core/ApiError.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiError.ts
similarity index 100%
rename from
airflow/auth/managers/simple/ui/openapi-gen/requests/core/ApiError.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiError.ts
diff --git
a/airflow/auth/managers/simple/ui/openapi-gen/requests/core/ApiRequestOptions.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiRequestOptions.ts
similarity index 100%
rename from
airflow/auth/managers/simple/ui/openapi-gen/requests/core/ApiRequestOptions.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiRequestOptions.ts
diff --git
a/airflow/auth/managers/simple/ui/openapi-gen/requests/core/ApiResult.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiResult.ts
similarity index 100%
rename from
airflow/auth/managers/simple/ui/openapi-gen/requests/core/ApiResult.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiResult.ts
diff --git
a/airflow/auth/managers/simple/ui/openapi-gen/requests/core/CancelablePromise.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/CancelablePromise.ts
similarity index 100%
rename from
airflow/auth/managers/simple/ui/openapi-gen/requests/core/CancelablePromise.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/CancelablePromise.ts
diff --git
a/airflow/auth/managers/simple/ui/openapi-gen/requests/core/OpenAPI.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/OpenAPI.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/requests/core/OpenAPI.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/OpenAPI.ts
diff --git
a/airflow/auth/managers/simple/ui/openapi-gen/requests/core/request.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/request.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/requests/core/request.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/request.ts
diff --git a/airflow/auth/managers/simple/ui/openapi-gen/requests/index.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/index.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/requests/index.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/index.ts
diff --git
a/airflow/auth/managers/simple/ui/openapi-gen/requests/schemas.gen.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/schemas.gen.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/requests/schemas.gen.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/schemas.gen.ts
diff --git
a/airflow/auth/managers/simple/ui/openapi-gen/requests/services.gen.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/services.gen.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/requests/services.gen.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/services.gen.ts
diff --git a/airflow/auth/managers/simple/ui/openapi-gen/requests/types.gen.ts
b/airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/types.gen.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/openapi-gen/requests/types.gen.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/types.gen.ts
diff --git a/airflow/auth/managers/simple/ui/package-lock.json
b/airflow/api_fastapi/auth/managers/simple/ui/package-lock.json
similarity index 100%
rename from airflow/auth/managers/simple/ui/package-lock.json
rename to airflow/api_fastapi/auth/managers/simple/ui/package-lock.json
diff --git a/airflow/auth/managers/simple/ui/package.json
b/airflow/api_fastapi/auth/managers/simple/ui/package.json
similarity index 100%
rename from airflow/auth/managers/simple/ui/package.json
rename to airflow/api_fastapi/auth/managers/simple/ui/package.json
diff --git a/airflow/auth/managers/simple/ui/pnpm-lock.yaml
b/airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml
similarity index 100%
rename from airflow/auth/managers/simple/ui/pnpm-lock.yaml
rename to airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml
diff --git a/airflow/auth/managers/simple/ui/src/login/Login.test.tsx
b/airflow/api_fastapi/auth/managers/simple/ui/src/login/Login.test.tsx
similarity index 100%
rename from airflow/auth/managers/simple/ui/src/login/Login.test.tsx
rename to airflow/api_fastapi/auth/managers/simple/ui/src/login/Login.test.tsx
diff --git a/airflow/auth/managers/simple/ui/src/login/Login.tsx
b/airflow/api_fastapi/auth/managers/simple/ui/src/login/Login.tsx
similarity index 100%
rename from airflow/auth/managers/simple/ui/src/login/Login.tsx
rename to airflow/api_fastapi/auth/managers/simple/ui/src/login/Login.tsx
diff --git a/airflow/auth/managers/simple/ui/src/login/LoginForm.tsx
b/airflow/api_fastapi/auth/managers/simple/ui/src/login/LoginForm.tsx
similarity index 100%
rename from airflow/auth/managers/simple/ui/src/login/LoginForm.tsx
rename to airflow/api_fastapi/auth/managers/simple/ui/src/login/LoginForm.tsx
diff --git a/airflow/auth/managers/simple/ui/src/main.tsx
b/airflow/api_fastapi/auth/managers/simple/ui/src/main.tsx
similarity index 100%
rename from airflow/auth/managers/simple/ui/src/main.tsx
rename to airflow/api_fastapi/auth/managers/simple/ui/src/main.tsx
diff --git a/airflow/auth/managers/simple/ui/src/queries/useCreateToken.ts
b/airflow/api_fastapi/auth/managers/simple/ui/src/queries/useCreateToken.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/src/queries/useCreateToken.ts
rename to
airflow/api_fastapi/auth/managers/simple/ui/src/queries/useCreateToken.ts
diff --git a/airflow/auth/managers/simple/ui/src/queryClient.ts
b/airflow/api_fastapi/auth/managers/simple/ui/src/queryClient.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/src/queryClient.ts
rename to airflow/api_fastapi/auth/managers/simple/ui/src/queryClient.ts
diff --git a/airflow/auth/managers/simple/ui/src/router.tsx
b/airflow/api_fastapi/auth/managers/simple/ui/src/router.tsx
similarity index 100%
rename from airflow/auth/managers/simple/ui/src/router.tsx
rename to airflow/api_fastapi/auth/managers/simple/ui/src/router.tsx
diff --git a/airflow/auth/managers/simple/ui/src/test-utils.tsx
b/airflow/api_fastapi/auth/managers/simple/ui/src/test-utils.tsx
similarity index 100%
rename from airflow/auth/managers/simple/ui/src/test-utils.tsx
rename to airflow/api_fastapi/auth/managers/simple/ui/src/test-utils.tsx
diff --git a/airflow/auth/managers/simple/ui/tests-setup.ts
b/airflow/api_fastapi/auth/managers/simple/ui/tests-setup.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/tests-setup.ts
rename to airflow/api_fastapi/auth/managers/simple/ui/tests-setup.ts
diff --git a/airflow/auth/managers/simple/ui/vite.config.ts
b/airflow/api_fastapi/auth/managers/simple/ui/vite.config.ts
similarity index 100%
rename from airflow/auth/managers/simple/ui/vite.config.ts
rename to airflow/api_fastapi/auth/managers/simple/ui/vite.config.ts
diff --git a/airflow/auth/managers/simple/user.py
b/airflow/api_fastapi/auth/managers/simple/user.py
similarity index 95%
rename from airflow/auth/managers/simple/user.py
rename to airflow/api_fastapi/auth/managers/simple/user.py
index f4591b0b1c7..83987fe593b 100644
--- a/airflow/auth/managers/simple/user.py
+++ b/airflow/api_fastapi/auth/managers/simple/user.py
@@ -16,7 +16,7 @@
# under the License.
from __future__ import annotations
-from airflow.auth.managers.models.base_user import BaseUser
+from airflow.api_fastapi.auth.managers.models.base_user import BaseUser
class SimpleAuthManagerUser(BaseUser):
diff --git a/airflow/auth/managers/utils/__init__.py
b/airflow/api_fastapi/auth/managers/utils/__init__.py
similarity index 100%
rename from airflow/auth/managers/utils/__init__.py
rename to airflow/api_fastapi/auth/managers/utils/__init__.py
diff --git a/airflow/auth/managers/utils/fab.py
b/airflow/api_fastapi/auth/managers/utils/fab.py
similarity index 95%
rename from airflow/auth/managers/utils/fab.py
rename to airflow/api_fastapi/auth/managers/utils/fab.py
index 0f2bc7c46e6..82a1c9344ba 100644
--- a/airflow/auth/managers/utils/fab.py
+++ b/airflow/api_fastapi/auth/managers/utils/fab.py
@@ -28,7 +28,7 @@ from airflow.security.permissions import (
)
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
# Convert methods to FAB action name
_MAP_METHOD_NAME_TO_FAB_ACTION_NAME: dict[ResourceMethod, str] = {
diff --git a/airflow/api_fastapi/core_api/routes/public/dag_parsing.py
b/airflow/api_fastapi/core_api/routes/public/dag_parsing.py
index da85534cc08..f5b7f2c3593 100644
--- a/airflow/api_fastapi/core_api/routes/public/dag_parsing.py
+++ b/airflow/api_fastapi/core_api/routes/public/dag_parsing.py
@@ -23,16 +23,16 @@ from fastapi import Depends, HTTPException, Request, status
from itsdangerous import BadSignature, URLSafeSerializer
from sqlalchemy import select
+from airflow.api_fastapi.auth.managers.models.resource_details import
DagDetails
from airflow.api_fastapi.common.db.common import SessionDep
from airflow.api_fastapi.common.router import AirflowRouter
from airflow.api_fastapi.core_api.openapi.exceptions import
create_openapi_http_exception_doc
from airflow.api_fastapi.logging.decorators import action_logging
-from airflow.auth.managers.models.resource_details import DagDetails
from airflow.models.dag import DagModel
from airflow.models.dagbag import DagPriorityParsingRequest
if TYPE_CHECKING:
- from airflow.auth.managers.models.batch_apis import IsAuthorizedDagRequest
+ from airflow.api_fastapi.auth.managers.models.batch_apis import
IsAuthorizedDagRequest
dag_parsing_router = AirflowRouter(tags=["DAG Parsing"],
prefix="/parseDagFile/{file_token}")
diff --git a/airflow/api_fastapi/core_api/security.py
b/airflow/api_fastapi/core_api/security.py
index a8837a93c42..54c7c728919 100644
--- a/airflow/api_fastapi/core_api/security.py
+++ b/airflow/api_fastapi/core_api/security.py
@@ -24,8 +24,8 @@ from fastapi.security import OAuth2PasswordBearer
from jwt import ExpiredSignatureError, InvalidTokenError
from airflow.api_fastapi.app import get_auth_manager
-from airflow.auth.managers.models.base_user import BaseUser
-from airflow.auth.managers.models.resource_details import (
+from airflow.api_fastapi.auth.managers.models.base_user import BaseUser
+from airflow.api_fastapi.auth.managers.models.resource_details import (
AssetDetails,
ConfigurationDetails,
ConnectionDetails,
@@ -38,7 +38,7 @@ from airflow.configuration import conf
from airflow.utils.jwt_signer import JWTSigner, get_signing_key
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
diff --git a/airflow/api_fastapi/logging/decorators.py
b/airflow/api_fastapi/logging/decorators.py
index d9e213f3704..bb3b1abc430 100644
--- a/airflow/api_fastapi/logging/decorators.py
+++ b/airflow/api_fastapi/logging/decorators.py
@@ -25,9 +25,9 @@ import pendulum
from fastapi import Depends, Request
from pendulum.parsing.exceptions import ParserError
+from airflow.api_fastapi.auth.managers.models.base_user import BaseUser
from airflow.api_fastapi.common.db.common import SessionDep
from airflow.api_fastapi.core_api.security import
get_user_with_exception_handling
-from airflow.auth.managers.models.base_user import BaseUser
from airflow.models import Log
from airflow.sdk.execution_time import secrets_masker
diff --git a/airflow/configuration.py b/airflow/configuration.py
index aebfdecf708..4fb977f441b 100644
--- a/airflow/configuration.py
+++ b/airflow/configuration.py
@@ -53,7 +53,7 @@ from airflow.utils.providers_configuration_loader import
providers_configuration
from airflow.utils.weight_rule import WeightRule
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import BaseAuthManager
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
BaseAuthManager
from airflow.secrets import BaseSecretsBackend
log = logging.getLogger(__name__)
diff --git a/clients/python/test_python_client.py
b/clients/python/test_python_client.py
index dff09b65822..0f4de597782 100644
--- a/clients/python/test_python_client.py
+++ b/clients/python/test_python_client.py
@@ -34,7 +34,7 @@ import airflow_client.client
import pytest
from airflow.api_fastapi.app import create_app
-from airflow.auth.managers.simple.datamodels.login import LoginBody
+from airflow.api_fastapi.auth.managers.simple.datamodels.login import LoginBody
from airflow.providers.fab.auth_manager.api_fastapi.services.login import
FABAuthManagerLogin
try:
@@ -56,7 +56,7 @@ from airflow_client.client.model.dag_run import DAGRun
# appropriate AuthManager.
# This is defined in the `[api]` section of your `airflow.cfg`:
#
-# auth_manager =
airflow.auth.managers.simple.simple_auth_manager.SimpleAuthManager
+# auth_manager =
airflow.api_fastapi.auth.managers.simple.simple_auth_manager.SimpleAuthManager
#
# Make sure that your user/name are configured properly - using the
user/password that has admin
# privileges in Airflow
diff --git a/codecov.yml b/codecov.yml
index 50cf720fcb4..162fec2fb99 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -111,6 +111,6 @@ ignore:
- "airflow/migrations"
- "airflow/providers/**/example_dags"
- "airflow/ui/node_modules"
- - "airflow/auth/managers/simple/ui/node_modules"
+ - "airflow/api_fastapi/auth/managers/simple/ui/node_modules"
comment: false
diff --git a/contributing-docs/08_static_code_checks.rst
b/contributing-docs/08_static_code_checks.rst
index ee632fefab7..70f966b01c3 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -348,8 +348,7 @@ require Breeze Docker image to be built locally.
+-----------------------------------------------------------+--------------------------------------------------------+---------+
| trailing-whitespace | Remove trailing
whitespace at end of line | |
+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| ts-compile-format-lint-ui | * Compile /
format / lint UI | * |
-| | * Compile /
format / lint UI | |
+| ts-compile-format-lint-ui | Compile / format
/ lint UI | * |
+-----------------------------------------------------------+--------------------------------------------------------+---------+
| update-black-version | Update black
versions everywhere (manual) | |
+-----------------------------------------------------------+--------------------------------------------------------+---------+
diff --git
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 37b33a24e71..3b12933173e 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -260,7 +260,7 @@ airflow/git_version
# Exclude mode_modules pulled by "yarn" for compilation of www files generated
by NPM
airflow/www/node_modules
airflow/ui/node_modules
-airflow/auth/managers/simple/ui/node_modules
+airflow/api_fastapi/auth/managers/simple/ui/node_modules
# Exclude link to docs
airflow/www/static/docs
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 006d56fedc1..6a596a90f3d 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -156,7 +156,7 @@ CI_FILE_GROUP_MATCHES = HashableDict(
r"^airflow/.*\.[jt]sx?",
r"^airflow/.*\.lock",
r"^airflow/ui/.*\.yaml$",
- r"^airflow/auth/managers/simple/ui/.*\.yaml$",
+ r"^airflow/api_fastapi/auth/managers/simple/ui/.*\.yaml$",
],
FileGroupForCi.API_FILES: [
r"^airflow/api/",
@@ -192,7 +192,7 @@ CI_FILE_GROUP_MATCHES = HashableDict(
r"^chart/values\.schema\.json",
r"^chart/values\.json",
],
- FileGroupForCi.UI_FILES: [r"^airflow/ui/",
r"^airflow/auth/managers/simple/ui/"],
+ FileGroupForCi.UI_FILES: [r"^airflow/ui/",
r"^airflow/api_fastapi/auth/managers/simple/ui/"],
FileGroupForCi.KUBERNETES_FILES: [
r"^chart",
r"^kubernetes_tests",
diff --git a/dev/breeze/tests/test_pytest_args_for_test_types.py
b/dev/breeze/tests/test_pytest_args_for_test_types.py
index 4500768a568..741e4ab0fb7 100644
--- a/dev/breeze/tests/test_pytest_args_for_test_types.py
+++ b/dev/breeze/tests/test_pytest_args_for_test_types.py
@@ -157,7 +157,6 @@ def _find_all_integration_folders() -> list[str]:
"Other",
[
"tests/assets",
- "tests/auth",
"tests/callbacks",
"tests/charts",
"tests/cluster_policies",
diff --git a/newsfragments/41348.significant.rst
b/newsfragments/41348.significant.rst
index f7637f3676e..0ec8044d4cc 100644
--- a/newsfragments/41348.significant.rst
+++ b/newsfragments/41348.significant.rst
@@ -99,11 +99,11 @@ Rename ``Dataset`` as ``Asset``
* Rename decorator ``requires_access_dataset`` as
``requires_access_asset``
- * In module ``airflow.auth.managers.models.resource_details``
+ * In module ``airflow.api_fastapi.auth.managers.models.resource_details``
* Rename class ``DatasetDetails`` as ``AssetDetails``
- * In module ``airflow.auth.managers.base_auth_manager``
+ * In module ``airflow.api_fastapi.auth.managers.base_auth_manager``
* Rename function ``is_authorized_dataset`` as ``is_authorized_asset``
@@ -265,8 +265,8 @@ Rename ``Dataset`` as ``Asset``
* [ ] context key ``triggering_dataset_events`` →
``triggering_asset_events``
* [x] ``airflow.api_connexion.security.requires_access_dataset`` →
``airflow.api_connexion.security.requires_access_asset``
- * [x] ``airflow.auth.managers.base_auth_manager.is_authorized_dataset``
→ ``airflow.auth.managers.base_auth_manager.is_authorized_asset``
- * [x] ``airflow.auth.managers.models.resource_details.DatasetDetails`` →
``airflow.auth.managers.models.resource_details.AssetDetails``
+ * [ ] ``airflow.auth.managers.base_auth_manager.is_authorized_dataset``
→ ``airflow.api_fastapi.auth.managers.base_auth_manager.is_authorized_asset``
+ * [ ] ``airflow.auth.managers.models.resource_details.DatasetDetails`` →
``airflow.api_fastapi.auth.managers.models.resource_details.AssetDetails``
* [x] ``airflow.lineage.hook.DatasetLineageInfo`` →
``airflow.lineage.hook.AssetLineageInfo``
* [x] ``airflow.security.permissions.RESOURCE_DATASET`` →
``airflow.security.permissions.RESOURCE_ASSET``
* [x] ``airflow.www.auth.has_access_dataset`` →
``airflow.www.auth.has_access_dataset.has_access_asset``
diff --git
a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/avp/entities.py
b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/avp/entities.py
index 4db9aed3402..54a43c51572 100644
---
a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/avp/entities.py
+++
b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/avp/entities.py
@@ -20,7 +20,7 @@ from enum import Enum
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
AVP_PREFIX_ENTITIES = "Airflow::"
diff --git
a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/avp/facade.py
b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/avp/facade.py
index 075214f3845..9f0d25ad0e3 100644
---
a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/avp/facade.py
+++
b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/avp/facade.py
@@ -36,7 +36,7 @@ from airflow.utils.helpers import prune_dict
from airflow.utils.log.logging_mixin import LoggingMixin
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
from airflow.providers.amazon.aws.auth_manager.user import
AwsAuthManagerUser
diff --git
a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/aws_auth_manager.py
b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/aws_auth_manager.py
index 04b547b2979..2632422a1cb 100644
---
a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/aws_auth_manager.py
+++
b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/aws_auth_manager.py
@@ -24,8 +24,8 @@ from typing import TYPE_CHECKING, Any, cast
from fastapi import FastAPI
-from airflow.auth.managers.base_auth_manager import BaseAuthManager
-from airflow.auth.managers.models.resource_details import (
+from airflow.api_fastapi.auth.managers.base_auth_manager import BaseAuthManager
+from airflow.api_fastapi.auth.managers.models.resource_details import (
AccessView,
ConnectionDetails,
DagAccessEntity,
@@ -48,14 +48,14 @@ from airflow.providers.amazon.aws.auth_manager.user import
AwsAuthManagerUser
from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
- from airflow.auth.managers.models.batch_apis import (
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
+ from airflow.api_fastapi.auth.managers.models.batch_apis import (
IsAuthorizedConnectionRequest,
IsAuthorizedDagRequest,
IsAuthorizedPoolRequest,
IsAuthorizedVariableRequest,
)
- from airflow.auth.managers.models.resource_details import AssetDetails,
ConfigurationDetails
+ from airflow.api_fastapi.auth.managers.models.resource_details import
AssetDetails, ConfigurationDetails
class AwsAuthManager(BaseAuthManager[AwsAuthManagerUser]):
diff --git
a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/user.py
b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/user.py
index da3dab8ce5c..b4cc9845252 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/user.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/user.py
@@ -19,11 +19,14 @@ from __future__ import annotations
from airflow.exceptions import AirflowOptionalProviderFeatureException
try:
- from airflow.auth.managers.models.base_user import BaseUser
+ from airflow.api_fastapi.auth.managers.models.base_user import BaseUser
except ImportError:
- raise AirflowOptionalProviderFeatureException(
- "Failed to import BaseUser. This feature is only available in Airflow
versions >= 2.8.0"
- )
+ try:
+ from airflow.auth.managers.models.base_user import BaseUser # type:
ignore[no-redef]
+ except ImportError:
+ raise AirflowOptionalProviderFeatureException(
+ "Failed to import BaseUser. This feature is only available in
Airflow versions >= 2.8.0"
+ ) from None
class AwsAuthManagerUser(BaseUser):
diff --git
a/providers/amazon/tests/unit/amazon/aws/auth_manager/avp/test_facade.py
b/providers/amazon/tests/unit/amazon/aws/auth_manager/avp/test_facade.py
index 92b840d2f33..26a8e7e12f0 100644
--- a/providers/amazon/tests/unit/amazon/aws/auth_manager/avp/test_facade.py
+++ b/providers/amazon/tests/unit/amazon/aws/auth_manager/avp/test_facade.py
@@ -32,7 +32,7 @@ from airflow.utils.helpers import prune_dict
from tests_common.test_utils.config import conf_vars
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
REGION_NAME = "us-east-1"
AVP_POLICY_STORE_ID = "store_id"
diff --git
a/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
b/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
index 45935e4b686..32811431176 100644
---
a/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
+++
b/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
@@ -26,7 +26,7 @@ from airflow.providers.amazon.version_compat import
AIRFLOW_V_3_0_PLUS
if not AIRFLOW_V_3_0_PLUS:
pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0",
allow_module_level=True)
-from airflow.auth.managers.models.resource_details import (
+from airflow.api_fastapi.auth.managers.models.resource_details import (
AccessView,
ConfigurationDetails,
ConnectionDetails,
@@ -42,8 +42,8 @@ from airflow.providers.amazon.aws.auth_manager.user import
AwsAuthManagerUser
from tests_common.test_utils.config import conf_vars
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
- from airflow.auth.managers.models.resource_details import AssetDetails
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
+ from airflow.api_fastapi.auth.managers.models.resource_details import
AssetDetails
else:
from airflow.providers.common.compat.assets import AssetDetails
diff --git
a/providers/common/compat/src/airflow/providers/common/compat/assets/__init__.py
b/providers/common/compat/src/airflow/providers/common/compat/assets/__init__.py
index 6fc96e6797c..01e218d9208 100644
---
a/providers/common/compat/src/airflow/providers/common/compat/assets/__init__.py
+++
b/providers/common/compat/src/airflow/providers/common/compat/assets/__init__.py
@@ -25,12 +25,12 @@ from airflow.providers.common.compat.version_compat import (
)
if TYPE_CHECKING:
- from airflow.auth.managers.models.resource_details import AssetDetails
+ from airflow.api_fastapi.auth.managers.models.resource_details import
AssetDetails
from airflow.models.asset import expand_alias_to_assets
from airflow.sdk.definitions.asset import Asset, AssetAlias, AssetAll,
AssetAny
else:
if AIRFLOW_V_3_0_PLUS:
- from airflow.auth.managers.models.resource_details import AssetDetails
+ from airflow.api_fastapi.auth.managers.models.resource_details import
AssetDetails
from airflow.models.asset import expand_alias_to_assets
from airflow.sdk.definitions.asset import Asset, AssetAlias, AssetAll,
AssetAny
else:
diff --git
a/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py
b/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py
index aa7a2627c22..3dc8646b9b3 100644
---
a/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py
+++
b/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py
@@ -62,7 +62,10 @@ REPAIR_WAIT_DELAY =
os.getenv("DATABRICKS_REPAIR_WAIT_DELAY", 0.5)
def get_auth_decorator():
- from airflow.auth.managers.models.resource_details import DagAccessEntity
+ if AIRFLOW_V_3_0_PLUS:
+ from airflow.api_fastapi.auth.managers.models.resource_details import
DagAccessEntity
+ else:
+ from airflow.auth.managers.models.resource_details import
DagAccessEntity
return auth.has_access_dag("POST", DagAccessEntity.RUN)
diff --git
a/providers/edge/src/airflow/providers/edge/plugins/edge_executor_plugin.py
b/providers/edge/src/airflow/providers/edge/plugins/edge_executor_plugin.py
index f896a0506b8..1158a28e226 100644
--- a/providers/edge/src/airflow/providers/edge/plugins/edge_executor_plugin.py
+++ b/providers/edge/src/airflow/providers/edge/plugins/edge_executor_plugin.py
@@ -27,7 +27,6 @@ from flask_appbuilder import BaseView, expose
from markupsafe import Markup
from sqlalchemy import select
-from airflow.auth.managers.models.resource_details import AccessView
from airflow.configuration import conf
from airflow.exceptions import AirflowConfigException
from airflow.models.taskinstance import TaskInstanceState
@@ -36,9 +35,12 @@ from airflow.providers.edge.version_compat import
AIRFLOW_V_3_0_PLUS
from airflow.utils.state import State
if AIRFLOW_V_3_0_PLUS:
+ from airflow.api_fastapi.auth.managers.models.resource_details import
AccessView
from airflow.providers.fab.www.auth import has_access_view
+
else:
- from airflow.www.auth import has_access_view # type: ignore
+ from airflow.auth.managers.models.resource_details import AccessView #
type: ignore[no-redef]
+ from airflow.www.auth import has_access_view # type: ignore[no-redef]
from airflow.utils.session import NEW_SESSION, provide_session
from airflow.utils.yaml import safe_load
diff --git
a/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py
b/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py
index edf92568399..3955ac45895 100644
---
a/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py
+++
b/providers/fab/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py
@@ -32,7 +32,7 @@ from airflow.providers.fab.auth_manager.fab_auth_manager
import FabAuthManager
from airflow.utils.net import getfqdn
if TYPE_CHECKING:
- from airflow.auth.managers.models.base_user import BaseUser
+ from airflow.api_fastapi.auth.managers.models.base_user import BaseUser
log = logging.getLogger(__name__)
diff --git
a/providers/fab/src/airflow/providers/fab/auth_manager/fab_auth_manager.py
b/providers/fab/src/airflow/providers/fab/auth_manager/fab_auth_manager.py
index a0ba07feffa..e881815569a 100644
--- a/providers/fab/src/airflow/providers/fab/auth_manager/fab_auth_manager.py
+++ b/providers/fab/src/airflow/providers/fab/auth_manager/fab_auth_manager.py
@@ -31,8 +31,8 @@ from sqlalchemy.orm import Session, joinedload
from starlette.middleware.wsgi import WSGIMiddleware
from airflow import __version__ as airflow_version
-from airflow.auth.managers.base_auth_manager import BaseAuthManager
-from airflow.auth.managers.models.resource_details import (
+from airflow.api_fastapi.auth.managers.base_auth_manager import BaseAuthManager
+from airflow.api_fastapi.auth.managers.models.resource_details import (
AccessView,
ConfigurationDetails,
ConnectionDetails,
@@ -41,7 +41,10 @@ from airflow.auth.managers.models.resource_details import (
PoolDetails,
VariableDetails,
)
-from airflow.auth.managers.utils.fab import get_fab_action_from_method_map,
get_method_from_fab_action_map
+from airflow.api_fastapi.auth.managers.utils.fab import (
+ get_fab_action_from_method_map,
+ get_method_from_fab_action_map,
+)
from airflow.cli.cli_config import (
DefaultHelpParser,
GroupCommand,
@@ -90,7 +93,7 @@ from airflow.utils.session import NEW_SESSION,
create_session, provide_session
from airflow.utils.yaml import safe_load
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
from airflow.cli.cli_config import (
CLICommand,
)
diff --git
a/providers/fab/src/airflow/providers/fab/auth_manager/models/__init__.py
b/providers/fab/src/airflow/providers/fab/auth_manager/models/__init__.py
index 2587d7034d0..1a34c9b6884 100644
--- a/providers/fab/src/airflow/providers/fab/auth_manager/models/__init__.py
+++ b/providers/fab/src/airflow/providers/fab/auth_manager/models/__init__.py
@@ -44,7 +44,7 @@ from sqlalchemy import (
from sqlalchemy.orm import backref, declared_attr, registry, relationship
from airflow import __version__ as airflow_version
-from airflow.auth.managers.models.base_user import BaseUser
+from airflow.api_fastapi.auth.managers.models.base_user import BaseUser
from airflow.models.base import _get_schema, naming_convention
if TYPE_CHECKING:
diff --git
a/providers/fab/src/airflow/providers/fab/auth_manager/models/anonymous_user.py
b/providers/fab/src/airflow/providers/fab/auth_manager/models/anonymous_user.py
index 9afb2cdff63..b9abd5f1653 100644
---
a/providers/fab/src/airflow/providers/fab/auth_manager/models/anonymous_user.py
+++
b/providers/fab/src/airflow/providers/fab/auth_manager/models/anonymous_user.py
@@ -20,7 +20,7 @@ from __future__ import annotations
from flask import current_app
from flask_login import AnonymousUserMixin
-from airflow.auth.managers.models.base_user import BaseUser
+from airflow.api_fastapi.auth.managers.models.base_user import BaseUser
class AnonymousUser(AnonymousUserMixin, BaseUser):
diff --git
a/providers/fab/src/airflow/providers/fab/www/api_connexion/security.py
b/providers/fab/src/airflow/providers/fab/www/api_connexion/security.py
index b07acd776cf..2a4a67cdd9a 100644
--- a/providers/fab/src/airflow/providers/fab/www/api_connexion/security.py
+++ b/providers/fab/src/airflow/providers/fab/www/api_connexion/security.py
@@ -26,7 +26,7 @@ from airflow.providers.fab.www.airflow_flask_app import
AirflowApp
from airflow.providers.fab.www.api_connexion.exceptions import
PermissionDenied, Unauthenticated
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
T = TypeVar("T", bound=Callable)
diff --git a/providers/fab/src/airflow/providers/fab/www/auth.py
b/providers/fab/src/airflow/providers/fab/www/auth.py
index 1e45a03fc23..5ca881e1f88 100644
--- a/providers/fab/src/airflow/providers/fab/www/auth.py
+++ b/providers/fab/src/airflow/providers/fab/www/auth.py
@@ -31,7 +31,7 @@ from flask_appbuilder.const import (
)
from airflow.api_fastapi.app import get_auth_manager
-from airflow.auth.managers.models.resource_details import (
+from airflow.api_fastapi.auth.managers.models.resource_details import (
AccessView,
ConnectionDetails,
DagAccessEntity,
@@ -44,8 +44,8 @@ from airflow.providers.fab.www.utils import
get_fab_auth_manager
from airflow.utils.net import get_hostname
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
- from airflow.auth.managers.models.batch_apis import (
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
+ from airflow.api_fastapi.auth.managers.models.batch_apis import (
IsAuthorizedConnectionRequest,
IsAuthorizedDagRequest,
IsAuthorizedPoolRequest,
diff --git a/providers/fab/src/airflow/providers/fab/www/security_manager.py
b/providers/fab/src/airflow/providers/fab/www/security_manager.py
index 34a06d208e0..a20c1308eda 100644
--- a/providers/fab/src/airflow/providers/fab/www/security_manager.py
+++ b/providers/fab/src/airflow/providers/fab/www/security_manager.py
@@ -23,7 +23,7 @@ from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
from airflow.api_fastapi.app import get_auth_manager
-from airflow.auth.managers.utils.fab import (
+from airflow.api_fastapi.auth.managers.utils.fab import (
get_method_from_fab_action_map,
)
from airflow.providers.fab.www.utils import CustomSQLAInterface
diff --git a/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
b/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
index 45f200e09e5..4bcfb4722e8 100644
--- a/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
+++ b/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
@@ -31,7 +31,11 @@ from airflow.providers.standard.operators.empty import
EmptyOperator
from unit.fab.auth_manager.api_endpoints.api_connexion_utils import
create_user, delete_user
try:
- from airflow.auth.managers.models.resource_details import AccessView,
DagAccessEntity, DagDetails
+ from airflow.api_fastapi.auth.managers.models.resource_details import (
+ AccessView,
+ DagAccessEntity,
+ DagDetails,
+ )
except ImportError:
pass
@@ -63,7 +67,7 @@ from airflow.providers.fab.www.security.permissions import (
)
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
IS_AUTHORIZED_METHODS_SIMPLE = {
diff --git a/providers/fab/tests/unit/fab/auth_manager/test_security.py
b/providers/fab/tests/unit/fab/auth_manager/test_security.py
index 6f1486b0f65..159131dc111 100644
--- a/providers/fab/tests/unit/fab/auth_manager/test_security.py
+++ b/providers/fab/tests/unit/fab/auth_manager/test_security.py
@@ -133,19 +133,19 @@ def _delete_dag_model(dag_model, session,
security_manager):
def _can_read_dag(dag_id: str, user) -> bool:
- from airflow.auth.managers.models.resource_details import DagDetails
+ from airflow.api_fastapi.auth.managers.models.resource_details import
DagDetails
return get_auth_manager().is_authorized_dag(method="GET",
details=DagDetails(id=dag_id), user=user)
def _can_edit_dag(dag_id: str, user) -> bool:
- from airflow.auth.managers.models.resource_details import DagDetails
+ from airflow.api_fastapi.auth.managers.models.resource_details import
DagDetails
return get_auth_manager().is_authorized_dag(method="PUT",
details=DagDetails(id=dag_id), user=user)
def _can_delete_dag(dag_id: str, user) -> bool:
- from airflow.auth.managers.models.resource_details import DagDetails
+ from airflow.api_fastapi.auth.managers.models.resource_details import
DagDetails
return get_auth_manager().is_authorized_dag(method="DELETE",
details=DagDetails(id=dag_id), user=user)
@@ -243,7 +243,7 @@ def sample_dags(security_manager):
@pytest.fixture(scope="module")
def has_dag_perm(security_manager):
def _has_dag_perm(perm, dag_id, user):
- from airflow.auth.managers.models.resource_details import DagDetails
+ from airflow.api_fastapi.auth.managers.models.resource_details import
DagDetails
return get_auth_manager().is_authorized_dag(method=perm,
details=DagDetails(id=dag_id), user=user)
diff --git a/providers/fab/tests/unit/fab/www/test_auth.py
b/providers/fab/tests/unit/fab/www/test_auth.py
index cfd31e282be..2e0339c282c 100644
--- a/providers/fab/tests/unit/fab/www/test_auth.py
+++ b/providers/fab/tests/unit/fab/www/test_auth.py
@@ -22,7 +22,7 @@ from unittest.mock import Mock, patch
import pytest
import airflow.providers.fab.www.auth as auth
-from airflow.auth.managers.models.resource_details import DagAccessEntity
+from airflow.api_fastapi.auth.managers.models.resource_details import
DagAccessEntity
from airflow.models import Connection, Pool, Variable
from airflow.providers.fab.www import app as application
diff --git a/pyproject.toml b/pyproject.toml
index c8a3c37b2e3..e0fc8a7aa15 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -337,7 +337,6 @@ testing = ["dev", "providers.tests", "tests_common",
"tests"]
# Annotated is central for FastAPI dependency injection, skipping rules for
FastAPI folders.
"airflow/api_fastapi/*" = ["TC001", "TC002"]
"tests/api_fastapi/*" = ["T001", "TC002"]
-"airflow/auth/managers/simple/*" = ["TC001", "TC002"]
# Ignore pydoc style from these
"*.pyi" = ["D"]
diff --git a/scripts/ci/pre_commit/compile_ui_assets.py
b/scripts/ci/pre_commit/compile_ui_assets.py
index 26b9d5371d0..e31c1228f6d 100755
--- a/scripts/ci/pre_commit/compile_ui_assets.py
+++ b/scripts/ci/pre_commit/compile_ui_assets.py
@@ -35,7 +35,9 @@ AIRFLOW_SOURCES_PATH = Path(__file__).parents[3].resolve()
MAIN_UI_DIRECTORY = AIRFLOW_SOURCES_PATH / "airflow" / "ui"
MAIN_UI_HASH_FILE = AIRFLOW_SOURCES_PATH / ".build" / "ui" / "hash.txt"
-SIMPLE_AUTH_MANAGER_UI_DIRECTORY = AIRFLOW_SOURCES_PATH / "airflow" / "auth" /
"managers" / "simple" / "ui"
+SIMPLE_AUTH_MANAGER_UI_DIRECTORY = (
+ AIRFLOW_SOURCES_PATH / "airflow" / "api_fastapi" / "auth" / "managers" /
"simple" / "ui"
+)
SIMPLE_AUTH_MANAGER_UI_HASH_FILE = AIRFLOW_SOURCES_PATH / ".build" / "ui" /
"simple-auth-manager-hash.txt"
INTERNAL_SERVER_ERROR = "500 Internal Server Error"
diff --git a/scripts/cov/other_coverage.py b/scripts/cov/other_coverage.py
index 19a061557d7..84175e36df1 100644
--- a/scripts/cov/other_coverage.py
+++ b/scripts/cov/other_coverage.py
@@ -33,7 +33,6 @@ You can also compare the stats against those on
https://app.codecov.io/github/apache/airflow
(as it combines the coverage from all tests and so may be a bit higher).
- "airflow/auth",
"airflow/callbacks",
"airflow/config_templates",
"airflow/dag_processing",
diff --git a/scripts/in_container/run_update_fastapi_api_spec.py
b/scripts/in_container/run_update_fastapi_api_spec.py
index 925590b0ae2..ab5b1ce7d4d 100644
--- a/scripts/in_container/run_update_fastapi_api_spec.py
+++ b/scripts/in_container/run_update_fastapi_api_spec.py
@@ -16,26 +16,32 @@
# under the License.
from __future__ import annotations
+from pathlib import Path
from typing import TYPE_CHECKING
import yaml
from fastapi.openapi.utils import get_openapi
from airflow.api_fastapi.app import create_app
-from airflow.auth.managers.simple.simple_auth_manager import SimpleAuthManager
+from airflow.api_fastapi.auth.managers.simple import __file__ as
SIMPLE_AUTH_MANAGER_PATH
+from airflow.api_fastapi.auth.managers.simple.simple_auth_manager import
SimpleAuthManager
+from airflow.api_fastapi.core_api import __file__ as CORE_API_PATH
+from airflow.providers.fab.auth_manager.api_fastapi import __file__ as
FAB_AUTH_MANAGER_API_PATH
from airflow.providers.fab.auth_manager.fab_auth_manager import FabAuthManager
if TYPE_CHECKING:
from fastapi import FastAPI
-OPENAPI_SPEC_FILE = "airflow/api_fastapi/core_api/openapi/v1-generated.yaml"
-SIMPLE_AUTH_MANAGER_OPENAPI_SPEC_FILE =
"airflow/auth/managers/simple/openapi/v1-generated.yaml"
-FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE = (
-
"providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v1-generated.yaml"
+OPENAPI_SPEC_FILE = Path(CORE_API_PATH).parent.joinpath("openapi",
"v1-generated.yaml")
+SIMPLE_AUTH_MANAGER_OPENAPI_SPEC_FILE =
Path(SIMPLE_AUTH_MANAGER_PATH).parent.joinpath(
+ "openapi", "v1-generated.yaml"
+)
+FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE =
Path(FAB_AUTH_MANAGER_API_PATH).parent.joinpath(
+ "openapi", "v1-generated.yaml"
)
-def generate_file(app: FastAPI, file_path: str, prefix: str = ""):
+def generate_file(app: FastAPI, file_path: Path, prefix: str = ""):
# The persisted openapi spec will list all endpoints (public and ui), this
# is used for code generation.
for route in app.routes:
@@ -43,7 +49,7 @@ def generate_file(app: FastAPI, file_path: str, prefix: str =
""):
continue
route.__setattr__("include_in_schema", True)
- with open(file_path, "w+") as f:
+ with file_path.open("w+") as f:
openapi_schema = get_openapi(
title=app.title,
version=app.version,
diff --git a/tests/auth/__init__.py b/tests/api_fastapi/auth/__init__.py
similarity index 100%
rename from tests/auth/__init__.py
rename to tests/api_fastapi/auth/__init__.py
diff --git a/tests/auth/managers/__init__.py
b/tests/api_fastapi/auth/managers/__init__.py
similarity index 100%
rename from tests/auth/managers/__init__.py
rename to tests/api_fastapi/auth/managers/__init__.py
diff --git a/tests/auth/managers/simple/__init__.py
b/tests/api_fastapi/auth/managers/simple/__init__.py
similarity index 100%
rename from tests/auth/managers/simple/__init__.py
rename to tests/api_fastapi/auth/managers/simple/__init__.py
diff --git a/tests/auth/managers/simple/conftest.py
b/tests/api_fastapi/auth/managers/simple/conftest.py
similarity index 88%
rename from tests/auth/managers/simple/conftest.py
rename to tests/api_fastapi/auth/managers/simple/conftest.py
index 71ad84a81ff..94c72e92028 100644
--- a/tests/auth/managers/simple/conftest.py
+++ b/tests/api_fastapi/auth/managers/simple/conftest.py
@@ -21,8 +21,8 @@ from __future__ import annotations
import pytest
from fastapi.testclient import TestClient
-from airflow.auth.managers.simple.simple_auth_manager import SimpleAuthManager
-from airflow.auth.managers.simple.user import SimpleAuthManagerUser
+from airflow.api_fastapi.auth.managers.simple.simple_auth_manager import
SimpleAuthManager
+from airflow.api_fastapi.auth.managers.simple.user import SimpleAuthManagerUser
@pytest.fixture
diff --git a/tests/auth/managers/simple/routes/__init__.py
b/tests/api_fastapi/auth/managers/simple/routes/__init__.py
similarity index 100%
rename from tests/auth/managers/simple/routes/__init__.py
rename to tests/api_fastapi/auth/managers/simple/routes/__init__.py
diff --git a/tests/auth/managers/simple/routes/test_login.py
b/tests/api_fastapi/auth/managers/simple/routes/test_login.py
similarity index 91%
rename from tests/auth/managers/simple/routes/test_login.py
rename to tests/api_fastapi/auth/managers/simple/routes/test_login.py
index acf2a74bb60..2b42a4e854a 100644
--- a/tests/auth/managers/simple/routes/test_login.py
+++ b/tests/api_fastapi/auth/managers/simple/routes/test_login.py
@@ -22,7 +22,7 @@ from unittest.mock import patch
import pytest
-from airflow.auth.managers.simple.datamodels.login import LoginResponse
+from airflow.api_fastapi.auth.managers.simple.datamodels.login import
LoginResponse
TEST_USER_1 = "test1"
TEST_USER_2 = "test2"
@@ -36,7 +36,7 @@ class TestLogin:
TEST_USER_2,
],
)
- @patch("airflow.auth.managers.simple.routes.login.SimpleAuthManagerLogin")
+
@patch("airflow.api_fastapi.auth.managers.simple.routes.login.SimpleAuthManagerLogin")
def test_create_token(self, mock_simple_auth_manager_login, test_client,
auth_manager, test_user):
mock_simple_auth_manager_login.create_token.return_value =
LoginResponse(jwt_token="DUMMY_TOKEN")
@@ -62,7 +62,7 @@ class TestLogin:
TEST_USER_2,
],
)
- @patch("airflow.auth.managers.simple.routes.login.SimpleAuthManagerLogin")
+
@patch("airflow.api_fastapi.auth.managers.simple.routes.login.SimpleAuthManagerLogin")
def test_create_token_cli(self, mock_simple_auth_manager_login,
test_client, auth_manager, test_user):
mock_simple_auth_manager_login.create_token.return_value =
LoginResponse(jwt_token="DUMMY_TOKEN")
diff --git a/tests/auth/managers/simple/services/__init__.py
b/tests/api_fastapi/auth/managers/simple/services/__init__.py
similarity index 100%
rename from tests/auth/managers/simple/services/__init__.py
rename to tests/api_fastapi/auth/managers/simple/services/__init__.py
diff --git a/tests/auth/managers/simple/services/test_login.py
b/tests/api_fastapi/auth/managers/simple/services/test_login.py
similarity index 90%
rename from tests/auth/managers/simple/services/test_login.py
rename to tests/api_fastapi/auth/managers/simple/services/test_login.py
index 739825c88b4..bc785720292 100644
--- a/tests/auth/managers/simple/services/test_login.py
+++ b/tests/api_fastapi/auth/managers/simple/services/test_login.py
@@ -23,8 +23,8 @@ from unittest.mock import patch
import pytest
from fastapi import HTTPException
-from airflow.auth.managers.simple.datamodels.login import LoginBody,
LoginResponse
-from airflow.auth.managers.simple.services.login import SimpleAuthManagerLogin
+from airflow.api_fastapi.auth.managers.simple.datamodels.login import
LoginBody, LoginResponse
+from airflow.api_fastapi.auth.managers.simple.services.login import
SimpleAuthManagerLogin
from tests_common.test_utils.config import conf_vars
@@ -43,7 +43,7 @@ class TestLogin:
TEST_USER_2,
],
)
- @patch("airflow.auth.managers.simple.services.login.get_auth_manager")
+
@patch("airflow.api_fastapi.auth.managers.simple.services.login.get_auth_manager")
def test_create_token(self, get_auth_manager, auth_manager, test_user):
get_auth_manager.return_value = auth_manager
diff --git a/tests/auth/managers/simple/test_simple_auth_manager.py
b/tests/api_fastapi/auth/managers/simple/test_simple_auth_manager.py
similarity index 97%
rename from tests/auth/managers/simple/test_simple_auth_manager.py
rename to tests/api_fastapi/auth/managers/simple/test_simple_auth_manager.py
index 4b9227f8aa8..2ad1eff7fba 100644
--- a/tests/auth/managers/simple/test_simple_auth_manager.py
+++ b/tests/api_fastapi/auth/managers/simple/test_simple_auth_manager.py
@@ -20,8 +20,8 @@ import json
import pytest
-from airflow.auth.managers.models.resource_details import AccessView
-from airflow.auth.managers.simple.user import SimpleAuthManagerUser
+from airflow.api_fastapi.auth.managers.models.resource_details import
AccessView
+from airflow.api_fastapi.auth.managers.simple.user import SimpleAuthManagerUser
from tests_common.test_utils.config import conf_vars
diff --git a/tests/auth/managers/simple/test_user.py
b/tests/api_fastapi/auth/managers/simple/test_user.py
similarity index 100%
rename from tests/auth/managers/simple/test_user.py
rename to tests/api_fastapi/auth/managers/simple/test_user.py
diff --git a/tests/auth/managers/test_base_auth_manager.py
b/tests/api_fastapi/auth/managers/test_base_auth_manager.py
similarity index 94%
rename from tests/auth/managers/test_base_auth_manager.py
rename to tests/api_fastapi/auth/managers/test_base_auth_manager.py
index a7bb0322d01..3950fd49de0 100644
--- a/tests/auth/managers/test_base_auth_manager.py
+++ b/tests/api_fastapi/auth/managers/test_base_auth_manager.py
@@ -21,9 +21,9 @@ from unittest.mock import MagicMock, Mock, patch
import pytest
-from airflow.auth.managers.base_auth_manager import BaseAuthManager
-from airflow.auth.managers.models.base_user import BaseUser
-from airflow.auth.managers.models.resource_details import (
+from airflow.api_fastapi.auth.managers.base_auth_manager import BaseAuthManager
+from airflow.api_fastapi.auth.managers.models.base_user import BaseUser
+from airflow.api_fastapi.auth.managers.models.resource_details import (
ConnectionDetails,
DagDetails,
PoolDetails,
@@ -31,8 +31,8 @@ from airflow.auth.managers.models.resource_details import (
)
if TYPE_CHECKING:
- from airflow.auth.managers.base_auth_manager import ResourceMethod
- from airflow.auth.managers.models.resource_details import (
+ from airflow.api_fastapi.auth.managers.base_auth_manager import
ResourceMethod
+ from airflow.api_fastapi.auth.managers.models.resource_details import (
AccessView,
AssetDetails,
ConfigurationDetails,
@@ -139,7 +139,7 @@ class TestBaseAuthManager:
def test_get_fastapi_app_return_none(self, auth_manager):
assert auth_manager.get_fastapi_app() is None
- @patch("airflow.auth.managers.base_auth_manager.JWTSigner")
+ @patch("airflow.api_fastapi.auth.managers.base_auth_manager.JWTSigner")
@patch.object(EmptyAuthManager, "deserialize_user")
def test_get_user_from_token(self, mock_deserialize_user, mock_jwt_signer,
auth_manager):
token = "token"
@@ -156,7 +156,7 @@ class TestBaseAuthManager:
signer.verify_token.assert_called_once_with(token)
assert result == user
- @patch("airflow.auth.managers.base_auth_manager.JWTSigner")
+ @patch("airflow.api_fastapi.auth.managers.base_auth_manager.JWTSigner")
@patch.object(EmptyAuthManager, "serialize_user")
def test_get_jwt_token(self, mock_serialize_user, mock_jwt_signer,
auth_manager):
token = "token"
diff --git a/tests/api_fastapi/conftest.py b/tests/api_fastapi/conftest.py
index 10de8e46f12..052df24c18c 100644
--- a/tests/api_fastapi/conftest.py
+++ b/tests/api_fastapi/conftest.py
@@ -24,7 +24,7 @@ import pytest
from fastapi.testclient import TestClient
from airflow.api_fastapi.app import create_app
-from airflow.auth.managers.simple.user import SimpleAuthManagerUser
+from airflow.api_fastapi.auth.managers.simple.user import SimpleAuthManagerUser
from airflow.models import Connection
from airflow.models.dag_version import DagVersion
from airflow.models.serialized_dag import SerializedDagModel
@@ -34,7 +34,7 @@ from tests_common.test_utils.config import conf_vars
from tests_common.test_utils.db import clear_db_connections,
parse_and_sync_to_db
if TYPE_CHECKING:
- from airflow.auth.managers.simple.simple_auth_manager import
SimpleAuthManager
+ from airflow.api_fastapi.auth.managers.simple.simple_auth_manager import
SimpleAuthManager
@pytest.fixture
@@ -44,7 +44,7 @@ def test_client():
(
"core",
"auth_manager",
- ):
"airflow.auth.managers.simple.simple_auth_manager.SimpleAuthManager",
+ ):
"airflow.api_fastapi.auth.managers.simple.simple_auth_manager.SimpleAuthManager",
}
):
app = create_app()
@@ -76,7 +76,7 @@ def unauthorized_test_client():
(
"core",
"auth_manager",
- ):
"airflow.auth.managers.simple.simple_auth_manager.SimpleAuthManager",
+ ):
"airflow.api_fastapi.auth.managers.simple.simple_auth_manager.SimpleAuthManager",
}
):
app = create_app()
diff --git a/tests/api_fastapi/core_api/test_security.py
b/tests/api_fastapi/core_api/test_security.py
index 7824ecd171b..554506bb417 100644
--- a/tests/api_fastapi/core_api/test_security.py
+++ b/tests/api_fastapi/core_api/test_security.py
@@ -23,9 +23,9 @@ from fastapi import HTTPException
from jwt import ExpiredSignatureError, InvalidTokenError
from airflow.api_fastapi.app import create_app
+from airflow.api_fastapi.auth.managers.models.resource_details import
DagAccessEntity
+from airflow.api_fastapi.auth.managers.simple.user import SimpleAuthManagerUser
from airflow.api_fastapi.core_api.security import get_user, requires_access_dag
-from airflow.auth.managers.models.resource_details import DagAccessEntity
-from airflow.auth.managers.simple.user import SimpleAuthManagerUser
from tests_common.test_utils.config import conf_vars
@@ -38,7 +38,7 @@ class TestFastApiSecurity:
(
"core",
"auth_manager",
- ):
"airflow.auth.managers.simple.simple_auth_manager.SimpleAuthManager",
+ ):
"airflow.api_fastapi.auth.managers.simple.simple_auth_manager.SimpleAuthManager",
}
):
create_app()