apache-airflow-providers-edge3 1.6.0rc2__tar.gz → 2.0.0rc1__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_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/.pre-commit-config.yaml +2 -2
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/PKG-INFO +13 -13
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/README.rst +8 -8
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/architecture.rst +2 -2
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/changelog.rst +26 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/deployment.rst +2 -2
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/index.rst +9 -9
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/ui_plugin.rst +3 -3
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/provider.yaml +2 -1
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/pyproject.toml +5 -5
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/__init__.py +3 -3
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/cli/api_client.py +12 -23
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/cli/worker.py +1 -27
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/example_dags/integration_test.py +1 -1
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/example_dags/win_test.py +5 -2
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/executors/edge_executor.py +7 -63
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/models/edge_worker.py +1 -3
- apache_airflow_providers_edge3-2.0.0rc1/src/airflow/providers/edge3/plugins/edge_executor_plugin.py +118 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/package.json +1 -1
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/version_compat.py +0 -2
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/auth.py +11 -35
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/datamodels.py +3 -2
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/routes/health.py +1 -1
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/routes/jobs.py +10 -11
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/routes/logs.py +5 -8
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/routes/worker.py +5 -12
- {apache_airflow_providers_edge3-1.6.0rc2/src/airflow/providers/edge3/openapi → apache_airflow_providers_edge3-2.0.0rc1/src/airflow/providers/edge3/worker_api}/v2-edge-generated.yaml +1 -2
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/cli/test_worker.py +22 -46
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/executors/test_edge_executor.py +3 -175
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/plugins/test_edge_executor_plugin.py +5 -43
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/worker_api/routes/test_jobs.py +2 -1
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/worker_api/routes/test_worker.py +1 -1
- apache_airflow_providers_edge3-2.0.0rc1/www-hash.txt +1 -0
- apache_airflow_providers_edge3-1.6.0rc2/src/airflow/providers/edge3/openapi/__init__.py +0 -19
- apache_airflow_providers_edge3-1.6.0rc2/src/airflow/providers/edge3/openapi/edge_worker_api_v1.yaml +0 -808
- apache_airflow_providers_edge3-1.6.0rc2/src/airflow/providers/edge3/plugins/edge_executor_plugin.py +0 -297
- apache_airflow_providers_edge3-1.6.0rc2/src/airflow/providers/edge3/worker_api/routes/_v2_compat.py +0 -144
- apache_airflow_providers_edge3-1.6.0rc2/src/airflow/providers/edge3/worker_api/routes/_v2_routes.py +0 -237
- apache_airflow_providers_edge3-1.6.0rc2/www-hash.txt +0 -1
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/LICENSE +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/NOTICE +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/cli-ref.rst +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/commits.rst +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/conf.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/configurations-ref.rst +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/edge_executor.rst +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/img/distributed_architecture.svg +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/img/edge_package.svg +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/img/worker_hosts.png +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/install_on_windows.rst +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/installing-providers-from-sources.rst +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/security.rst +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/why_edge.rst +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/cli/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/cli/dataclasses.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/cli/edge_command.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/cli/signalling.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/example_dags/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/example_dags/win_notepad.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/executors/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/get_provider_info.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/models/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/models/edge_job.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/models/edge_logs.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/templates/edge_worker_hosts.html +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/templates/edge_worker_jobs.html +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/.gitignore +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/.prettierignore +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/.prettierrc +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/README.md +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/dist/main.d.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/dist/main.umd.cjs +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/eslint.config.js +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/index.html +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/queries/common.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/queries/ensureQueryData.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/queries/index.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/queries/infiniteQueries.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/queries/prefetch.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/queries/queries.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/queries/suspense.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/core/ApiError.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/core/ApiRequestOptions.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/core/ApiResult.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/core/CancelablePromise.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/core/OpenAPI.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/core/request.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/index.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/schemas.gen.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/services.gen.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/openapi-gen/requests/types.gen.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/pnpm-lock.yaml +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/AddQueueButton.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ErrorAlert.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/MaintenanceEditCommentButton.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/MaintenanceEnterButton.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/MaintenanceExitButton.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/RemoveQueueButton.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/SearchBar.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/StateBadge.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/StateIcon.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/WorkerDeleteButton.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/WorkerOperations.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/WorkerShutdownButton.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/WorkerStateBadge.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/WorkerStateIcon.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/Alert.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/CloseButton.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/InputGroup.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/ScrollToAnchor.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/Select/Content.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/Select/Item.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/Select/Root.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/Select/Trigger.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/Select/ValueText.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/Select/index.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/createToaster.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/components/ui/index.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/constants.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/context/colorMode/ColorModeProvider.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/context/colorMode/index.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/context/colorMode/useColorMode.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/dev.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/layouts/EdgeLayout.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/layouts/NavTabs.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/main.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/pages/JobsPage.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/pages/WorkerPage.tsx +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/res/README.md +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/res/cloud-computer-dark.svg +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/res/cloud-computer.svg +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/theme.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/utils/config.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/utils/index.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/utils/useContainerWidth.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/src/vite-env.d.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/testsSetup.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/tsconfig.app.json +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/tsconfig.json +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/tsconfig.lib.json +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/tsconfig.node.json +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/plugins/www/vite.config.ts +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/app.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/datamodels_ui.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/routes/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/src/airflow/providers/edge3/worker_api/routes/ui.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/conftest.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/cli/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/cli/test_api_client.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/cli/test_dataclasses.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/cli/test_edge_command.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/cli/test_signalling.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/executors/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/models/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/plugins/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/worker_api/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/worker_api/routes/__init__.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/worker_api/routes/test_health.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/worker_api/routes/test_logs.py +0 -0
- {apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/tests/unit/edge3/worker_api/routes/test_ui.py +0 -0
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
# under the License.
|
|
17
17
|
---
|
|
18
18
|
default_stages: [pre-commit, pre-push]
|
|
19
|
-
minimum_prek_version: '0.0
|
|
19
|
+
minimum_prek_version: '0.2.0'
|
|
20
20
|
default_language_version:
|
|
21
21
|
python: python3
|
|
22
22
|
node: 22.19.0
|
|
@@ -37,7 +37,7 @@ repos:
|
|
|
37
37
|
files: |
|
|
38
38
|
(?x)
|
|
39
39
|
^src/airflow/providers/edge3/plugins/www/.*\.(js|ts|tsx|yaml|css|json)$|
|
|
40
|
-
^src/airflow/providers/edge3/
|
|
40
|
+
^src/airflow/providers/edge3/worker_api/v2-edge-generated.yaml$
|
|
41
41
|
exclude: |
|
|
42
42
|
(?x)
|
|
43
43
|
^src/airflow/providers/edge3/plugins/www/node-modules/.*|
|
{apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-edge3
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0rc1
|
|
4
4
|
Summary: Provider package apache-airflow-providers-edge3 for Apache Airflow
|
|
5
5
|
Keywords: airflow-provider,edge3,airflow,integration
|
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
|
@@ -22,13 +22,13 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
22
22
|
Classifier: Topic :: System :: Monitoring
|
|
23
23
|
License-File: LICENSE
|
|
24
24
|
License-File: NOTICE
|
|
25
|
-
Requires-Dist: apache-airflow>=
|
|
26
|
-
Requires-Dist: apache-airflow-providers-common-compat>=1.10.
|
|
25
|
+
Requires-Dist: apache-airflow>=3.0.0,!=3.1.0
|
|
26
|
+
Requires-Dist: apache-airflow-providers-common-compat>=1.10.1rc1
|
|
27
27
|
Requires-Dist: pydantic>=2.11.0
|
|
28
28
|
Requires-Dist: retryhttp>=1.2.0,!=1.3.0
|
|
29
29
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
30
|
-
Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-edge3/
|
|
31
|
-
Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-edge3/
|
|
30
|
+
Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-edge3/2.0.0/changelog.html
|
|
31
|
+
Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-edge3/2.0.0
|
|
32
32
|
Project-URL: Mastodon, https://fosstodon.org/@airflow
|
|
33
33
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
|
34
34
|
Project-URL: Source Code, https://github.com/apache/airflow
|
|
@@ -59,7 +59,7 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
|
|
59
59
|
|
|
60
60
|
Package ``apache-airflow-providers-edge3``
|
|
61
61
|
|
|
62
|
-
Release: ``
|
|
62
|
+
Release: ``2.0.0``
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
Handle edge workers on remote sites via HTTP(s) connection and orchestrates work over distributed sites.
|
|
@@ -84,7 +84,7 @@ This is a provider package for ``edge3`` provider. All classes for this provider
|
|
|
84
84
|
are in ``airflow.providers.edge3`` python package.
|
|
85
85
|
|
|
86
86
|
You can find package information and changelog for the provider
|
|
87
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-edge3/
|
|
87
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-edge3/2.0.0/>`_.
|
|
88
88
|
|
|
89
89
|
Installation
|
|
90
90
|
------------
|
|
@@ -98,14 +98,14 @@ The package supports the following python versions: 3.10,3.11,3.12,3.13
|
|
|
98
98
|
Requirements
|
|
99
99
|
------------
|
|
100
100
|
|
|
101
|
-
==========================================
|
|
101
|
+
========================================== ===================
|
|
102
102
|
PIP package Version required
|
|
103
|
-
==========================================
|
|
104
|
-
``apache-airflow`` ``>=
|
|
105
|
-
``apache-airflow-providers-common-compat`` ``>=1.10.
|
|
103
|
+
========================================== ===================
|
|
104
|
+
``apache-airflow`` ``>=3.0.0,!=3.1.0``
|
|
105
|
+
``apache-airflow-providers-common-compat`` ``>=1.10.1``
|
|
106
106
|
``pydantic`` ``>=2.11.0``
|
|
107
107
|
``retryhttp`` ``>=1.2.0,!=1.3.0``
|
|
108
|
-
==========================================
|
|
108
|
+
========================================== ===================
|
|
109
109
|
|
|
110
110
|
Cross provider package dependencies
|
|
111
111
|
-----------------------------------
|
|
@@ -127,5 +127,5 @@ Dependent package
|
|
|
127
127
|
================================================================================================================== =================
|
|
128
128
|
|
|
129
129
|
The changelog for the provider package can be found in the
|
|
130
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-edge3/
|
|
130
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-edge3/2.0.0/changelog.html>`_.
|
|
131
131
|
|
{apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/README.rst
RENAMED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
Package ``apache-airflow-providers-edge3``
|
|
25
25
|
|
|
26
|
-
Release: ``
|
|
26
|
+
Release: ``2.0.0``
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
Handle edge workers on remote sites via HTTP(s) connection and orchestrates work over distributed sites.
|
|
@@ -48,7 +48,7 @@ This is a provider package for ``edge3`` provider. All classes for this provider
|
|
|
48
48
|
are in ``airflow.providers.edge3`` python package.
|
|
49
49
|
|
|
50
50
|
You can find package information and changelog for the provider
|
|
51
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-edge3/
|
|
51
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-edge3/2.0.0/>`_.
|
|
52
52
|
|
|
53
53
|
Installation
|
|
54
54
|
------------
|
|
@@ -62,14 +62,14 @@ The package supports the following python versions: 3.10,3.11,3.12,3.13
|
|
|
62
62
|
Requirements
|
|
63
63
|
------------
|
|
64
64
|
|
|
65
|
-
==========================================
|
|
65
|
+
========================================== ===================
|
|
66
66
|
PIP package Version required
|
|
67
|
-
==========================================
|
|
68
|
-
``apache-airflow`` ``>=
|
|
69
|
-
``apache-airflow-providers-common-compat`` ``>=1.10.
|
|
67
|
+
========================================== ===================
|
|
68
|
+
``apache-airflow`` ``>=3.0.0,!=3.1.0``
|
|
69
|
+
``apache-airflow-providers-common-compat`` ``>=1.10.1``
|
|
70
70
|
``pydantic`` ``>=2.11.0``
|
|
71
71
|
``retryhttp`` ``>=1.2.0,!=1.3.0``
|
|
72
|
-
==========================================
|
|
72
|
+
========================================== ===================
|
|
73
73
|
|
|
74
74
|
Cross provider package dependencies
|
|
75
75
|
-----------------------------------
|
|
@@ -91,4 +91,4 @@ Dependent package
|
|
|
91
91
|
================================================================================================================== =================
|
|
92
92
|
|
|
93
93
|
The changelog for the provider package can be found in the
|
|
94
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-edge3/
|
|
94
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-edge3/2.0.0/changelog.html>`_.
|
|
@@ -63,7 +63,7 @@ deployed outside of the central Airflow cluster is connected via HTTP(s) to the
|
|
|
63
63
|
* **Workers** (Central) - Execute the assigned tasks - most standard setup has local or centralized workers, e.g. via Celery
|
|
64
64
|
* **Edge Workers** - Special workers which pull tasks via HTTP(s) as provided as feature via this provider package
|
|
65
65
|
* **Scheduler** - Responsible for adding the necessary tasks to the queue. The EdgeExecutor is running as a module inside the scheduler.
|
|
66
|
-
* **API server**
|
|
66
|
+
* **API server** - HTTP REST API Server provides access to Dag/task status information. The required end-points are
|
|
67
67
|
provided by the Edge provider plugin. The Edge Worker uses this API to pull tasks and send back the results.
|
|
68
68
|
* **Database** - Contains information about the status of tasks, Dags, Variables, connections, etc.
|
|
69
69
|
|
|
@@ -77,7 +77,7 @@ In detail the parts of the Edge provider are deployed as follows:
|
|
|
77
77
|
need to set the ``executor`` configuration option in the ``airflow.cfg`` file to
|
|
78
78
|
``airflow.providers.edge3.executors.EdgeExecutor``. For more details see :doc:`edge_executor`. Note that also
|
|
79
79
|
multiple executors can be used in parallel together with the EdgeExecutor.
|
|
80
|
-
* **API server**
|
|
80
|
+
* **API server** - The API server is providing REST endpoints to the web UI as well
|
|
81
81
|
as serves static files. The Edge provider adds a plugin that provides additional REST API for the Edge Worker
|
|
82
82
|
as well as UI elements to manage workers (not available in Airflow 3.0).
|
|
83
83
|
The API server is responsible for handling requests from the Edge Worker and sending back the results. To
|
|
@@ -27,6 +27,32 @@
|
|
|
27
27
|
Changelog
|
|
28
28
|
---------
|
|
29
29
|
|
|
30
|
+
2.0.0
|
|
31
|
+
.....
|
|
32
|
+
|
|
33
|
+
.. warning::
|
|
34
|
+
This release of the Edge3 provider drops support for Airflow versions below 3.0.0.
|
|
35
|
+
|
|
36
|
+
The support for Airflow 2.10-2.11 was experimental and GA for the provider is only for Airflow 3.0+.
|
|
37
|
+
Productive operation was not intended in Airflow 2.x, therefore the support for Airflow 2.x is now dropped
|
|
38
|
+
earlier than the usual release support policy would indicate.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
Breaking Changes
|
|
42
|
+
~~~~~~~~~~~~~~~~
|
|
43
|
+
|
|
44
|
+
* ``Drop Airflow 2 Support in Edge Provider (#59143)``
|
|
45
|
+
|
|
46
|
+
Misc
|
|
47
|
+
~~~~
|
|
48
|
+
|
|
49
|
+
* ``Add backcompat for exceptions in providers (#58727)``
|
|
50
|
+
* ``Move the traces and metrics code under a common observability package (#56187)``
|
|
51
|
+
* ``Bump minimum prek version to 0.2.0 (#58952)``
|
|
52
|
+
|
|
53
|
+
.. Below changes are excluded from the changelog. Move them to
|
|
54
|
+
appropriate section above if needed. Do not delete the lines(!):
|
|
55
|
+
|
|
30
56
|
1.6.0
|
|
31
57
|
.....
|
|
32
58
|
|
|
@@ -113,7 +113,7 @@ process as and wait until all running tasks are completed. Also in a console you
|
|
|
113
113
|
If you want to monitor the remote activity and worker, use the UI plugin which
|
|
114
114
|
is included in the provider package and install it on the api-server / webserver and use the
|
|
115
115
|
"Admin" - "Edge Worker Hosts" and "Edge Worker Jobs" pages.
|
|
116
|
-
(Note: The plugin is not available on Airflow 3.0 UI, it is only in
|
|
116
|
+
(Note: The plugin is not available on Airflow 3.0 UI, it is only in 3.1++)
|
|
117
117
|
|
|
118
118
|
If you want to check status of the worker via CLI you can use the command
|
|
119
119
|
|
|
@@ -150,7 +150,7 @@ Worker status can be checked via the web UI in the "Admin" - "Edge Worker" page.
|
|
|
150
150
|
|
|
151
151
|
.. note::
|
|
152
152
|
|
|
153
|
-
Airflow 3.0 does not support UI plugins. The UI plugin is only available in Airflow
|
|
153
|
+
Airflow 3.0 does not support UI plugins. The UI plugin is only available in Airflow 3.1 and newer.
|
|
154
154
|
Alternatively you can use the CLI commands as described in :ref:`deployment:maintenance-mgmt-cli`.
|
|
155
155
|
|
|
156
156
|
|
{apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/docs/index.rst
RENAMED
|
@@ -90,7 +90,7 @@ Additional REST API endpoints are provided to distribute tasks and manage the ed
|
|
|
90
90
|
are provided by the API server.
|
|
91
91
|
|
|
92
92
|
|
|
93
|
-
Release:
|
|
93
|
+
Release: 2.0.0
|
|
94
94
|
|
|
95
95
|
Provider package
|
|
96
96
|
----------------
|
|
@@ -108,16 +108,16 @@ For the minimum Airflow version supported, see ``Requirements`` below.
|
|
|
108
108
|
Requirements
|
|
109
109
|
------------
|
|
110
110
|
|
|
111
|
-
The minimum Apache Airflow version supported by this provider distribution is ``
|
|
111
|
+
The minimum Apache Airflow version supported by this provider distribution is ``3.0.0``.
|
|
112
112
|
|
|
113
|
-
==========================================
|
|
113
|
+
========================================== ===================
|
|
114
114
|
PIP package Version required
|
|
115
|
-
==========================================
|
|
116
|
-
``apache-airflow`` ``>=
|
|
117
|
-
``apache-airflow-providers-common-compat`` ``>=1.10.
|
|
115
|
+
========================================== ===================
|
|
116
|
+
``apache-airflow`` ``>=3.0.0,!=3.1.0``
|
|
117
|
+
``apache-airflow-providers-common-compat`` ``>=1.10.1``
|
|
118
118
|
``pydantic`` ``>=2.11.0``
|
|
119
119
|
``retryhttp`` ``>=1.2.0,!=1.3.0``
|
|
120
|
-
==========================================
|
|
120
|
+
========================================== ===================
|
|
121
121
|
|
|
122
122
|
Cross provider package dependencies
|
|
123
123
|
-----------------------------------
|
|
@@ -144,5 +144,5 @@ Downloading official packages
|
|
|
144
144
|
You can download officially released packages and verify their checksums and signatures from the
|
|
145
145
|
`Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
|
|
146
146
|
|
|
147
|
-
* `The apache-airflow-providers-edge3
|
|
148
|
-
* `The apache-airflow-providers-edge3
|
|
147
|
+
* `The apache-airflow-providers-edge3 2.0.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_edge3-2.0.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_edge3-2.0.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_edge3-2.0.0.tar.gz.sha512>`__)
|
|
148
|
+
* `The apache-airflow-providers-edge3 2.0.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_edge3-2.0.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_edge3-2.0.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_edge3-2.0.0-py3-none-any.whl.sha512>`__)
|
|
@@ -22,7 +22,7 @@ The Edge provider uses a Plugin to
|
|
|
22
22
|
|
|
23
23
|
- Extend the REST API endpoints for connecting workers to the Airflow cluster
|
|
24
24
|
- Provide a web UI for managing the workers and monitoring their status and tasks
|
|
25
|
-
(Note: Airflow 3.0 does not have support for UI plugins. The UI plugin is only available in Airflow
|
|
25
|
+
(Note: Airflow 3.0 does not have support for UI plugins. The UI plugin is only available in Airflow 3.1 and newer.)
|
|
26
26
|
|
|
27
27
|
REST API endpoints
|
|
28
28
|
------------------
|
|
@@ -35,14 +35,14 @@ The Edge provider adds the following REST API endpoints to the Airflow API:
|
|
|
35
35
|
- ``/edge_worker/v1/health``: Check that the API endpoint is deployed and active
|
|
36
36
|
|
|
37
37
|
To see full documentation of the API endpoints open the Airflow web UI and navigate to
|
|
38
|
-
the sub-path ``/edge_worker/docs
|
|
38
|
+
the sub-path ``/edge_worker/docs``.
|
|
39
39
|
|
|
40
40
|
Web UI Plugin
|
|
41
41
|
-------------
|
|
42
42
|
|
|
43
43
|
.. note::
|
|
44
44
|
|
|
45
|
-
Airflow 3.0 does not support UI plugins. The UI plugin is only available in Airflow
|
|
45
|
+
Airflow 3.0 does not support UI plugins. The UI plugin is only available in Airflow 3.1 and newer.
|
|
46
46
|
Alternatively you can use the CLI commands as described in :ref:`deployment:maintenance-mgmt-cli`.
|
|
47
47
|
|
|
48
48
|
The Edge provider adds a web UI plugin to the Airflow web UI. The plugin is
|
{apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/provider.yaml
RENAMED
|
@@ -33,13 +33,14 @@ description: |
|
|
|
33
33
|
are provided by the API server.
|
|
34
34
|
|
|
35
35
|
state: ready
|
|
36
|
-
source-date-epoch:
|
|
36
|
+
source-date-epoch: 1765299029
|
|
37
37
|
|
|
38
38
|
# Note that those versions are maintained by release manager - do not update them manually
|
|
39
39
|
# with the exception of case where other provider in sources has >= new provider version.
|
|
40
40
|
# In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
|
|
41
41
|
# to be done in the same PR
|
|
42
42
|
versions:
|
|
43
|
+
- 2.0.0
|
|
43
44
|
- 1.6.0
|
|
44
45
|
- 1.5.0
|
|
45
46
|
- 1.4.1
|
{apache_airflow_providers_edge3-1.6.0rc2 → apache_airflow_providers_edge3-2.0.0rc1}/pyproject.toml
RENAMED
|
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
|
|
|
25
25
|
|
|
26
26
|
[project]
|
|
27
27
|
name = "apache-airflow-providers-edge3"
|
|
28
|
-
version = "
|
|
28
|
+
version = "2.0.0rc1"
|
|
29
29
|
description = "Provider package apache-airflow-providers-edge3 for Apache Airflow"
|
|
30
30
|
readme = "README.rst"
|
|
31
31
|
license = "Apache-2.0"
|
|
@@ -58,8 +58,8 @@ requires-python = ">=3.10"
|
|
|
58
58
|
# Make sure to run ``prek update-providers-dependencies --all-files``
|
|
59
59
|
# After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
|
|
60
60
|
dependencies = [
|
|
61
|
-
"apache-airflow>=
|
|
62
|
-
"apache-airflow-providers-common-compat>=1.10.
|
|
61
|
+
"apache-airflow>=3.0.0,!=3.1.0",
|
|
62
|
+
"apache-airflow-providers-common-compat>=1.10.1rc1",
|
|
63
63
|
"pydantic>=2.11.0",
|
|
64
64
|
"retryhttp>=1.2.0,!=1.3.0",
|
|
65
65
|
]
|
|
@@ -99,8 +99,8 @@ apache-airflow-providers-common-sql = {workspace = true}
|
|
|
99
99
|
apache-airflow-providers-standard = {workspace = true}
|
|
100
100
|
|
|
101
101
|
[project.urls]
|
|
102
|
-
"Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-edge3/
|
|
103
|
-
"Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-edge3/
|
|
102
|
+
"Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-edge3/2.0.0"
|
|
103
|
+
"Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-edge3/2.0.0/changelog.html"
|
|
104
104
|
"Bug Tracker" = "https://github.com/apache/airflow/issues"
|
|
105
105
|
"Source Code" = "https://github.com/apache/airflow"
|
|
106
106
|
"Slack Chat" = "https://s.apache.org/airflow-slack"
|
|
@@ -29,11 +29,11 @@ from airflow import __version__ as airflow_version
|
|
|
29
29
|
|
|
30
30
|
__all__ = ["__version__"]
|
|
31
31
|
|
|
32
|
-
__version__ = "
|
|
32
|
+
__version__ = "2.0.0"
|
|
33
33
|
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
|
35
|
-
"
|
|
35
|
+
"3.0.0"
|
|
36
36
|
):
|
|
37
37
|
raise RuntimeError(
|
|
38
|
-
f"The package `apache-airflow-providers-edge3:{__version__}` needs Apache Airflow
|
|
38
|
+
f"The package `apache-airflow-providers-edge3:{__version__}` needs Apache Airflow 3.0.0+"
|
|
39
39
|
)
|
|
@@ -20,6 +20,7 @@ import json
|
|
|
20
20
|
import logging
|
|
21
21
|
import os
|
|
22
22
|
from datetime import datetime
|
|
23
|
+
from functools import cache
|
|
23
24
|
from http import HTTPStatus
|
|
24
25
|
from pathlib import Path
|
|
25
26
|
from typing import TYPE_CHECKING, Any
|
|
@@ -29,12 +30,12 @@ import requests
|
|
|
29
30
|
from retryhttp import retry, wait_retry_after
|
|
30
31
|
from tenacity import before_sleep_log, wait_random_exponential
|
|
31
32
|
|
|
33
|
+
from airflow.api_fastapi.auth.tokens import JWTGenerator
|
|
32
34
|
from airflow.configuration import conf
|
|
33
35
|
from airflow.providers.edge3.models.edge_worker import (
|
|
34
36
|
EdgeWorkerDuplicateException,
|
|
35
37
|
EdgeWorkerVersionException,
|
|
36
38
|
)
|
|
37
|
-
from airflow.providers.edge3.version_compat import AIRFLOW_V_3_0_PLUS
|
|
38
39
|
from airflow.providers.edge3.worker_api.datamodels import (
|
|
39
40
|
EdgeJobFetched,
|
|
40
41
|
PushLogsBody,
|
|
@@ -74,6 +75,15 @@ API_RETRY_WAIT_MAX = float(
|
|
|
74
75
|
_default_wait = wait_random_exponential(min=API_RETRY_WAIT_MIN, max=API_RETRY_WAIT_MAX)
|
|
75
76
|
|
|
76
77
|
|
|
78
|
+
@cache
|
|
79
|
+
def jwt_generator() -> JWTGenerator:
|
|
80
|
+
return JWTGenerator(
|
|
81
|
+
secret_key=conf.get("api_auth", "jwt_secret"),
|
|
82
|
+
valid_for=conf.getint("api_auth", "jwt_leeway", fallback=30),
|
|
83
|
+
audience="api",
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
77
87
|
@retry(
|
|
78
88
|
reraise=True,
|
|
79
89
|
max_attempt_number=API_RETRIES,
|
|
@@ -84,28 +94,7 @@ _default_wait = wait_random_exponential(min=API_RETRY_WAIT_MIN, max=API_RETRY_WA
|
|
|
84
94
|
before_sleep=before_sleep_log(logger, logging.WARNING),
|
|
85
95
|
)
|
|
86
96
|
def _make_generic_request(method: str, rest_path: str, data: str | None = None) -> Any:
|
|
87
|
-
|
|
88
|
-
from functools import cache
|
|
89
|
-
|
|
90
|
-
from airflow.api_fastapi.auth.tokens import JWTGenerator
|
|
91
|
-
|
|
92
|
-
@cache
|
|
93
|
-
def jwt_generator() -> JWTGenerator:
|
|
94
|
-
return JWTGenerator(
|
|
95
|
-
secret_key=conf.get("api_auth", "jwt_secret"),
|
|
96
|
-
valid_for=conf.getint("api_auth", "jwt_leeway", fallback=30),
|
|
97
|
-
audience="api",
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
generator = jwt_generator()
|
|
101
|
-
authorization = generator.generate({"method": rest_path})
|
|
102
|
-
else:
|
|
103
|
-
# Airflow 2.10 compatibility
|
|
104
|
-
from airflow.providers.edge3.worker_api.auth import jwt_signer
|
|
105
|
-
|
|
106
|
-
signer = jwt_signer()
|
|
107
|
-
authorization = signer.generate_signed_token({"method": rest_path})
|
|
108
|
-
|
|
97
|
+
authorization = jwt_generator().generate({"method": rest_path})
|
|
109
98
|
api_url = conf.get("edge", "api_url")
|
|
110
99
|
headers = {
|
|
111
100
|
"Content-Type": "application/json",
|
|
@@ -25,7 +25,6 @@ from functools import cache
|
|
|
25
25
|
from http import HTTPStatus
|
|
26
26
|
from multiprocessing import Process
|
|
27
27
|
from pathlib import Path
|
|
28
|
-
from subprocess import Popen
|
|
29
28
|
from time import sleep
|
|
30
29
|
from typing import TYPE_CHECKING
|
|
31
30
|
|
|
@@ -39,7 +38,6 @@ from airflow.providers.edge3 import __version__ as edge_provider_version
|
|
|
39
38
|
from airflow.providers.edge3.cli.api_client import (
|
|
40
39
|
jobs_fetch,
|
|
41
40
|
jobs_set_state,
|
|
42
|
-
logs_logfile_path,
|
|
43
41
|
logs_push,
|
|
44
42
|
worker_register,
|
|
45
43
|
worker_set_state,
|
|
@@ -56,7 +54,6 @@ from airflow.providers.edge3.models.edge_worker import (
|
|
|
56
54
|
EdgeWorkerState,
|
|
57
55
|
EdgeWorkerVersionException,
|
|
58
56
|
)
|
|
59
|
-
from airflow.providers.edge3.version_compat import AIRFLOW_V_3_0_PLUS
|
|
60
57
|
from airflow.utils.net import getfqdn
|
|
61
58
|
from airflow.utils.state import TaskInstanceState
|
|
62
59
|
|
|
@@ -218,7 +215,7 @@ class EdgeWorker:
|
|
|
218
215
|
return 1
|
|
219
216
|
|
|
220
217
|
@staticmethod
|
|
221
|
-
def
|
|
218
|
+
def _launch_job(edge_job: EdgeJobFetched):
|
|
222
219
|
if TYPE_CHECKING:
|
|
223
220
|
from airflow.executors.workloads import ExecuteTask
|
|
224
221
|
|
|
@@ -232,29 +229,6 @@ class EdgeWorker:
|
|
|
232
229
|
if TYPE_CHECKING:
|
|
233
230
|
assert workload.log_path # We need to assume this is defined in here
|
|
234
231
|
logfile = Path(base_log_folder, workload.log_path)
|
|
235
|
-
return process, logfile
|
|
236
|
-
|
|
237
|
-
@staticmethod
|
|
238
|
-
def _launch_job_af2_10(edge_job: EdgeJobFetched) -> tuple[Popen, Path]:
|
|
239
|
-
"""Compatibility for Airflow 2.10 Launch."""
|
|
240
|
-
env = os.environ.copy()
|
|
241
|
-
env["AIRFLOW__CORE__DATABASE_ACCESS_ISOLATION"] = "True"
|
|
242
|
-
env["AIRFLOW__CORE__INTERNAL_API_URL"] = conf.get("edge", "api_url")
|
|
243
|
-
env["_AIRFLOW__SKIP_DATABASE_EXECUTOR_COMPATIBILITY_CHECK"] = "1"
|
|
244
|
-
command: list[str] = edge_job.command # type: ignore[assignment]
|
|
245
|
-
process = Popen(command, close_fds=True, env=env, start_new_session=True)
|
|
246
|
-
logfile = logs_logfile_path(edge_job.key)
|
|
247
|
-
return process, logfile
|
|
248
|
-
|
|
249
|
-
@staticmethod
|
|
250
|
-
def _launch_job(edge_job: EdgeJobFetched):
|
|
251
|
-
"""Get the received job executed."""
|
|
252
|
-
process: Popen | Process
|
|
253
|
-
if AIRFLOW_V_3_0_PLUS:
|
|
254
|
-
process, logfile = EdgeWorker._launch_job_af3(edge_job)
|
|
255
|
-
else:
|
|
256
|
-
# Airflow 2.10
|
|
257
|
-
process, logfile = EdgeWorker._launch_job_af2_10(edge_job)
|
|
258
232
|
EdgeWorker.jobs.append(Job(edge_job, process, logfile, 0))
|
|
259
233
|
|
|
260
234
|
def start(self):
|
|
@@ -26,7 +26,7 @@ from __future__ import annotations
|
|
|
26
26
|
from datetime import datetime
|
|
27
27
|
from time import sleep
|
|
28
28
|
|
|
29
|
-
from airflow.
|
|
29
|
+
from airflow.providers.common.compat.sdk import AirflowNotFoundException
|
|
30
30
|
|
|
31
31
|
try:
|
|
32
32
|
from airflow.sdk import BaseHook
|
|
@@ -32,11 +32,14 @@ from subprocess import STDOUT, Popen
|
|
|
32
32
|
from time import sleep
|
|
33
33
|
from typing import TYPE_CHECKING, Any
|
|
34
34
|
|
|
35
|
-
from airflow.exceptions import AirflowException, AirflowNotFoundException
|
|
36
35
|
from airflow.models import BaseOperator
|
|
37
36
|
from airflow.models.dag import DAG
|
|
38
37
|
from airflow.models.variable import Variable
|
|
39
|
-
from airflow.providers.common.compat.sdk import
|
|
38
|
+
from airflow.providers.common.compat.sdk import (
|
|
39
|
+
AirflowException,
|
|
40
|
+
AirflowNotFoundException,
|
|
41
|
+
AirflowSkipException,
|
|
42
|
+
)
|
|
40
43
|
from airflow.providers.standard.operators.empty import EmptyOperator
|
|
41
44
|
from airflow.sdk.execution_time.context import context_to_airflow_vars
|
|
42
45
|
|
|
@@ -29,15 +29,14 @@ from sqlalchemy.orm import Session
|
|
|
29
29
|
|
|
30
30
|
from airflow.cli.cli_config import GroupCommand
|
|
31
31
|
from airflow.configuration import conf
|
|
32
|
+
from airflow.executors import workloads
|
|
32
33
|
from airflow.executors.base_executor import BaseExecutor
|
|
33
34
|
from airflow.models.taskinstance import TaskInstance
|
|
34
|
-
from airflow.providers.common.compat.sdk import timezone
|
|
35
|
+
from airflow.providers.common.compat.sdk import Stats, timezone
|
|
35
36
|
from airflow.providers.edge3.cli.edge_command import EDGE_COMMANDS
|
|
36
37
|
from airflow.providers.edge3.models.edge_job import EdgeJobModel
|
|
37
38
|
from airflow.providers.edge3.models.edge_logs import EdgeLogsModel
|
|
38
39
|
from airflow.providers.edge3.models.edge_worker import EdgeWorkerModel, EdgeWorkerState, reset_metrics
|
|
39
|
-
from airflow.providers.edge3.version_compat import AIRFLOW_V_3_0_PLUS
|
|
40
|
-
from airflow.stats import Stats
|
|
41
40
|
from airflow.utils.db import DBLocks, create_global_lock
|
|
42
41
|
from airflow.utils.session import NEW_SESSION, provide_session
|
|
43
42
|
from airflow.utils.state import TaskInstanceState
|
|
@@ -69,8 +68,10 @@ class EdgeExecutor(BaseExecutor):
|
|
|
69
68
|
"""
|
|
70
69
|
Check if already existing table matches the newest table schema.
|
|
71
70
|
|
|
72
|
-
workaround
|
|
71
|
+
workaround as Airflow 2.x had no support for provider DB migrations,
|
|
73
72
|
then it is possible to use alembic also for provider distributions.
|
|
73
|
+
|
|
74
|
+
TODO(jscheffl): Change to alembic DB migrations in the future.
|
|
74
75
|
"""
|
|
75
76
|
inspector = inspect(engine)
|
|
76
77
|
edge_job_columns = None
|
|
@@ -125,66 +126,13 @@ class EdgeExecutor(BaseExecutor):
|
|
|
125
126
|
self.edge_queued_tasks = deepcopy(self.queued_tasks)
|
|
126
127
|
super()._process_tasks(task_tuples) # type: ignore[misc]
|
|
127
128
|
|
|
128
|
-
@provide_session
|
|
129
|
-
def execute_async(
|
|
130
|
-
self,
|
|
131
|
-
key: TaskInstanceKey,
|
|
132
|
-
command: CommandType,
|
|
133
|
-
queue: str | None = None,
|
|
134
|
-
executor_config: Any | None = None,
|
|
135
|
-
session: Session = NEW_SESSION,
|
|
136
|
-
) -> None:
|
|
137
|
-
"""Execute asynchronously. Airflow 2.10 entry point to execute a task."""
|
|
138
|
-
# Use of a temporary trick to get task instance, will be changed with Airflow 3.0.0
|
|
139
|
-
# code works together with _process_tasks overwrite to get task instance.
|
|
140
|
-
# TaskInstance in fourth element
|
|
141
|
-
task_instance = self.edge_queued_tasks[key][3] # type: ignore[index]
|
|
142
|
-
del self.edge_queued_tasks[key]
|
|
143
|
-
|
|
144
|
-
self.validate_airflow_tasks_run_command(command) # type: ignore[attr-defined]
|
|
145
|
-
|
|
146
|
-
# Check if job already exists with same dag_id, task_id, run_id, map_index, try_number
|
|
147
|
-
existing_job = (
|
|
148
|
-
session.query(EdgeJobModel)
|
|
149
|
-
.filter_by(
|
|
150
|
-
dag_id=key.dag_id,
|
|
151
|
-
task_id=key.task_id,
|
|
152
|
-
run_id=key.run_id,
|
|
153
|
-
map_index=key.map_index,
|
|
154
|
-
try_number=key.try_number,
|
|
155
|
-
)
|
|
156
|
-
.first()
|
|
157
|
-
)
|
|
158
|
-
|
|
159
|
-
if existing_job:
|
|
160
|
-
existing_job.state = TaskInstanceState.QUEUED
|
|
161
|
-
existing_job.queue = queue or DEFAULT_QUEUE
|
|
162
|
-
existing_job.concurrency_slots = task_instance.pool_slots
|
|
163
|
-
existing_job.command = str(command)
|
|
164
|
-
else:
|
|
165
|
-
session.add(
|
|
166
|
-
EdgeJobModel(
|
|
167
|
-
dag_id=key.dag_id,
|
|
168
|
-
task_id=key.task_id,
|
|
169
|
-
run_id=key.run_id,
|
|
170
|
-
map_index=key.map_index,
|
|
171
|
-
try_number=key.try_number,
|
|
172
|
-
state=TaskInstanceState.QUEUED,
|
|
173
|
-
queue=queue or DEFAULT_QUEUE,
|
|
174
|
-
concurrency_slots=task_instance.pool_slots,
|
|
175
|
-
command=str(command),
|
|
176
|
-
)
|
|
177
|
-
)
|
|
178
|
-
|
|
179
129
|
@provide_session
|
|
180
130
|
def queue_workload(
|
|
181
131
|
self,
|
|
182
|
-
workload:
|
|
132
|
+
workload: workloads.All,
|
|
183
133
|
session: Session = NEW_SESSION,
|
|
184
134
|
) -> None:
|
|
185
135
|
"""Put new workload to queue. Airflow 3 entry point to execute a task."""
|
|
186
|
-
from airflow.executors import workloads
|
|
187
|
-
|
|
188
136
|
if not isinstance(workload, workloads.ExecuteTask):
|
|
189
137
|
raise TypeError(f"Don't know how to queue workload of type {type(workload).__name__}")
|
|
190
138
|
|
|
@@ -263,11 +211,7 @@ class EdgeExecutor(BaseExecutor):
|
|
|
263
211
|
|
|
264
212
|
def _update_orphaned_jobs(self, session: Session) -> bool:
|
|
265
213
|
"""Update status ob jobs when workers die and don't update anymore."""
|
|
266
|
-
|
|
267
|
-
heartbeat_interval_config_name = "task_instance_heartbeat_timeout"
|
|
268
|
-
else:
|
|
269
|
-
heartbeat_interval_config_name = "scheduler_zombie_task_threshold"
|
|
270
|
-
heartbeat_interval: int = conf.getint("scheduler", heartbeat_interval_config_name)
|
|
214
|
+
heartbeat_interval: int = conf.getint("scheduler", "task_instance_heartbeat_timeout")
|
|
271
215
|
lifeless_jobs: list[EdgeJobModel] = (
|
|
272
216
|
session.query(EdgeJobModel)
|
|
273
217
|
.with_for_update(skip_locked=True)
|
|
@@ -26,11 +26,9 @@ from typing import TYPE_CHECKING
|
|
|
26
26
|
from sqlalchemy import Integer, String, delete, select
|
|
27
27
|
from sqlalchemy.orm import Mapped
|
|
28
28
|
|
|
29
|
-
from airflow.exceptions import AirflowException
|
|
30
29
|
from airflow.models.base import Base
|
|
31
|
-
from airflow.providers.common.compat.sdk import timezone
|
|
30
|
+
from airflow.providers.common.compat.sdk import AirflowException, Stats, timezone
|
|
32
31
|
from airflow.providers.common.compat.sqlalchemy.orm import mapped_column
|
|
33
|
-
from airflow.stats import Stats
|
|
34
32
|
from airflow.utils.log.logging_mixin import LoggingMixin
|
|
35
33
|
from airflow.utils.providers_configuration_loader import providers_configuration_loaded
|
|
36
34
|
from airflow.utils.session import NEW_SESSION, provide_session
|