apache-airflow-core 3.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- airflow/METRICS.md +58 -0
- airflow/__init__.py +135 -0
- airflow/__main__.py +59 -0
- airflow/_vendor/README.md +36 -0
- airflow/_vendor/__init__.py +0 -0
- airflow/_vendor/vendor.md +2 -0
- airflow/alembic.ini +85 -0
- airflow/api/__init__.py +16 -0
- airflow/api/client/__init__.py +26 -0
- airflow/api/client/local_client.py +95 -0
- airflow/api/common/__init__.py +17 -0
- airflow/api/common/airflow_health.py +90 -0
- airflow/api/common/delete_dag.py +85 -0
- airflow/api/common/mark_tasks.py +372 -0
- airflow/api/common/trigger_dag.py +163 -0
- airflow/api_fastapi/__init__.py +16 -0
- airflow/api_fastapi/app.py +200 -0
- airflow/api_fastapi/auth/__init__.py +17 -0
- airflow/api_fastapi/auth/managers/__init__.py +17 -0
- airflow/api_fastapi/auth/managers/base_auth_manager.py +507 -0
- airflow/api_fastapi/auth/managers/models/__init__.py +17 -0
- airflow/api_fastapi/auth/managers/models/base_user.py +30 -0
- airflow/api_fastapi/auth/managers/models/batch_apis.py +59 -0
- airflow/api_fastapi/auth/managers/models/resource_details.py +107 -0
- airflow/api_fastapi/auth/managers/simple/__init__.py +17 -0
- airflow/api_fastapi/auth/managers/simple/datamodels/__init__.py +17 -0
- airflow/api_fastapi/auth/managers/simple/datamodels/login.py +35 -0
- airflow/api_fastapi/auth/managers/simple/openapi/__init__.py +17 -0
- airflow/api_fastapi/auth/managers/simple/openapi/v1-simple-auth-manager-generated.yaml +193 -0
- airflow/api_fastapi/auth/managers/simple/routes/__init__.py +17 -0
- airflow/api_fastapi/auth/managers/simple/routes/login.py +85 -0
- airflow/api_fastapi/auth/managers/simple/services/__init__.py +16 -0
- airflow/api_fastapi/auth/managers/simple/services/login.py +102 -0
- airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py +381 -0
- airflow/api_fastapi/auth/managers/simple/ui/.prettierignore +7 -0
- airflow/api_fastapi/auth/managers/simple/ui/.prettierrc +13 -0
- airflow/api_fastapi/auth/managers/simple/ui/dev/index.html +24 -0
- airflow/api_fastapi/auth/managers/simple/ui/dist/.vite/manifest.json +8 -0
- airflow/api_fastapi/auth/managers/simple/ui/dist/assets/index-BV-Yw0zh.js +132 -0
- airflow/api_fastapi/auth/managers/simple/ui/dist/index.html +14 -0
- airflow/api_fastapi/auth/managers/simple/ui/dist/pin_100.png +0 -0
- airflow/api_fastapi/auth/managers/simple/ui/dist/pin_32.png +0 -0
- airflow/api_fastapi/auth/managers/simple/ui/eslint.config.js +47 -0
- airflow/api_fastapi/auth/managers/simple/ui/index.html +14 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/common.ts +37 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/ensureQueryData.ts +16 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/index.ts +4 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/infiniteQueries.ts +1 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/prefetch.ts +16 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/queries.ts +91 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/suspense.ts +32 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiError.ts +21 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiRequestOptions.ts +14 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiResult.ts +7 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/CancelablePromise.ts +126 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/OpenAPI.ts +58 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/request.ts +374 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/index.ts +7 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/schemas.gen.ts +97 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/services.gen.ts +89 -0
- airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/types.gen.ts +126 -0
- airflow/api_fastapi/auth/managers/simple/ui/package-lock.json +9140 -0
- airflow/api_fastapi/auth/managers/simple/ui/package.json +56 -0
- airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml +6050 -0
- airflow/api_fastapi/auth/managers/simple/ui/public/pin_100.png +0 -0
- airflow/api_fastapi/auth/managers/simple/ui/public/pin_32.png +0 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/core.js +1448 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/levels.js +27 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/off.js +29 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/perfectionist.js +139 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/plugin-patch.d.ts +49 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/prettier.js +39 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/react.js +623 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/stylistic.js +91 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/typescript.js +1889 -0
- airflow/api_fastapi/auth/managers/simple/ui/rules/unicorn.js +1281 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/AirflowPin.tsx +76 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/alert/Alert.tsx +58 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/alert/ErrorAlert.tsx +64 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/login/Login.test.tsx +36 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/login/Login.tsx +119 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/login/LoginForm.tsx +80 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/main.tsx +40 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/queries/useCreateToken.ts +47 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/queryClient.ts +36 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/router.tsx +41 -0
- airflow/api_fastapi/auth/managers/simple/ui/src/test-utils.tsx +47 -0
- airflow/api_fastapi/auth/managers/simple/ui/tests-setup.ts +24 -0
- airflow/api_fastapi/auth/managers/simple/ui/tsconfig.app.json +31 -0
- airflow/api_fastapi/auth/managers/simple/ui/tsconfig.dev.json +12 -0
- airflow/api_fastapi/auth/managers/simple/ui/tsconfig.json +8 -0
- airflow/api_fastapi/auth/managers/simple/ui/tsconfig.node.json +28 -0
- airflow/api_fastapi/auth/managers/simple/ui/vite.config.ts +49 -0
- airflow/api_fastapi/auth/managers/simple/user.py +41 -0
- airflow/api_fastapi/auth/tokens.py +578 -0
- airflow/api_fastapi/common/__init__.py +16 -0
- airflow/api_fastapi/common/db/__init__.py +16 -0
- airflow/api_fastapi/common/db/common.py +181 -0
- airflow/api_fastapi/common/db/dag_runs.py +32 -0
- airflow/api_fastapi/common/db/dags.py +92 -0
- airflow/api_fastapi/common/exceptions.py +85 -0
- airflow/api_fastapi/common/headers.py +49 -0
- airflow/api_fastapi/common/parameters.py +709 -0
- airflow/api_fastapi/common/router.py +94 -0
- airflow/api_fastapi/common/types.py +106 -0
- airflow/api_fastapi/core_api/__init__.py +16 -0
- airflow/api_fastapi/core_api/app.py +170 -0
- airflow/api_fastapi/core_api/base.py +64 -0
- airflow/api_fastapi/core_api/datamodels/__init__.py +16 -0
- airflow/api_fastapi/core_api/datamodels/assets.py +158 -0
- airflow/api_fastapi/core_api/datamodels/backfills.py +71 -0
- airflow/api_fastapi/core_api/datamodels/common.py +144 -0
- airflow/api_fastapi/core_api/datamodels/config.py +64 -0
- airflow/api_fastapi/core_api/datamodels/connections.py +138 -0
- airflow/api_fastapi/core_api/datamodels/dag_report.py +40 -0
- airflow/api_fastapi/core_api/datamodels/dag_run.py +162 -0
- airflow/api_fastapi/core_api/datamodels/dag_sources.py +27 -0
- airflow/api_fastapi/core_api/datamodels/dag_stats.py +42 -0
- airflow/api_fastapi/core_api/datamodels/dag_tags.py +34 -0
- airflow/api_fastapi/core_api/datamodels/dag_versions.py +51 -0
- airflow/api_fastapi/core_api/datamodels/dag_warning.py +39 -0
- airflow/api_fastapi/core_api/datamodels/dags.py +189 -0
- airflow/api_fastapi/core_api/datamodels/event_logs.py +47 -0
- airflow/api_fastapi/core_api/datamodels/extra_links.py +30 -0
- airflow/api_fastapi/core_api/datamodels/import_error.py +40 -0
- airflow/api_fastapi/core_api/datamodels/job.py +43 -0
- airflow/api_fastapi/core_api/datamodels/log.py +44 -0
- airflow/api_fastapi/core_api/datamodels/monitor.py +52 -0
- airflow/api_fastapi/core_api/datamodels/plugins.py +100 -0
- airflow/api_fastapi/core_api/datamodels/pools.py +77 -0
- airflow/api_fastapi/core_api/datamodels/providers.py +35 -0
- airflow/api_fastapi/core_api/datamodels/task_instances.py +224 -0
- airflow/api_fastapi/core_api/datamodels/tasks.py +114 -0
- airflow/api_fastapi/core_api/datamodels/trigger.py +36 -0
- airflow/api_fastapi/core_api/datamodels/ui/__init__.py +16 -0
- airflow/api_fastapi/core_api/datamodels/ui/auth.py +28 -0
- airflow/api_fastapi/core_api/datamodels/ui/common.py +59 -0
- airflow/api_fastapi/core_api/datamodels/ui/config.py +43 -0
- airflow/api_fastapi/core_api/datamodels/ui/dags.py +36 -0
- airflow/api_fastapi/core_api/datamodels/ui/dashboard.py +63 -0
- airflow/api_fastapi/core_api/datamodels/ui/grid.py +64 -0
- airflow/api_fastapi/core_api/datamodels/ui/structure.py +48 -0
- airflow/api_fastapi/core_api/datamodels/variables.py +73 -0
- airflow/api_fastapi/core_api/datamodels/version.py +26 -0
- airflow/api_fastapi/core_api/datamodels/xcom.py +74 -0
- airflow/api_fastapi/core_api/init_dagbag.py +29 -0
- airflow/api_fastapi/core_api/middleware.py +39 -0
- airflow/api_fastapi/core_api/openapi/__init__.py +16 -0
- airflow/api_fastapi/core_api/openapi/_private_ui.yaml +1789 -0
- airflow/api_fastapi/core_api/openapi/exceptions.py +41 -0
- airflow/api_fastapi/core_api/openapi/v1-rest-api-generated.yaml +10493 -0
- airflow/api_fastapi/core_api/routes/__init__.py +16 -0
- airflow/api_fastapi/core_api/routes/public/__init__.py +94 -0
- airflow/api_fastapi/core_api/routes/public/assets.py +555 -0
- airflow/api_fastapi/core_api/routes/public/auth.py +57 -0
- airflow/api_fastapi/core_api/routes/public/backfills.py +297 -0
- airflow/api_fastapi/core_api/routes/public/config.py +179 -0
- airflow/api_fastapi/core_api/routes/public/connections.py +249 -0
- airflow/api_fastapi/core_api/routes/public/dag_parsing.py +75 -0
- airflow/api_fastapi/core_api/routes/public/dag_report.py +75 -0
- airflow/api_fastapi/core_api/routes/public/dag_run.py +492 -0
- airflow/api_fastapi/core_api/routes/public/dag_sources.py +80 -0
- airflow/api_fastapi/core_api/routes/public/dag_stats.py +96 -0
- airflow/api_fastapi/core_api/routes/public/dag_tags.py +71 -0
- airflow/api_fastapi/core_api/routes/public/dag_versions.py +128 -0
- airflow/api_fastapi/core_api/routes/public/dag_warning.py +80 -0
- airflow/api_fastapi/core_api/routes/public/dags.py +349 -0
- airflow/api_fastapi/core_api/routes/public/event_logs.py +145 -0
- airflow/api_fastapi/core_api/routes/public/extra_links.py +90 -0
- airflow/api_fastapi/core_api/routes/public/import_error.py +196 -0
- airflow/api_fastapi/core_api/routes/public/job.py +130 -0
- airflow/api_fastapi/core_api/routes/public/log.py +153 -0
- airflow/api_fastapi/core_api/routes/public/monitor.py +30 -0
- airflow/api_fastapi/core_api/routes/public/plugins.py +46 -0
- airflow/api_fastapi/core_api/routes/public/pools.py +207 -0
- airflow/api_fastapi/core_api/routes/public/providers.py +62 -0
- airflow/api_fastapi/core_api/routes/public/task_instances.py +912 -0
- airflow/api_fastapi/core_api/routes/public/tasks.py +84 -0
- airflow/api_fastapi/core_api/routes/public/variables.py +202 -0
- airflow/api_fastapi/core_api/routes/public/version.py +34 -0
- airflow/api_fastapi/core_api/routes/public/xcom.py +303 -0
- airflow/api_fastapi/core_api/routes/ui/__init__.py +42 -0
- airflow/api_fastapi/core_api/routes/ui/assets.py +89 -0
- airflow/api_fastapi/core_api/routes/ui/auth.py +40 -0
- airflow/api_fastapi/core_api/routes/ui/backfills.py +78 -0
- airflow/api_fastapi/core_api/routes/ui/config.py +69 -0
- airflow/api_fastapi/core_api/routes/ui/connections.py +40 -0
- airflow/api_fastapi/core_api/routes/ui/dags.py +165 -0
- airflow/api_fastapi/core_api/routes/ui/dashboard.py +99 -0
- airflow/api_fastapi/core_api/routes/ui/dependencies.py +89 -0
- airflow/api_fastapi/core_api/routes/ui/grid.py +262 -0
- airflow/api_fastapi/core_api/routes/ui/structure.py +142 -0
- airflow/api_fastapi/core_api/security.py +362 -0
- airflow/api_fastapi/core_api/services/__init__.py +16 -0
- airflow/api_fastapi/core_api/services/public/__init__.py +16 -0
- airflow/api_fastapi/core_api/services/public/common.py +74 -0
- airflow/api_fastapi/core_api/services/public/connections.py +187 -0
- airflow/api_fastapi/core_api/services/public/pools.py +149 -0
- airflow/api_fastapi/core_api/services/public/variables.py +133 -0
- airflow/api_fastapi/core_api/services/ui/__init__.py +16 -0
- airflow/api_fastapi/core_api/services/ui/connections.py +253 -0
- airflow/api_fastapi/core_api/services/ui/dependencies.py +78 -0
- airflow/api_fastapi/core_api/services/ui/grid.py +326 -0
- airflow/api_fastapi/core_api/services/ui/structure.py +114 -0
- airflow/api_fastapi/execution_api/__init__.py +16 -0
- airflow/api_fastapi/execution_api/app.py +244 -0
- airflow/api_fastapi/execution_api/datamodels/__init__.py +16 -0
- airflow/api_fastapi/execution_api/datamodels/asset.py +55 -0
- airflow/api_fastapi/execution_api/datamodels/asset_event.py +58 -0
- airflow/api_fastapi/execution_api/datamodels/connection.py +35 -0
- airflow/api_fastapi/execution_api/datamodels/dagrun.py +38 -0
- airflow/api_fastapi/execution_api/datamodels/taskinstance.py +343 -0
- airflow/api_fastapi/execution_api/datamodels/token.py +32 -0
- airflow/api_fastapi/execution_api/datamodels/variable.py +36 -0
- airflow/api_fastapi/execution_api/datamodels/xcom.py +38 -0
- airflow/api_fastapi/execution_api/deps.py +152 -0
- airflow/api_fastapi/execution_api/routes/__init__.py +52 -0
- airflow/api_fastapi/execution_api/routes/asset_events.py +111 -0
- airflow/api_fastapi/execution_api/routes/assets.py +71 -0
- airflow/api_fastapi/execution_api/routes/connections.py +72 -0
- airflow/api_fastapi/execution_api/routes/dag_runs.py +178 -0
- airflow/api_fastapi/execution_api/routes/health.py +47 -0
- airflow/api_fastapi/execution_api/routes/task_instances.py +725 -0
- airflow/api_fastapi/execution_api/routes/task_reschedules.py +48 -0
- airflow/api_fastapi/execution_api/routes/variables.py +104 -0
- airflow/api_fastapi/execution_api/routes/xcoms.py +314 -0
- airflow/api_fastapi/execution_api/versions/__init__.py +25 -0
- airflow/api_fastapi/gunicorn_config.py +33 -0
- airflow/api_fastapi/logging/__init__.py +16 -0
- airflow/api_fastapi/logging/decorators.py +162 -0
- airflow/api_fastapi/main.py +27 -0
- airflow/assets/__init__.py +16 -0
- airflow/assets/evaluation.py +78 -0
- airflow/assets/manager.py +293 -0
- airflow/callbacks/__init__.py +16 -0
- airflow/callbacks/base_callback_sink.py +31 -0
- airflow/callbacks/callback_requests.py +91 -0
- airflow/callbacks/database_callback_sink.py +39 -0
- airflow/callbacks/pipe_callback_sink.py +50 -0
- airflow/cli/__init__.py +17 -0
- airflow/cli/cli_config.py +1916 -0
- airflow/cli/cli_parser.py +195 -0
- airflow/cli/commands/__init__.py +17 -0
- airflow/cli/commands/api_server_command.py +137 -0
- airflow/cli/commands/asset_command.py +158 -0
- airflow/cli/commands/backfill_command.py +81 -0
- airflow/cli/commands/cheat_sheet_command.py +66 -0
- airflow/cli/commands/config_command.py +1003 -0
- airflow/cli/commands/connection_command.py +382 -0
- airflow/cli/commands/daemon_utils.py +86 -0
- airflow/cli/commands/dag_command.py +652 -0
- airflow/cli/commands/dag_processor_command.py +59 -0
- airflow/cli/commands/db_command.py +309 -0
- airflow/cli/commands/info_command.py +390 -0
- airflow/cli/commands/jobs_command.py +62 -0
- airflow/cli/commands/kerberos_command.py +43 -0
- airflow/cli/commands/legacy_commands.py +39 -0
- airflow/cli/commands/plugins_command.py +60 -0
- airflow/cli/commands/pool_command.py +149 -0
- airflow/cli/commands/provider_command.py +259 -0
- airflow/cli/commands/rotate_fernet_key_command.py +80 -0
- airflow/cli/commands/scheduler_command.py +88 -0
- airflow/cli/commands/standalone_command.py +307 -0
- airflow/cli/commands/task_command.py +524 -0
- airflow/cli/commands/triggerer_command.py +71 -0
- airflow/cli/commands/variable_command.py +144 -0
- airflow/cli/commands/version_command.py +26 -0
- airflow/cli/simple_table.py +142 -0
- airflow/cli/utils.py +98 -0
- airflow/config_templates/__init__.py +17 -0
- airflow/config_templates/airflow_local_settings.py +325 -0
- airflow/config_templates/config.yml +2597 -0
- airflow/config_templates/config.yml.schema.json +111 -0
- airflow/config_templates/default_airflow.cfg +45 -0
- airflow/config_templates/default_webserver_config.py +132 -0
- airflow/config_templates/provider_config_fallback_defaults.cfg +136 -0
- airflow/config_templates/unit_tests.cfg +141 -0
- airflow/configuration.py +2251 -0
- airflow/customized_form_field_behaviours.schema.json +32 -0
- airflow/dag_processing/__init__.py +16 -0
- airflow/dag_processing/bundles/__init__.py +16 -0
- airflow/dag_processing/bundles/base.py +423 -0
- airflow/dag_processing/bundles/local.py +50 -0
- airflow/dag_processing/bundles/manager.py +163 -0
- airflow/dag_processing/bundles/provider.yaml +47 -0
- airflow/dag_processing/collection.py +920 -0
- airflow/dag_processing/manager.py +1140 -0
- airflow/dag_processing/processor.py +320 -0
- airflow/datasets/__init__.py +61 -0
- airflow/datasets/metadata.py +33 -0
- airflow/decorators/__init__.py +39 -0
- airflow/example_dags/__init__.py +17 -0
- airflow/example_dags/example_asset_alias.py +96 -0
- airflow/example_dags/example_asset_alias_with_no_taskflow.py +107 -0
- airflow/example_dags/example_asset_decorator.py +50 -0
- airflow/example_dags/example_asset_with_watchers.py +42 -0
- airflow/example_dags/example_assets.py +191 -0
- airflow/example_dags/example_bash_decorator.py +114 -0
- airflow/example_dags/example_bash_operator.py +74 -0
- airflow/example_dags/example_branch_datetime_operator.py +105 -0
- airflow/example_dags/example_branch_day_of_week_operator.py +61 -0
- airflow/example_dags/example_branch_labels.py +45 -0
- airflow/example_dags/example_branch_operator.py +166 -0
- airflow/example_dags/example_branch_operator_decorator.py +142 -0
- airflow/example_dags/example_branch_python_dop_operator_3.py +57 -0
- airflow/example_dags/example_complex.py +220 -0
- airflow/example_dags/example_custom_weight.py +58 -0
- airflow/example_dags/example_dag_decorator.py +74 -0
- airflow/example_dags/example_display_name.py +48 -0
- airflow/example_dags/example_dynamic_task_mapping.py +58 -0
- airflow/example_dags/example_dynamic_task_mapping_with_no_taskflow_operators.py +64 -0
- airflow/example_dags/example_external_task_marker_dag.py +98 -0
- airflow/example_dags/example_inlet_event_extra.py +59 -0
- airflow/example_dags/example_kubernetes_executor.py +221 -0
- airflow/example_dags/example_latest_only.py +38 -0
- airflow/example_dags/example_latest_only_with_trigger.py +49 -0
- airflow/example_dags/example_local_kubernetes_executor.py +71 -0
- airflow/example_dags/example_nested_branch_dag.py +56 -0
- airflow/example_dags/example_outlet_event_extra.py +77 -0
- airflow/example_dags/example_params_trigger_ui.py +102 -0
- airflow/example_dags/example_params_ui_tutorial.py +250 -0
- airflow/example_dags/example_passing_params_via_test_command.py +86 -0
- airflow/example_dags/example_python_decorator.py +132 -0
- airflow/example_dags/example_python_operator.py +147 -0
- airflow/example_dags/example_sensor_decorator.py +66 -0
- airflow/example_dags/example_sensors.py +132 -0
- airflow/example_dags/example_setup_teardown.py +50 -0
- airflow/example_dags/example_setup_teardown_taskflow.py +106 -0
- airflow/example_dags/example_short_circuit_decorator.py +60 -0
- airflow/example_dags/example_short_circuit_operator.py +66 -0
- airflow/example_dags/example_simplest_dag.py +33 -0
- airflow/example_dags/example_skip_dag.py +73 -0
- airflow/example_dags/example_task_group.py +66 -0
- airflow/example_dags/example_task_group_decorator.py +80 -0
- airflow/example_dags/example_time_delta_sensor_async.py +42 -0
- airflow/example_dags/example_trigger_controller_dag.py +42 -0
- airflow/example_dags/example_trigger_target_dag.py +55 -0
- airflow/example_dags/example_workday_timetable.py +31 -0
- airflow/example_dags/example_xcom.py +94 -0
- airflow/example_dags/example_xcomargs.py +65 -0
- airflow/example_dags/libs/__init__.py +17 -0
- airflow/example_dags/libs/helper.py +22 -0
- airflow/example_dags/plugins/__init__.py +16 -0
- airflow/example_dags/plugins/decreasing_priority_weight_strategy.py +41 -0
- airflow/example_dags/plugins/event_listener.py +184 -0
- airflow/example_dags/plugins/listener_plugin.py +26 -0
- airflow/example_dags/plugins/workday.py +104 -0
- airflow/example_dags/sql/sample.sql +24 -0
- airflow/example_dags/sql/tutorial_taskflow_template.sql +23 -0
- airflow/example_dags/tutorial.py +123 -0
- airflow/example_dags/tutorial_dag.py +136 -0
- airflow/example_dags/tutorial_objectstorage.py +134 -0
- airflow/example_dags/tutorial_taskflow_api.py +106 -0
- airflow/example_dags/tutorial_taskflow_api_virtualenv.py +84 -0
- airflow/example_dags/tutorial_taskflow_templates.py +107 -0
- airflow/exceptions.py +560 -0
- airflow/executors/__init__.py +16 -0
- airflow/executors/base_executor.py +758 -0
- airflow/executors/executor_constants.py +39 -0
- airflow/executors/executor_loader.py +300 -0
- airflow/executors/executor_utils.py +59 -0
- airflow/executors/local_executor.py +248 -0
- airflow/executors/workloads.py +165 -0
- airflow/git_version +1 -0
- airflow/hooks/README.md +24 -0
- airflow/hooks/__init__.py +35 -0
- airflow/hooks/base.py +171 -0
- airflow/io/__init__.py +118 -0
- airflow/io/path.py +22 -0
- airflow/io/storage.py +22 -0
- airflow/io/typedef.py +19 -0
- airflow/jobs/JOB_LIFECYCLE.md +158 -0
- airflow/jobs/__init__.py +17 -0
- airflow/jobs/base_job_runner.py +70 -0
- airflow/jobs/dag_processor_job_runner.py +71 -0
- airflow/jobs/job.py +405 -0
- airflow/jobs/scheduler_job_runner.py +2482 -0
- airflow/jobs/triggerer_job_runner.py +1052 -0
- airflow/lineage/__init__.py +17 -0
- airflow/lineage/hook.py +273 -0
- airflow/listeners/__init__.py +22 -0
- airflow/listeners/listener.py +91 -0
- airflow/listeners/spec/__init__.py +16 -0
- airflow/listeners/spec/asset.py +42 -0
- airflow/listeners/spec/dagrun.py +42 -0
- airflow/listeners/spec/importerrors.py +32 -0
- airflow/listeners/spec/lifecycle.py +44 -0
- airflow/listeners/spec/taskinstance.py +50 -0
- airflow/logging/__init__.py +16 -0
- airflow/logging/remote.py +49 -0
- airflow/logging_config.py +135 -0
- airflow/macros/__init__.py +33 -0
- airflow/metrics/__init__.py +16 -0
- airflow/metrics/base_stats_logger.py +113 -0
- airflow/metrics/datadog_logger.py +174 -0
- airflow/metrics/otel_logger.py +407 -0
- airflow/metrics/protocols.py +122 -0
- airflow/metrics/statsd_logger.py +186 -0
- airflow/metrics/validators.py +271 -0
- airflow/migrations/__init__.py +17 -0
- airflow/migrations/db_types.py +84 -0
- airflow/migrations/db_types.pyi +27 -0
- airflow/migrations/env.py +144 -0
- airflow/migrations/script.py.mako +45 -0
- airflow/migrations/utils.py +105 -0
- airflow/migrations/versions/0001_2_7_0_add_index_to_task_instance_table.py +55 -0
- airflow/migrations/versions/0002_2_7_0_add_custom_operator_name_column.py +52 -0
- airflow/migrations/versions/0003_2_7_0_add_include_deferred_column_to_pool.py +54 -0
- airflow/migrations/versions/0004_2_8_0_add_clear_number_to_dag_run.py +64 -0
- airflow/migrations/versions/0005_2_8_0_add_owner_display_name_to_audit_log_table.py +52 -0
- airflow/migrations/versions/0006_2_8_0_make_connection_login_password_text.py +60 -0
- airflow/migrations/versions/0007_2_8_0_add_processor_subdir_import_error.py +55 -0
- airflow/migrations/versions/0008_2_8_1_refactor_dag_run_indexes.py +52 -0
- airflow/migrations/versions/0009_2_9_0_add_rendered_map_index_to_taskinstance.py +50 -0
- airflow/migrations/versions/0010_2_9_0_add_run_id_to_audit_log_table_and_change_event_name_length.py +66 -0
- airflow/migrations/versions/0011_2_9_0_add_dataset_expression_in_dagmodel.py +55 -0
- airflow/migrations/versions/0012_2_9_0_adding_adding_max_failure_runs_column_.py +50 -0
- airflow/migrations/versions/0013_2_9_0_make_xcom_value_to_longblob_for_mysql.py +55 -0
- airflow/migrations/versions/0014_2_9_0_add_display_name_for_dag_and_task_.py +50 -0
- airflow/migrations/versions/0015_2_9_0_update_trigger_kwargs_type.py +93 -0
- airflow/migrations/versions/0016_2_9_2_remove_idx_last_scheduling_decision_.py +47 -0
- airflow/migrations/versions/0017_2_9_2_fix_inconsistency_between_ORM_and_migration_files.py +298 -0
- airflow/migrations/versions/0018_2_10_0_add_indexes_on_dag_id_column_in_referencing_tables.py +106 -0
- airflow/migrations/versions/0019_2_10_0_add_new_executor_field_to_db.py +48 -0
- airflow/migrations/versions/0020_2_10_0_added_dagpriorityparsingrequest_table.py +53 -0
- airflow/migrations/versions/0021_2_10_0_add_task_instance_history.py +106 -0
- airflow/migrations/versions/0022_2_10_0_add_dataset_alias.py +60 -0
- airflow/migrations/versions/0023_2_10_0_dataset_alias_dataset_event.py +68 -0
- airflow/migrations/versions/0024_2_10_0_add_try_number_to_audit_log.py +54 -0
- airflow/migrations/versions/0025_2_10_0_dataset_alias_dataset.py +69 -0
- airflow/migrations/versions/0026_2_10_0_dag_schedule_dataset_alias_reference.py +76 -0
- airflow/migrations/versions/0027_2_10_3_fix_dag_schedule_dataset_alias_reference_naming.py +238 -0
- airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key.py +95 -0
- airflow/migrations/versions/0029_3_0_0_remove_is_subdag.py +56 -0
- airflow/migrations/versions/0030_3_0_0_rename_schedule_interval_to_timetable_.py +60 -0
- airflow/migrations/versions/0031_3_0_0_add_triggered_by_field_to_dagrun.py +67 -0
- airflow/migrations/versions/0032_3_0_0_rename_execution_date_to_logical_date_and_nullable.py +128 -0
- airflow/migrations/versions/0033_3_0_0_add_tables_for_backfill.py +78 -0
- airflow/migrations/versions/0034_3_0_0_remove_redundant_index.py +49 -0
- airflow/migrations/versions/0035_3_0_0_update_user_id_type.py +52 -0
- airflow/migrations/versions/0036_3_0_0_add_name_field_to_dataset_model.py +137 -0
- airflow/migrations/versions/0037_3_0_0_add_backfill_to_dag_run_model.py +54 -0
- airflow/migrations/versions/0038_3_0_0_add_asset_active.py +77 -0
- airflow/migrations/versions/0039_3_0_0_tweak_assetaliasmodel_to_match_asset.py +83 -0
- airflow/migrations/versions/0040_3_0_0_add_exception_reason_and_logical_date_.py +57 -0
- airflow/migrations/versions/0041_3_0_0_rename_dataset_as_asset.py +754 -0
- airflow/migrations/versions/0042_3_0_0_add_uuid_primary_key_to_task_instance_.py +309 -0
- airflow/migrations/versions/0043_3_0_0_remove_scheduler_lock_column.py +49 -0
- airflow/migrations/versions/0044_3_0_0__drop_task_fail_table.py +75 -0
- airflow/migrations/versions/0045_3_0_0_add_last_heartbeat_at_directly_to_ti.py +60 -0
- airflow/migrations/versions/0046_3_0_0_drop_dag_pickling.py +66 -0
- airflow/migrations/versions/0047_3_0_0_add_dag_versioning.py +408 -0
- airflow/migrations/versions/0048_3_0_0_add_trigger_asset_reference.py +63 -0
- airflow/migrations/versions/0049_3_0_0_remove_pickled_data_from_xcom_table.py +184 -0
- airflow/migrations/versions/0050_3_0_0_add_dagbundlemodel.py +83 -0
- airflow/migrations/versions/0051_3_0_0_update_task_instance_trigger_timeout_to_utcdatetime.py +62 -0
- airflow/migrations/versions/0052_3_0_0_add_deadline_alerts_table.py +63 -0
- airflow/migrations/versions/0053_3_0_0_remove_processor_subdir.py +74 -0
- airflow/migrations/versions/0054_3_0_0_add_asset_reference_models.py +93 -0
- airflow/migrations/versions/0055_3_0_0_remove_pickled_data_from_dagrun_table.py +145 -0
- airflow/migrations/versions/0056_3_0_0_add_relative_fileloc_column.py +49 -0
- airflow/migrations/versions/0057_3_0_0_add_new_task_instance_field_scheduled_.py +58 -0
- airflow/migrations/versions/0058_3_0_0_add_dagrun_run_after.py +62 -0
- airflow/migrations/versions/0059_3_0_0_remove_external_trigger_field.py +58 -0
- airflow/migrations/versions/0060_3_0_0_add_try_id_to_ti_and_tih.py +162 -0
- airflow/migrations/versions/0061_3_0_0_use_ti_id_as_primary_key_to_TINote.py +151 -0
- airflow/migrations/versions/0062_3_0_0_remove_dag_default_view.py +48 -0
- airflow/migrations/versions/0063_3_0_0_use_ti_id_as_fk_to_taskreschedule.py +169 -0
- airflow/migrations/versions/0064_3_0_0_support_bundles_in_.py +61 -0
- airflow/migrations/versions/0065_3_0_0_add_new_otel_span_fields.py +76 -0
- airflow/migrations/versions/0066_3_0_0_rename_dataset_triggered_to_asset_triggered.py +47 -0
- airflow/migrations/versions/0067_3_0_0_rename_is_active_to_is_stale_column_in_.py +52 -0
- airflow/migrations/versions/0068_3_0_0_ti_table_id_unique_per_try.py +121 -0
- airflow/migrations/versions/__init__.py +17 -0
- airflow/models/__init__.py +143 -0
- airflow/models/abstractoperator.py +34 -0
- airflow/models/asset.py +764 -0
- airflow/models/backfill.py +500 -0
- airflow/models/base.py +95 -0
- airflow/models/baseoperator.py +693 -0
- airflow/models/baseoperatorlink.py +22 -0
- airflow/models/connection.py +558 -0
- airflow/models/crypto.py +92 -0
- airflow/models/dag.py +2629 -0
- airflow/models/dag_version.py +168 -0
- airflow/models/dagbag.py +698 -0
- airflow/models/dagbundle.py +45 -0
- airflow/models/dagcode.py +189 -0
- airflow/models/dagrun.py +1982 -0
- airflow/models/dagwarning.py +101 -0
- airflow/models/db_callback_request.py +55 -0
- airflow/models/deadline.py +92 -0
- airflow/models/errors.py +34 -0
- airflow/models/expandinput.py +140 -0
- airflow/models/log.py +101 -0
- airflow/models/mappedoperator.py +120 -0
- airflow/models/operator.py +28 -0
- airflow/models/param.py +22 -0
- airflow/models/pool.py +352 -0
- airflow/models/renderedtifields.py +282 -0
- airflow/models/serialized_dag.py +699 -0
- airflow/models/skipmixin.py +22 -0
- airflow/models/taskinstance.py +3471 -0
- airflow/models/taskinstancehistory.py +178 -0
- airflow/models/taskinstancekey.py +53 -0
- airflow/models/tasklog.py +44 -0
- airflow/models/taskmap.py +266 -0
- airflow/models/taskmixin.py +28 -0
- airflow/models/taskreschedule.py +94 -0
- airflow/models/trigger.py +450 -0
- airflow/models/variable.py +414 -0
- airflow/models/xcom.py +413 -0
- airflow/models/xcom_arg.py +192 -0
- airflow/operators/__init__.py +69 -0
- airflow/plugins_manager.py +633 -0
- airflow/policies.py +214 -0
- airflow/provider.yaml.schema.json +547 -0
- airflow/provider_info.schema.json +479 -0
- airflow/providers_manager.py +1276 -0
- airflow/py.typed +18 -0
- airflow/secrets/__init__.py +41 -0
- airflow/secrets/base_secrets.py +98 -0
- airflow/secrets/cache.py +130 -0
- airflow/secrets/environment_variables.py +43 -0
- airflow/secrets/local_filesystem.py +310 -0
- airflow/secrets/metastore.py +68 -0
- airflow/security/__init__.py +17 -0
- airflow/security/kerberos.py +212 -0
- airflow/security/permissions.py +126 -0
- airflow/security/utils.py +84 -0
- airflow/sensors/__init__.py +61 -0
- airflow/sensors/base.py +24 -0
- airflow/sentry.py +196 -0
- airflow/serialization/__init__.py +18 -0
- airflow/serialization/dag_dependency.py +121 -0
- airflow/serialization/enums.py +77 -0
- airflow/serialization/helpers.py +80 -0
- airflow/serialization/json_schema.py +72 -0
- airflow/serialization/schema.json +394 -0
- airflow/serialization/serde.py +390 -0
- airflow/serialization/serialized_objects.py +2189 -0
- airflow/serialization/serializers/__init__.py +17 -0
- airflow/serialization/serializers/bignum.py +59 -0
- airflow/serialization/serializers/builtin.py +59 -0
- airflow/serialization/serializers/datetime.py +101 -0
- airflow/serialization/serializers/deltalake.py +79 -0
- airflow/serialization/serializers/iceberg.py +76 -0
- airflow/serialization/serializers/kubernetes.py +64 -0
- airflow/serialization/serializers/numpy.py +92 -0
- airflow/serialization/serializers/pandas.py +70 -0
- airflow/serialization/serializers/timezone.py +102 -0
- airflow/settings.py +687 -0
- airflow/stats.py +79 -0
- airflow/task/__init__.py +17 -0
- airflow/task/priority_strategy.py +152 -0
- airflow/ti_deps/__init__.py +17 -0
- airflow/ti_deps/dep_context.py +105 -0
- airflow/ti_deps/dependencies_deps.py +74 -0
- airflow/ti_deps/dependencies_states.py +44 -0
- airflow/ti_deps/deps/__init__.py +18 -0
- airflow/ti_deps/deps/base_ti_dep.py +163 -0
- airflow/ti_deps/deps/dag_ti_slots_available_dep.py +38 -0
- airflow/ti_deps/deps/dag_unpaused_dep.py +33 -0
- airflow/ti_deps/deps/dagrun_exists_dep.py +37 -0
- airflow/ti_deps/deps/exec_date_after_start_date_dep.py +51 -0
- airflow/ti_deps/deps/mapped_task_expanded.py +36 -0
- airflow/ti_deps/deps/mapped_task_upstream_dep.py +104 -0
- airflow/ti_deps/deps/not_in_retry_period_dep.py +56 -0
- airflow/ti_deps/deps/not_previously_skipped_dep.py +100 -0
- airflow/ti_deps/deps/pool_slots_available_dep.py +68 -0
- airflow/ti_deps/deps/prev_dagrun_dep.py +213 -0
- airflow/ti_deps/deps/ready_to_reschedule.py +95 -0
- airflow/ti_deps/deps/runnable_exec_date_dep.py +61 -0
- airflow/ti_deps/deps/task_concurrency_dep.py +51 -0
- airflow/ti_deps/deps/task_not_running_dep.py +47 -0
- airflow/ti_deps/deps/trigger_rule_dep.py +592 -0
- airflow/ti_deps/deps/valid_state_dep.py +64 -0
- airflow/timetables/__init__.py +19 -0
- airflow/timetables/_cron.py +152 -0
- airflow/timetables/_delta.py +56 -0
- airflow/timetables/assets.py +97 -0
- airflow/timetables/base.py +295 -0
- airflow/timetables/datasets.py +33 -0
- airflow/timetables/events.py +134 -0
- airflow/timetables/interval.py +251 -0
- airflow/timetables/simple.py +210 -0
- airflow/timetables/trigger.py +369 -0
- airflow/traces/__init__.py +21 -0
- airflow/traces/otel_tracer.py +377 -0
- airflow/traces/tracer.py +304 -0
- airflow/traces/utils.py +114 -0
- airflow/triggers/__init__.py +35 -0
- airflow/triggers/base.py +239 -0
- airflow/triggers/testing.py +53 -0
- airflow/typing_compat.py +50 -0
- airflow/ui/.env.example +21 -0
- airflow/ui/.gitignore +1 -0
- airflow/ui/.prettierignore +7 -0
- airflow/ui/.prettierrc +13 -0
- airflow/ui/CONTRIBUTING.md +35 -0
- airflow/ui/README.md +69 -0
- airflow/ui/dev/index.html +24 -0
- airflow/ui/dist/.vite/manifest.json +20 -0
- airflow/ui/dist/assets/FailedLogs-Bt_DLoX8.js +1 -0
- airflow/ui/dist/assets/index-DVWpfKkn.js +1513 -0
- airflow/ui/dist/index.html +15 -0
- airflow/ui/dist/pin_100.png +0 -0
- airflow/ui/dist/pin_32.png +0 -0
- airflow/ui/eslint.config.js +47 -0
- airflow/ui/index.html +14 -0
- airflow/ui/openapi-gen/queries/common.ts +1902 -0
- airflow/ui/openapi-gen/queries/ensureQueryData.ts +2518 -0
- airflow/ui/openapi-gen/queries/index.ts +4 -0
- airflow/ui/openapi-gen/queries/infiniteQueries.ts +1 -0
- airflow/ui/openapi-gen/queries/prefetch.ts +2518 -0
- airflow/ui/openapi-gen/queries/queries.ts +4729 -0
- airflow/ui/openapi-gen/queries/suspense.ts +2974 -0
- airflow/ui/openapi-gen/requests/core/ApiError.ts +21 -0
- airflow/ui/openapi-gen/requests/core/ApiRequestOptions.ts +14 -0
- airflow/ui/openapi-gen/requests/core/ApiResult.ts +7 -0
- airflow/ui/openapi-gen/requests/core/CancelablePromise.ts +126 -0
- airflow/ui/openapi-gen/requests/core/OpenAPI.ts +58 -0
- airflow/ui/openapi-gen/requests/core/request.ts +374 -0
- airflow/ui/openapi-gen/requests/index.ts +7 -0
- airflow/ui/openapi-gen/requests/schemas.gen.ts +6966 -0
- airflow/ui/openapi-gen/requests/services.gen.ts +3587 -0
- airflow/ui/openapi-gen/requests/types.gen.ts +5490 -0
- airflow/ui/openapi-merge.json +11 -0
- airflow/ui/package.json +93 -0
- airflow/ui/pnpm-lock.yaml +9348 -0
- airflow/ui/public/pin_100.png +0 -0
- airflow/ui/public/pin_32.png +0 -0
- airflow/ui/rules/core.js +1448 -0
- airflow/ui/rules/levels.js +27 -0
- airflow/ui/rules/off.js +29 -0
- airflow/ui/rules/perfectionist.js +139 -0
- airflow/ui/rules/plugin-patch.d.ts +49 -0
- airflow/ui/rules/prettier.js +39 -0
- airflow/ui/rules/react.js +623 -0
- airflow/ui/rules/stylistic.js +91 -0
- airflow/ui/rules/typescript.js +1889 -0
- airflow/ui/rules/unicorn.js +1281 -0
- airflow/ui/src/assets/AirflowPin.tsx +76 -0
- airflow/ui/src/assets/DagIcon.tsx +53 -0
- airflow/ui/src/assets/TaskIcon.tsx +35 -0
- airflow/ui/src/components/ActionAccordion/ActionAccordion.tsx +103 -0
- airflow/ui/src/components/ActionAccordion/columns.tsx +65 -0
- airflow/ui/src/components/ActionAccordion/index.tsx +20 -0
- airflow/ui/src/components/AssetExpression/AndGateNode.tsx +53 -0
- airflow/ui/src/components/AssetExpression/AssetExpression.tsx +83 -0
- airflow/ui/src/components/AssetExpression/AssetNode.tsx +61 -0
- airflow/ui/src/components/AssetExpression/OrGateNode.tsx +28 -0
- airflow/ui/src/components/AssetExpression/index.ts +21 -0
- airflow/ui/src/components/AssetExpression/types.ts +46 -0
- airflow/ui/src/components/Assets/AssetEvent.tsx +92 -0
- airflow/ui/src/components/Assets/AssetEvents.tsx +116 -0
- airflow/ui/src/components/Assets/TriggeredRuns.tsx +70 -0
- airflow/ui/src/components/Banner/BackfillBanner.tsx +120 -0
- airflow/ui/src/components/Banner/index.tsx +20 -0
- airflow/ui/src/components/BreadcrumbStats.tsx +53 -0
- airflow/ui/src/components/Clear/Run/ClearRunButton.tsx +50 -0
- airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx +130 -0
- airflow/ui/src/components/Clear/Run/index.tsx +20 -0
- airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceButton.tsx +52 -0
- airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx +157 -0
- airflow/ui/src/components/Clear/TaskInstance/index.tsx +20 -0
- airflow/ui/src/components/Clear/columns.tsx +66 -0
- airflow/ui/src/components/Clear/index.tsx +21 -0
- airflow/ui/src/components/ConfirmationModal.tsx +59 -0
- airflow/ui/src/components/DagActions/ParseDag.tsx +45 -0
- airflow/ui/src/components/DagActions/RunBackfillButton.tsx +45 -0
- airflow/ui/src/components/DagActions/RunBackfillForm.tsx +243 -0
- airflow/ui/src/components/DagActions/RunBackfillModal.tsx +47 -0
- airflow/ui/src/components/DagRunInfo.tsx +68 -0
- airflow/ui/src/components/DagVersion.tsx +36 -0
- airflow/ui/src/components/DagVersionDetails.tsx +63 -0
- airflow/ui/src/components/DagVersionSelect.tsx +102 -0
- airflow/ui/src/components/DataTable/CardList.tsx +42 -0
- airflow/ui/src/components/DataTable/DataTable.test.tsx +162 -0
- airflow/ui/src/components/DataTable/DataTable.tsx +164 -0
- airflow/ui/src/components/DataTable/FilterMenuButton.tsx +70 -0
- airflow/ui/src/components/DataTable/TableList.tsx +103 -0
- airflow/ui/src/components/DataTable/ToggleTableDisplay.tsx +60 -0
- airflow/ui/src/components/DataTable/index.ts +20 -0
- airflow/ui/src/components/DataTable/searchParams.test.ts +79 -0
- airflow/ui/src/components/DataTable/searchParams.ts +82 -0
- airflow/ui/src/components/DataTable/skeleton.tsx +51 -0
- airflow/ui/src/components/DataTable/types.ts +42 -0
- airflow/ui/src/components/DataTable/useRowSelection.ts +87 -0
- airflow/ui/src/components/DataTable/useTableUrlState.ts +62 -0
- airflow/ui/src/components/DisplayMarkdownButton.tsx +65 -0
- airflow/ui/src/components/DurationChart.tsx +169 -0
- airflow/ui/src/components/EditableMarkdownButton.tsx +119 -0
- airflow/ui/src/components/ErrorAlert.tsx +64 -0
- airflow/ui/src/components/FlexibleForm/FieldAdvancedArray.tsx +87 -0
- airflow/ui/src/components/FlexibleForm/FieldBool.tsx +44 -0
- airflow/ui/src/components/FlexibleForm/FieldDateTime.tsx +54 -0
- airflow/ui/src/components/FlexibleForm/FieldDropdown.tsx +82 -0
- airflow/ui/src/components/FlexibleForm/FieldMultiSelect.tsx +87 -0
- airflow/ui/src/components/FlexibleForm/FieldMultilineText.tsx +48 -0
- airflow/ui/src/components/FlexibleForm/FieldNumber.tsx +59 -0
- airflow/ui/src/components/FlexibleForm/FieldObject.tsx +59 -0
- airflow/ui/src/components/FlexibleForm/FieldRow.tsx +61 -0
- airflow/ui/src/components/FlexibleForm/FieldSelector.tsx +121 -0
- airflow/ui/src/components/FlexibleForm/FieldString.tsx +64 -0
- airflow/ui/src/components/FlexibleForm/FieldStringArray.tsx +67 -0
- airflow/ui/src/components/FlexibleForm/FlexibleForm.tsx +89 -0
- airflow/ui/src/components/FlexibleForm/HiddenInput.tsx +40 -0
- airflow/ui/src/components/FlexibleForm/Row.tsx +34 -0
- airflow/ui/src/components/FlexibleForm/index.tsx +27 -0
- airflow/ui/src/components/Graph/AliasNode.tsx +50 -0
- airflow/ui/src/components/Graph/AssetConditionNode.tsx +43 -0
- airflow/ui/src/components/Graph/AssetNode.tsx +91 -0
- airflow/ui/src/components/Graph/DagNode.tsx +58 -0
- airflow/ui/src/components/Graph/DefaultNode.tsx +39 -0
- airflow/ui/src/components/Graph/DownloadButton.tsx +79 -0
- airflow/ui/src/components/Graph/Edge.tsx +79 -0
- airflow/ui/src/components/Graph/JoinNode.tsx +34 -0
- airflow/ui/src/components/Graph/NodeWrapper.tsx +28 -0
- airflow/ui/src/components/Graph/TaskLink.tsx +50 -0
- airflow/ui/src/components/Graph/TaskNode.tsx +149 -0
- airflow/ui/src/components/Graph/graphTypes.ts +39 -0
- airflow/ui/src/components/Graph/reactflowUtils.ts +146 -0
- airflow/ui/src/components/Graph/useGraphLayout.ts +271 -0
- airflow/ui/src/components/HeaderCard.tsx +56 -0
- airflow/ui/src/components/JsonEditor.tsx +51 -0
- airflow/ui/src/components/LimitedItemsList.tsx +70 -0
- airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx +79 -0
- airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx +78 -0
- airflow/ui/src/components/MarkAs/Run/index.tsx +20 -0
- airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx +82 -0
- airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx +142 -0
- airflow/ui/src/components/MarkAs/TaskInstance/index.tsx +20 -0
- airflow/ui/src/components/MarkAs/index.tsx +21 -0
- airflow/ui/src/components/MarkAs/utils.ts +21 -0
- airflow/ui/src/components/QuickFilterButton.tsx +39 -0
- airflow/ui/src/components/ReactMarkdown.tsx +117 -0
- airflow/ui/src/components/RenderedJsonField.tsx +56 -0
- airflow/ui/src/components/RunTypeIcon.tsx +48 -0
- airflow/ui/src/components/SearchBar.test.tsx +49 -0
- airflow/ui/src/components/SearchBar.tsx +106 -0
- airflow/ui/src/components/SearchDags/SearchDags.tsx +93 -0
- airflow/ui/src/components/SearchDags/SearchDagsButton.tsx +58 -0
- airflow/ui/src/components/SearchDags/SearchDagsDropdownIndicator.tsx +29 -0
- airflow/ui/src/components/SearchDags/index.ts +20 -0
- airflow/ui/src/components/Stat.tsx +33 -0
- airflow/ui/src/components/StateBadge.tsx +44 -0
- airflow/ui/src/components/StateIcon.tsx +61 -0
- airflow/ui/src/components/TaskInstanceTooltip.tsx +70 -0
- airflow/ui/src/components/TaskName.tsx +87 -0
- airflow/ui/src/components/TaskTrySelect.tsx +150 -0
- airflow/ui/src/components/Time.test.tsx +61 -0
- airflow/ui/src/components/Time.tsx +65 -0
- airflow/ui/src/components/TimeRangeSelector.tsx +88 -0
- airflow/ui/src/components/TogglePause.tsx +75 -0
- airflow/ui/src/components/TrendCountButton.tsx +66 -0
- airflow/ui/src/components/TrendCountChart.tsx +149 -0
- airflow/ui/src/components/TriggerDag/EditableMarkdown.tsx +53 -0
- airflow/ui/src/components/TriggerDag/TriggerDAGButton.tsx +59 -0
- airflow/ui/src/components/TriggerDag/TriggerDAGForm.tsx +224 -0
- airflow/ui/src/components/TriggerDag/TriggerDAGModal.tsx +58 -0
- airflow/ui/src/components/TruncatedText.tsx +40 -0
- airflow/ui/src/components/WarningAlert.tsx +39 -0
- airflow/ui/src/components/renderStructuredLog.tsx +218 -0
- airflow/ui/src/components/ui/Accordion/ItemContent.tsx +28 -0
- airflow/ui/src/components/ui/Accordion/ItemTrigger.tsx +47 -0
- airflow/ui/src/components/ui/Accordion/index.tsx +28 -0
- airflow/ui/src/components/ui/ActionBar/BarContent.tsx +39 -0
- airflow/ui/src/components/ui/ActionBar/CloseTrigger.tsx +28 -0
- airflow/ui/src/components/ui/ActionBar/index.ts +28 -0
- airflow/ui/src/components/ui/ActionButton.tsx +68 -0
- airflow/ui/src/components/ui/Alert.tsx +60 -0
- airflow/ui/src/components/ui/Breadcrumb/Root.tsx +49 -0
- airflow/ui/src/components/ui/Breadcrumb/index.ts +26 -0
- airflow/ui/src/components/ui/Button.tsx +52 -0
- airflow/ui/src/components/ui/Checkbox.tsx +38 -0
- airflow/ui/src/components/ui/Clipboard.tsx +89 -0
- airflow/ui/src/components/ui/CloseButton.tsx +30 -0
- airflow/ui/src/components/ui/DagWarningsModal.tsx +70 -0
- airflow/ui/src/components/ui/Dialog/CloseTrigger.tsx +36 -0
- airflow/ui/src/components/ui/Dialog/Content.tsx +41 -0
- airflow/ui/src/components/ui/Dialog/index.ts +28 -0
- airflow/ui/src/components/ui/FileUpload/Dropzone.tsx +43 -0
- airflow/ui/src/components/ui/FileUpload/FileInput.tsx +52 -0
- airflow/ui/src/components/ui/FileUpload/Item.tsx +61 -0
- airflow/ui/src/components/ui/FileUpload/List.tsx +51 -0
- airflow/ui/src/components/ui/FileUpload/Root.tsx +35 -0
- airflow/ui/src/components/ui/FileUpload/index.ts +34 -0
- airflow/ui/src/components/ui/InputGroup.tsx +57 -0
- airflow/ui/src/components/ui/Menu/Menu.tsx +26 -0
- airflow/ui/src/components/ui/Menu/MenuContent.tsx +37 -0
- airflow/ui/src/components/ui/Menu/index.ts +20 -0
- airflow/ui/src/components/ui/NumberInput.tsx +40 -0
- airflow/ui/src/components/ui/Pagination/Ellipsis.tsx +37 -0
- airflow/ui/src/components/ui/Pagination/Item.tsx +48 -0
- airflow/ui/src/components/ui/Pagination/Items.tsx +36 -0
- airflow/ui/src/components/ui/Pagination/NextTrigger.tsx +37 -0
- airflow/ui/src/components/ui/Pagination/PageText.tsx +46 -0
- airflow/ui/src/components/ui/Pagination/PrevTrigger.tsx +37 -0
- airflow/ui/src/components/ui/Pagination/Root.tsx +54 -0
- airflow/ui/src/components/ui/Pagination/context.ts +34 -0
- airflow/ui/src/components/ui/Pagination/index.ts +35 -0
- airflow/ui/src/components/ui/Popover/Arrow.tsx +26 -0
- airflow/ui/src/components/ui/Popover/CloseTrigger.tsx +30 -0
- airflow/ui/src/components/ui/Popover/Content.tsx +37 -0
- airflow/ui/src/components/ui/Popover/index.tsx +30 -0
- airflow/ui/src/components/ui/ProgressBar.tsx +30 -0
- airflow/ui/src/components/ui/RadioCard.tsx +82 -0
- airflow/ui/src/components/ui/SegmentedControl.tsx +69 -0
- airflow/ui/src/components/ui/Select/Content.tsx +37 -0
- airflow/ui/src/components/ui/Select/Item.tsx +34 -0
- airflow/ui/src/components/ui/Select/ItemGroup.tsx +35 -0
- airflow/ui/src/components/ui/Select/Root.tsx +24 -0
- airflow/ui/src/components/ui/Select/Trigger.tsx +51 -0
- airflow/ui/src/components/ui/Select/ValueText.tsx +51 -0
- airflow/ui/src/components/ui/Select/index.ts +36 -0
- airflow/ui/src/components/ui/Switch.tsx +50 -0
- airflow/ui/src/components/ui/Tag.tsx +44 -0
- airflow/ui/src/components/ui/Toaster/Toaster.tsx +41 -0
- airflow/ui/src/components/ui/Toaster/createToaster.ts +24 -0
- airflow/ui/src/components/ui/Toaster/index.ts +21 -0
- airflow/ui/src/components/ui/Tooltip.tsx +64 -0
- airflow/ui/src/components/ui/index.ts +35 -0
- airflow/ui/src/constants/reprocessBehaviourParams.ts +23 -0
- airflow/ui/src/constants/searchParams.ts +38 -0
- airflow/ui/src/constants/sortParams.ts +38 -0
- airflow/ui/src/constants/stateOptions.ts +63 -0
- airflow/ui/src/constants/urlRegex.ts +20 -0
- airflow/ui/src/context/colorMode/ColorModeProvider.tsx +24 -0
- airflow/ui/src/context/colorMode/index.ts +21 -0
- airflow/ui/src/context/colorMode/useColorMode.tsx +32 -0
- airflow/ui/src/context/openGroups/Context.ts +27 -0
- airflow/ui/src/context/openGroups/OpenGroupsProvider.tsx +49 -0
- airflow/ui/src/context/openGroups/index.ts +22 -0
- airflow/ui/src/context/openGroups/useOpenGroups.ts +31 -0
- airflow/ui/src/context/timezone/Context.ts +26 -0
- airflow/ui/src/context/timezone/TimezoneProvider.tsx +37 -0
- airflow/ui/src/context/timezone/index.ts +22 -0
- airflow/ui/src/context/timezone/useTimezone.ts +31 -0
- airflow/ui/src/hooks/useSelectedVersion.ts +92 -0
- airflow/ui/src/layouts/BaseLayout.tsx +42 -0
- airflow/ui/src/layouts/DagsLayout.tsx +35 -0
- airflow/ui/src/layouts/Details/DagBreadcrumb.tsx +108 -0
- airflow/ui/src/layouts/Details/DagRunSelect.tsx +105 -0
- airflow/ui/src/layouts/Details/DetailsLayout.tsx +133 -0
- airflow/ui/src/layouts/Details/Gantt/Gantt.tsx +21 -0
- airflow/ui/src/layouts/Details/Gantt/index.ts +20 -0
- airflow/ui/src/layouts/Details/Graph/Graph.tsx +204 -0
- airflow/ui/src/layouts/Details/Graph/index.ts +20 -0
- airflow/ui/src/layouts/Details/Grid/Bar.tsx +80 -0
- airflow/ui/src/layouts/Details/Grid/DurationAxis.tsx +23 -0
- airflow/ui/src/layouts/Details/Grid/DurationTick.tsx +25 -0
- airflow/ui/src/layouts/Details/Grid/Grid.tsx +117 -0
- airflow/ui/src/layouts/Details/Grid/GridButton.tsx +79 -0
- airflow/ui/src/layouts/Details/Grid/GridTI.tsx +122 -0
- airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx +60 -0
- airflow/ui/src/layouts/Details/Grid/TaskNames.tsx +101 -0
- airflow/ui/src/layouts/Details/Grid/index.ts +20 -0
- airflow/ui/src/layouts/Details/Grid/utils.ts +58 -0
- airflow/ui/src/layouts/Details/NavTabs.tsx +63 -0
- airflow/ui/src/layouts/Details/PanelButtons.tsx +232 -0
- airflow/ui/src/layouts/Details/ToggleGroups.tsx +81 -0
- airflow/ui/src/layouts/Nav/AdminButton.tsx +77 -0
- airflow/ui/src/layouts/Nav/BrowseButton.tsx +61 -0
- airflow/ui/src/layouts/Nav/DocsButton.tsx +80 -0
- airflow/ui/src/layouts/Nav/LogoutModal.tsx +44 -0
- airflow/ui/src/layouts/Nav/Nav.tsx +79 -0
- airflow/ui/src/layouts/Nav/NavButton.tsx +55 -0
- airflow/ui/src/layouts/Nav/PluginMenus.tsx +92 -0
- airflow/ui/src/layouts/Nav/SecurityButton.tsx +50 -0
- airflow/ui/src/layouts/Nav/TimezoneModal.tsx +42 -0
- airflow/ui/src/layouts/Nav/TimezoneSelector.tsx +79 -0
- airflow/ui/src/layouts/Nav/UserSettingsButton.tsx +93 -0
- airflow/ui/src/layouts/Nav/index.ts +20 -0
- airflow/ui/src/main.tsx +76 -0
- airflow/ui/src/mocks/handlers/config.ts +42 -0
- airflow/ui/src/mocks/handlers/dag.ts +65 -0
- airflow/ui/src/mocks/handlers/dags.ts +189 -0
- airflow/ui/src/mocks/handlers/index.ts +24 -0
- airflow/ui/src/mocks/handlers/log.ts +194 -0
- airflow/ui/src/pages/Asset/Asset.tsx +121 -0
- airflow/ui/src/pages/Asset/AssetGraph.tsx +89 -0
- airflow/ui/src/pages/Asset/CreateAssetEvent.tsx +54 -0
- airflow/ui/src/pages/Asset/CreateAssetEventModal.tsx +218 -0
- airflow/ui/src/pages/Asset/Header.tsx +46 -0
- airflow/ui/src/pages/Asset/index.ts +20 -0
- airflow/ui/src/pages/AssetsList/AssetsList.tsx +140 -0
- airflow/ui/src/pages/AssetsList/DependencyPopover.tsx +64 -0
- airflow/ui/src/pages/AssetsList/index.ts +20 -0
- airflow/ui/src/pages/Configs/Configs.tsx +71 -0
- airflow/ui/src/pages/Configs/index.ts +20 -0
- airflow/ui/src/pages/Connections/AddConnectionButton.tsx +80 -0
- airflow/ui/src/pages/Connections/ConnectionForm.tsx +242 -0
- airflow/ui/src/pages/Connections/ConnectionStandardFields.tsx +98 -0
- airflow/ui/src/pages/Connections/Connections.tsx +150 -0
- airflow/ui/src/pages/Connections/DeleteConnectionButton.tsx +87 -0
- airflow/ui/src/pages/Connections/EditConnectionButton.tsx +92 -0
- airflow/ui/src/pages/Connections/index.ts +20 -0
- airflow/ui/src/pages/Dag/Backfills/Backfills.tsx +135 -0
- airflow/ui/src/pages/Dag/Backfills/index.ts +20 -0
- airflow/ui/src/pages/Dag/Code/Code.tsx +185 -0
- airflow/ui/src/pages/Dag/Code/index.ts +20 -0
- airflow/ui/src/pages/Dag/Dag.tsx +99 -0
- airflow/ui/src/pages/Dag/DagHeader.test.tsx +66 -0
- airflow/ui/src/pages/Dag/Details.tsx +138 -0
- airflow/ui/src/pages/Dag/Header.tsx +118 -0
- airflow/ui/src/pages/Dag/Overview/FailedLogs.tsx +65 -0
- airflow/ui/src/pages/Dag/Overview/Overview.tsx +151 -0
- airflow/ui/src/pages/Dag/Overview/TaskLogPreview.tsx +76 -0
- airflow/ui/src/pages/Dag/Overview/index.ts +20 -0
- airflow/ui/src/pages/Dag/Tasks/TaskCard.tsx +97 -0
- airflow/ui/src/pages/Dag/Tasks/TaskRecentRuns.tsx +71 -0
- airflow/ui/src/pages/Dag/Tasks/Tasks.tsx +67 -0
- airflow/ui/src/pages/Dag/Tasks/index.ts +20 -0
- airflow/ui/src/pages/Dag/index.ts +20 -0
- airflow/ui/src/pages/DagRuns.tsx +286 -0
- airflow/ui/src/pages/DagsList/AssetSchedule.tsx +87 -0
- airflow/ui/src/pages/DagsList/DagCard.test.tsx +107 -0
- airflow/ui/src/pages/DagsList/DagCard.tsx +91 -0
- airflow/ui/src/pages/DagsList/DagTags.tsx +37 -0
- airflow/ui/src/pages/DagsList/DagsFilters.tsx +244 -0
- airflow/ui/src/pages/DagsList/DagsList.test.tsx +37 -0
- airflow/ui/src/pages/DagsList/DagsList.tsx +260 -0
- airflow/ui/src/pages/DagsList/RecentRuns.tsx +98 -0
- airflow/ui/src/pages/DagsList/Schedule.tsx +42 -0
- airflow/ui/src/pages/DagsList/SortSelect.tsx +48 -0
- airflow/ui/src/pages/DagsList/index.ts +20 -0
- airflow/ui/src/pages/Dashboard/Dashboard.tsx +70 -0
- airflow/ui/src/pages/Dashboard/Health/Health.tsx +64 -0
- airflow/ui/src/pages/Dashboard/Health/HealthBadge.tsx +60 -0
- airflow/ui/src/pages/Dashboard/Health/HealthSection.tsx +59 -0
- airflow/ui/src/pages/Dashboard/Health/index.ts +20 -0
- airflow/ui/src/pages/Dashboard/HistoricalMetrics/DagRunMetrics.tsx +62 -0
- airflow/ui/src/pages/Dashboard/HistoricalMetrics/HistoricalMetrics.tsx +102 -0
- airflow/ui/src/pages/Dashboard/HistoricalMetrics/MetricSection.tsx +88 -0
- airflow/ui/src/pages/Dashboard/HistoricalMetrics/MetricSectionSkeleton.tsx +26 -0
- airflow/ui/src/pages/Dashboard/HistoricalMetrics/TaskInstanceMetrics.tsx +84 -0
- airflow/ui/src/pages/Dashboard/HistoricalMetrics/index.ts +20 -0
- airflow/ui/src/pages/Dashboard/Stats/DAGImportErrors.tsx +82 -0
- airflow/ui/src/pages/Dashboard/Stats/DAGImportErrorsModal.tsx +115 -0
- airflow/ui/src/pages/Dashboard/Stats/DagFilterButton.tsx +44 -0
- airflow/ui/src/pages/Dashboard/Stats/Stats.tsx +48 -0
- airflow/ui/src/pages/Dashboard/Stats/index.ts +20 -0
- airflow/ui/src/pages/Dashboard/index.ts +20 -0
- airflow/ui/src/pages/Error.tsx +73 -0
- airflow/ui/src/pages/Events/Events.tsx +157 -0
- airflow/ui/src/pages/Events/index.tsx +20 -0
- airflow/ui/src/pages/MappedTaskInstance/Header.tsx +65 -0
- airflow/ui/src/pages/MappedTaskInstance/MappedTaskInstance.tsx +89 -0
- airflow/ui/src/pages/MappedTaskInstance/index.ts +20 -0
- airflow/ui/src/pages/Plugins.tsx +55 -0
- airflow/ui/src/pages/Pools/AddPoolButton.tsx +75 -0
- airflow/ui/src/pages/Pools/DeletePoolButton.tsx +85 -0
- airflow/ui/src/pages/Pools/EditPoolButton.tsx +85 -0
- airflow/ui/src/pages/Pools/PoolBar.tsx +102 -0
- airflow/ui/src/pages/Pools/PoolForm.tsx +140 -0
- airflow/ui/src/pages/Pools/Pools.tsx +136 -0
- airflow/ui/src/pages/Pools/index.tsx +20 -0
- airflow/ui/src/pages/Providers.tsx +87 -0
- airflow/ui/src/pages/Run/Details.tsx +156 -0
- airflow/ui/src/pages/Run/Header.tsx +124 -0
- airflow/ui/src/pages/Run/Run.tsx +77 -0
- airflow/ui/src/pages/Run/index.ts +20 -0
- airflow/ui/src/pages/Security.tsx +56 -0
- airflow/ui/src/pages/Task/Header.tsx +45 -0
- airflow/ui/src/pages/Task/Overview/Overview.tsx +106 -0
- airflow/ui/src/pages/Task/Overview/index.ts +20 -0
- airflow/ui/src/pages/Task/Task.tsx +55 -0
- airflow/ui/src/pages/Task/index.ts +20 -0
- airflow/ui/src/pages/TaskInstance/BlockingDeps.tsx +57 -0
- airflow/ui/src/pages/TaskInstance/Details.tsx +243 -0
- airflow/ui/src/pages/TaskInstance/ExtraLinks.tsx +50 -0
- airflow/ui/src/pages/TaskInstance/Header.tsx +114 -0
- airflow/ui/src/pages/TaskInstance/Logs/Logs.test.tsx +52 -0
- airflow/ui/src/pages/TaskInstance/Logs/Logs.tsx +134 -0
- airflow/ui/src/pages/TaskInstance/Logs/TaskLogContent.tsx +76 -0
- airflow/ui/src/pages/TaskInstance/Logs/TaskLogHeader.tsx +194 -0
- airflow/ui/src/pages/TaskInstance/Logs/index.ts +20 -0
- airflow/ui/src/pages/TaskInstance/RenderedTemplates.tsx +64 -0
- airflow/ui/src/pages/TaskInstance/TaskInstance.tsx +82 -0
- airflow/ui/src/pages/TaskInstance/TriggererInfo.tsx +58 -0
- airflow/ui/src/pages/TaskInstance/index.ts +21 -0
- airflow/ui/src/pages/TaskInstances/TaskInstances.tsx +226 -0
- airflow/ui/src/pages/TaskInstances/TaskInstancesFilter.tsx +134 -0
- airflow/ui/src/pages/TaskInstances/index.ts +19 -0
- airflow/ui/src/pages/Variables/DeleteVariablesButton.tsx +101 -0
- airflow/ui/src/pages/Variables/ImportVariablesButton.tsx +58 -0
- airflow/ui/src/pages/Variables/ImportVariablesForm.tsx +211 -0
- airflow/ui/src/pages/Variables/ManageVariable/AddVariableButton.tsx +78 -0
- airflow/ui/src/pages/Variables/ManageVariable/DeleteVariableButton.tsx +87 -0
- airflow/ui/src/pages/Variables/ManageVariable/EditVariableButton.tsx +87 -0
- airflow/ui/src/pages/Variables/ManageVariable/VariableForm.tsx +127 -0
- airflow/ui/src/pages/Variables/Variables.tsx +229 -0
- airflow/ui/src/pages/Variables/index.tsx +20 -0
- airflow/ui/src/pages/XCom/XCom.tsx +133 -0
- airflow/ui/src/pages/XCom/XComEntry.tsx +60 -0
- airflow/ui/src/pages/XCom/index.ts +20 -0
- airflow/ui/src/queries/useAddConnection.ts +79 -0
- airflow/ui/src/queries/useAddPool.ts +67 -0
- airflow/ui/src/queries/useAddVariable.ts +67 -0
- airflow/ui/src/queries/useBulkDeleteVariables.ts +70 -0
- airflow/ui/src/queries/useClearDagRunDryRun.ts +51 -0
- airflow/ui/src/queries/useClearRun.ts +71 -0
- airflow/ui/src/queries/useClearTaskInstances.ts +97 -0
- airflow/ui/src/queries/useClearTaskInstancesDryRun.ts +48 -0
- airflow/ui/src/queries/useConfig.tsx +26 -0
- airflow/ui/src/queries/useConnectionTypeMeta.ts +115 -0
- airflow/ui/src/queries/useCreateBackfill.ts +90 -0
- airflow/ui/src/queries/useCreateBackfillDryRun.ts +60 -0
- airflow/ui/src/queries/useDagParams.ts +73 -0
- airflow/ui/src/queries/useDagParsing.ts +64 -0
- airflow/ui/src/queries/useDags.tsx +87 -0
- airflow/ui/src/queries/useDeleteConnection.ts +53 -0
- airflow/ui/src/queries/useDeletePool.ts +53 -0
- airflow/ui/src/queries/useDeleteVariable.ts +53 -0
- airflow/ui/src/queries/useDependencyGraph.ts +52 -0
- airflow/ui/src/queries/useEditConnection.tsx +101 -0
- airflow/ui/src/queries/useEditPool.ts +89 -0
- airflow/ui/src/queries/useEditVariable.ts +85 -0
- airflow/ui/src/queries/useGrid.ts +72 -0
- airflow/ui/src/queries/useImportVariables.ts +64 -0
- airflow/ui/src/queries/useLogs.tsx +157 -0
- airflow/ui/src/queries/useParamStore.ts +102 -0
- airflow/ui/src/queries/usePatchDagRun.ts +71 -0
- airflow/ui/src/queries/usePatchTaskInstance.ts +77 -0
- airflow/ui/src/queries/usePatchTaskInstanceDryRun.ts +67 -0
- airflow/ui/src/queries/useTogglePause.ts +50 -0
- airflow/ui/src/queries/useTrigger.ts +88 -0
- airflow/ui/src/queryClient.ts +44 -0
- airflow/ui/src/router.tsx +212 -0
- airflow/ui/src/theme.ts +176 -0
- airflow/ui/src/utils/AppWrapper.tsx +39 -0
- airflow/ui/src/utils/ChakraWrapper.test.tsx +40 -0
- airflow/ui/src/utils/ChakraWrapper.tsx +24 -0
- airflow/ui/src/utils/RouterWrapper.test.tsx +40 -0
- airflow/ui/src/utils/RouterWrapper.tsx +22 -0
- airflow/ui/src/utils/TrimText.tsx +118 -0
- airflow/ui/src/utils/Wrapper.tsx +48 -0
- airflow/ui/src/utils/advancedSelectStyles.ts +18 -0
- airflow/ui/src/utils/capitalize.ts +22 -0
- airflow/ui/src/utils/datetime_utils.ts +25 -0
- airflow/ui/src/utils/downloadJson.ts +32 -0
- airflow/ui/src/utils/getMetaKey.ts +20 -0
- airflow/ui/src/utils/index.ts +25 -0
- airflow/ui/src/utils/links.ts +34 -0
- airflow/ui/src/utils/logs.ts +53 -0
- airflow/ui/src/utils/option.ts +24 -0
- airflow/ui/src/utils/pluralize.test.ts +77 -0
- airflow/ui/src/utils/pluralize.ts +28 -0
- airflow/ui/src/utils/query.ts +49 -0
- airflow/ui/src/utils/tokenHandler.test.ts +54 -0
- airflow/ui/src/utils/tokenHandler.ts +51 -0
- airflow/ui/src/utils/trimTextFn.ts +24 -0
- airflow/ui/src/utils/useContainerWidth.ts +43 -0
- airflow/ui/src/vite-env.d.ts +25 -0
- airflow/ui/testsSetup.ts +38 -0
- airflow/ui/tsconfig.app.json +31 -0
- airflow/ui/tsconfig.dev.json +12 -0
- airflow/ui/tsconfig.json +8 -0
- airflow/ui/tsconfig.node.json +28 -0
- airflow/ui/vite.config.ts +52 -0
- airflow/utils/__init__.py +17 -0
- airflow/utils/cli.py +439 -0
- airflow/utils/cli_action_loggers.py +166 -0
- airflow/utils/code_utils.py +87 -0
- airflow/utils/context.py +177 -0
- airflow/utils/dag_cycle_tester.py +69 -0
- airflow/utils/dag_edges.py +134 -0
- airflow/utils/dag_parsing_context.py +34 -0
- airflow/utils/dates.py +42 -0
- airflow/utils/db.py +1625 -0
- airflow/utils/db_cleanup.py +525 -0
- airflow/utils/db_manager.py +227 -0
- airflow/utils/decorators.py +88 -0
- airflow/utils/deprecation_tools.py +97 -0
- airflow/utils/docs.py +32 -0
- airflow/utils/dot_renderer.py +227 -0
- airflow/utils/edgemodifier.py +20 -0
- airflow/utils/email.py +331 -0
- airflow/utils/entry_points.py +61 -0
- airflow/utils/event_scheduler.py +46 -0
- airflow/utils/file.py +352 -0
- airflow/utils/hashlib_wrapper.py +34 -0
- airflow/utils/helpers.py +337 -0
- airflow/utils/json.py +62 -0
- airflow/utils/log/__init__.py +50 -0
- airflow/utils/log/action_logger.py +26 -0
- airflow/utils/log/colored_log.py +110 -0
- airflow/utils/log/file_processor_handler.py +153 -0
- airflow/utils/log/file_task_handler.py +643 -0
- airflow/utils/log/json_formatter.py +58 -0
- airflow/utils/log/log_reader.py +157 -0
- airflow/utils/log/logging_mixin.py +309 -0
- airflow/utils/log/non_caching_file_handler.py +72 -0
- airflow/utils/log/task_handler_with_custom_formatter.py +67 -0
- airflow/utils/log/timezone_aware.py +50 -0
- airflow/utils/module_loading.py +67 -0
- airflow/utils/net.py +56 -0
- airflow/utils/operator_helpers.py +112 -0
- airflow/utils/operator_resources.py +160 -0
- airflow/utils/orm_event_handlers.py +94 -0
- airflow/utils/platform.py +85 -0
- airflow/utils/process_utils.py +367 -0
- airflow/utils/providers_configuration_loader.py +57 -0
- airflow/utils/retries.py +112 -0
- airflow/utils/scheduler_health.py +68 -0
- airflow/utils/serve_logs.py +196 -0
- airflow/utils/session.py +110 -0
- airflow/utils/setup_teardown.py +342 -0
- airflow/utils/singleton.py +33 -0
- airflow/utils/span_status.py +33 -0
- airflow/utils/sqlalchemy.py +450 -0
- airflow/utils/state.py +228 -0
- airflow/utils/strings.py +39 -0
- airflow/utils/task_group.py +84 -0
- airflow/utils/task_instance_session.py +60 -0
- airflow/utils/thread_safe_dict.py +49 -0
- airflow/utils/timeout.py +88 -0
- airflow/utils/timezone.py +318 -0
- airflow/utils/trigger_rule.py +50 -0
- airflow/utils/types.py +76 -0
- airflow/utils/warnings.py +40 -0
- airflow/utils/weight_rule.py +56 -0
- airflow/utils/xcom.py +24 -0
- airflow/utils/yaml.py +73 -0
- airflow/version.py +23 -0
- apache_airflow_core-3.0.0.dist-info/METADATA +195 -0
- apache_airflow_core-3.0.0.dist-info/RECORD +1149 -0
- apache_airflow_core-3.0.0.dist-info/WHEEL +4 -0
- apache_airflow_core-3.0.0.dist-info/entry_points.txt +2 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-bootstrap.txt +22 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-bootstrap3-typeahead.txt +20 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-d3-shape.txt +27 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-d3-tip.txt +16 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-d3js.txt +27 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-dagre-d3.txt +19 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-datatables.txt +16 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-elasticmock.txt +21 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-eonasdan-bootstrap-datetimepicker.txt +21 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-flask-kerberos.txt +22 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-hue.txt +202 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-jqclock.txt +201 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-jquery.txt +36 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-moment.txt +22 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-normalize.txt +21 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-pytest-capture-warnings.txt +22 -0
- apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-reproducible.txt +8 -0
- apache_airflow_core-3.0.0.dist-info/licenses/LICENSE +251 -0
- apache_airflow_core-3.0.0.dist-info/licenses/NOTICE +22 -0
airflow/METRICS.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
or more contributor license agreements. See the NOTICE file
|
|
4
|
+
distributed with this work for additional information
|
|
5
|
+
regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
to you under the Apache License, Version 2.0 (the
|
|
7
|
+
"License"); you may not use this file except in compliance
|
|
8
|
+
with the License. You may obtain a copy of the License at
|
|
9
|
+
|
|
10
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
|
|
12
|
+
Unless required by applicable law or agreed to in writing,
|
|
13
|
+
software distributed under the License is distributed on an
|
|
14
|
+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
KIND, either express or implied. See the License for the
|
|
16
|
+
specific language governing permissions and limitations
|
|
17
|
+
under the License.
|
|
18
|
+
-->
|
|
19
|
+
|
|
20
|
+
This files contains diagrams that help visualize what metrics are send, and what they represent.
|
|
21
|
+
|
|
22
|
+
## DAG execution metrics
|
|
23
|
+
|
|
24
|
+
```mermaid
|
|
25
|
+
---
|
|
26
|
+
displayMode: compact
|
|
27
|
+
---
|
|
28
|
+
gantt
|
|
29
|
+
title Airflow metrics for a DAG run
|
|
30
|
+
dateFormat HH:mm
|
|
31
|
+
axisFormat %H:%M
|
|
32
|
+
tickInterval 1hour
|
|
33
|
+
|
|
34
|
+
section Events
|
|
35
|
+
%% Milestones are "point in time" events, but they still take a duration.
|
|
36
|
+
%% Setting it to 2 minutes here, I don't think it has any importance.
|
|
37
|
+
|
|
38
|
+
DAG Scheduled : milestone, dag_sched, 12:00, 2min
|
|
39
|
+
DAG Starts : milestone, dag_start, 13:00, 2min
|
|
40
|
+
First task Scheduled : milestone, task1_sched, 14:00, 2min
|
|
41
|
+
Task N Scheduled : milestone, taskN_sched, 15:00, 2min
|
|
42
|
+
Task N starts running : milestone, taskN_start, 16:00, 2min
|
|
43
|
+
Task N done : milestone, taskN_done, 17:00, 2min
|
|
44
|
+
Last task ends, DAG execution ends : milestone, end, 18:00, 2min
|
|
45
|
+
|
|
46
|
+
section Metrics
|
|
47
|
+
%% The start of the metrics can be conveniently marked with `after`,
|
|
48
|
+
%% but with this kind of diagram, we have no way to "bind" the end to a milestone,
|
|
49
|
+
%% so the durations have to be computed manually, sorry.
|
|
50
|
+
%%
|
|
51
|
+
%% If you modify the events above, make sure with your eyes that those metrics still match what they're supposed to.
|
|
52
|
+
|
|
53
|
+
dagrun.schedule_delay : after dag_sched, 1h
|
|
54
|
+
first_task_scheduling_delay : after dag_sched, 2h
|
|
55
|
+
duration.success/failure.dag_id : after dag_start, 5h
|
|
56
|
+
task_id.duration : after taskN_start, 1h
|
|
57
|
+
task N landing time (only in airflow UI) : after dag_sched, 5h
|
|
58
|
+
```
|
airflow/__init__.py
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
|
4
|
+
# distributed with this work for additional information
|
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
|
7
|
+
# "License"); you may not use this file except in compliance
|
|
8
|
+
# with the License. You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
|
13
|
+
# software distributed under the License is distributed on an
|
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
# KIND, either express or implied. See the License for the
|
|
16
|
+
# specific language governing permissions and limitations
|
|
17
|
+
# under the License.
|
|
18
|
+
|
|
19
|
+
# We do not use "from __future__ import annotations" here because it is not supported
|
|
20
|
+
# by Pycharm when we want to make sure all imports in airflow work from namespace packages
|
|
21
|
+
# Adding it automatically is excluded in pyproject.toml via I002 ruff rule exclusion
|
|
22
|
+
|
|
23
|
+
# Make `airflow` a namespace package, supporting installing
|
|
24
|
+
# airflow.providers.* in different locations (i.e. one in site, and one in user
|
|
25
|
+
# lib.) This is required by some IDEs to resolve the import paths.
|
|
26
|
+
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
|
|
27
|
+
|
|
28
|
+
__version__ = "3.0.0"
|
|
29
|
+
|
|
30
|
+
import os
|
|
31
|
+
import sys
|
|
32
|
+
import warnings
|
|
33
|
+
from typing import TYPE_CHECKING
|
|
34
|
+
|
|
35
|
+
if os.environ.get("_AIRFLOW_PATCH_GEVENT"):
|
|
36
|
+
# If you are using gevents and start airflow webserver, you might want to run gevent monkeypatching
|
|
37
|
+
# as one of the first thing when Airflow is started. This allows gevent to patch networking and other
|
|
38
|
+
# system libraries to make them gevent-compatible before anything else patches them (for example boto)
|
|
39
|
+
from gevent.monkey import patch_all
|
|
40
|
+
|
|
41
|
+
patch_all()
|
|
42
|
+
|
|
43
|
+
if sys.platform == "win32":
|
|
44
|
+
warnings.warn(
|
|
45
|
+
"Airflow currently can be run on POSIX-compliant Operating Systems. For development, "
|
|
46
|
+
"it is regularly tested on fairly modern Linux Distros and recent versions of macOS. "
|
|
47
|
+
"On Windows you can run it via WSL2 (Windows Subsystem for Linux 2) or via Linux Containers. "
|
|
48
|
+
"The work to add Windows support is tracked via https://github.com/apache/airflow/issues/10388, "
|
|
49
|
+
"but it is not a high priority.",
|
|
50
|
+
category=RuntimeWarning,
|
|
51
|
+
stacklevel=1,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# The configuration module initializes and validates the conf object as a side effect the first
|
|
55
|
+
# time it is imported. If it is not imported before importing the settings module, the conf
|
|
56
|
+
# object will then be initted/validated as a side effect of it being imported in settings,
|
|
57
|
+
# however this can cause issues since those modules are very tightly coupled and can
|
|
58
|
+
# very easily cause import cycles in the conf init/validate code (since downstream code from
|
|
59
|
+
# those functions likely import settings).
|
|
60
|
+
# configuration is therefore initted early here, simply by importing it.
|
|
61
|
+
from airflow import configuration, settings
|
|
62
|
+
|
|
63
|
+
__all__ = [
|
|
64
|
+
"__version__",
|
|
65
|
+
"DAG",
|
|
66
|
+
"Asset",
|
|
67
|
+
"XComArg",
|
|
68
|
+
# TODO: Remove this module in Airflow 3.2
|
|
69
|
+
"Dataset",
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
# Perform side-effects unless someone has explicitly opted out before import
|
|
73
|
+
# WARNING: DO NOT USE THIS UNLESS YOU REALLY KNOW WHAT YOU'RE DOING.
|
|
74
|
+
# This environment variable prevents proper initialization, and things like
|
|
75
|
+
# configs, logging, the ORM, etc. will be broken. It is only useful if you only
|
|
76
|
+
# access certain trivial constants and free functions (e.g. `__version__`).
|
|
77
|
+
if not os.environ.get("_AIRFLOW__AS_LIBRARY", None):
|
|
78
|
+
settings.initialize()
|
|
79
|
+
|
|
80
|
+
# Things to lazy import in form {local_name: ('target_module', 'target_name', 'deprecated')}
|
|
81
|
+
__lazy_imports: dict[str, tuple[str, str, bool]] = {
|
|
82
|
+
"DAG": (".models.dag", "DAG", False),
|
|
83
|
+
"Asset": (".assets", "Asset", False),
|
|
84
|
+
"XComArg": (".models.xcom_arg", "XComArg", False),
|
|
85
|
+
"version": (".version", "", False),
|
|
86
|
+
# Deprecated lazy imports
|
|
87
|
+
"AirflowException": (".exceptions", "AirflowException", True),
|
|
88
|
+
"Dataset": (".sdk.definitions.asset", "Dataset", True),
|
|
89
|
+
}
|
|
90
|
+
if TYPE_CHECKING:
|
|
91
|
+
# These objects are imported by PEP-562, however, static analyzers and IDE's
|
|
92
|
+
# have no idea about typing of these objects.
|
|
93
|
+
# Add it under TYPE_CHECKING block should help with it.
|
|
94
|
+
from airflow.models.dag import DAG
|
|
95
|
+
from airflow.models.xcom_arg import XComArg
|
|
96
|
+
from airflow.sdk.definitions.asset import Asset, Dataset
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def __getattr__(name: str):
|
|
100
|
+
# PEP-562: Lazy loaded attributes on python modules
|
|
101
|
+
module_path, attr_name, deprecated = __lazy_imports.get(name, ("", "", False))
|
|
102
|
+
if not module_path:
|
|
103
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
104
|
+
if deprecated:
|
|
105
|
+
warnings.warn(
|
|
106
|
+
f"Import {name!r} directly from the airflow module is deprecated and "
|
|
107
|
+
f"will be removed in the future. Please import it from 'airflow{module_path}.{attr_name}'.",
|
|
108
|
+
DeprecationWarning,
|
|
109
|
+
stacklevel=2,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
import importlib
|
|
113
|
+
|
|
114
|
+
mod = importlib.import_module(module_path, __name__)
|
|
115
|
+
if attr_name:
|
|
116
|
+
val = getattr(mod, attr_name)
|
|
117
|
+
else:
|
|
118
|
+
val = mod
|
|
119
|
+
|
|
120
|
+
# Store for next time
|
|
121
|
+
globals()[name] = val
|
|
122
|
+
return val
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
if not settings.LAZY_LOAD_PROVIDERS:
|
|
126
|
+
from airflow.providers_manager import ProvidersManager
|
|
127
|
+
|
|
128
|
+
manager = ProvidersManager()
|
|
129
|
+
manager.initialize_providers_list()
|
|
130
|
+
manager.initialize_providers_hooks()
|
|
131
|
+
manager.initialize_providers_extra_links()
|
|
132
|
+
if not settings.LAZY_LOAD_PLUGINS:
|
|
133
|
+
from airflow import plugins_manager
|
|
134
|
+
|
|
135
|
+
plugins_manager.ensure_plugins_loaded()
|
airflow/__main__.py
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# PYTHON_ARGCOMPLETE_OK
|
|
3
|
+
#
|
|
4
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
5
|
+
# or more contributor license agreements. See the NOTICE file
|
|
6
|
+
# distributed with this work for additional information
|
|
7
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
8
|
+
# to you under the Apache License, Version 2.0 (the
|
|
9
|
+
# "License"); you may not use this file except in compliance
|
|
10
|
+
# with the License. You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing,
|
|
15
|
+
# software distributed under the License is distributed on an
|
|
16
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
17
|
+
# KIND, either express or implied. See the License for the
|
|
18
|
+
# specific language governing permissions and limitations
|
|
19
|
+
# under the License.
|
|
20
|
+
"""Main executable module."""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
import os
|
|
25
|
+
|
|
26
|
+
import argcomplete
|
|
27
|
+
|
|
28
|
+
# The configuration module initializes and validates the conf object as a side effect the first
|
|
29
|
+
# time it is imported. If it is not imported before importing the settings module, the conf
|
|
30
|
+
# object will then be initted/validated as a side effect of it being imported in settings,
|
|
31
|
+
# however this can cause issues since those modules are very tightly coupled and can
|
|
32
|
+
# very easily cause import cycles in the conf init/validate code (since downstream code from
|
|
33
|
+
# those functions likely import settings).
|
|
34
|
+
# Therefore importing configuration early (as the first airflow import) avoids
|
|
35
|
+
# any possible import cycles with settings downstream.
|
|
36
|
+
from airflow import configuration
|
|
37
|
+
from airflow.cli import cli_parser
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def main():
|
|
41
|
+
conf = configuration.conf
|
|
42
|
+
if conf.get("core", "security") == "kerberos":
|
|
43
|
+
os.environ["KRB5CCNAME"] = conf.get("kerberos", "ccache")
|
|
44
|
+
os.environ["KRB5_KTNAME"] = conf.get("kerberos", "keytab")
|
|
45
|
+
parser = cli_parser.get_parser()
|
|
46
|
+
argcomplete.autocomplete(parser)
|
|
47
|
+
args = parser.parse_args()
|
|
48
|
+
if args.subcommand not in ["lazy_loaded", "version"]:
|
|
49
|
+
# Here we ensure that the default configuration is written if needed before running any command
|
|
50
|
+
# that might need it. This used to be done during configuration initialization but having it
|
|
51
|
+
# in main ensures that it is not done during tests and other ways airflow imports are used
|
|
52
|
+
from airflow.configuration import write_default_airflow_configuration_if_needed
|
|
53
|
+
|
|
54
|
+
conf = write_default_airflow_configuration_if_needed()
|
|
55
|
+
args.func(args)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
if __name__ == "__main__":
|
|
59
|
+
main()
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Vendor package
|
|
2
|
+
|
|
3
|
+
## What vendored packages are for
|
|
4
|
+
|
|
5
|
+
The `airflow._vendor` package is foreseen for vendoring in packages, that we have to modify ourselves
|
|
6
|
+
because authors of the packages do not have time to modify them themselves. This is often temporary
|
|
7
|
+
and once the packages implement fixes that we need, and then we remove the packages from
|
|
8
|
+
the `_vendor` package.
|
|
9
|
+
|
|
10
|
+
All Vendored libraries must follow these rules:
|
|
11
|
+
|
|
12
|
+
1. Vendored libraries must be pure Python--no compiling (so that we do not have to release multi-platform airflow packages on PyPI).
|
|
13
|
+
2. Source code for the library is included in this directory.
|
|
14
|
+
3. License must be included in this repo and in the [LICENSE](../../LICENSE) file and in the
|
|
15
|
+
[licenses](../../3rd-party-licenses) folder.
|
|
16
|
+
4. Requirements of the library become requirements of airflow core.
|
|
17
|
+
5. Version of the library should be included in the [vendor.md](vendor.md) file.
|
|
18
|
+
6. No modifications to the library may be made in the initial commit.
|
|
19
|
+
7. Apply the fixes necessary to use the vendored library as separate commits - each package separately,
|
|
20
|
+
so that they can be cherry-picked later if we upgrade the vendored package. Changes to airflow code to
|
|
21
|
+
use the vendored packages should be applied as separate commits/PRs.
|
|
22
|
+
8. The `_vendor` packages should be excluded from any refactoring, static checks and automated fixes.
|
|
23
|
+
|
|
24
|
+
## Adding and upgrading a vendored package
|
|
25
|
+
|
|
26
|
+
Way to vendor a library or update a version:
|
|
27
|
+
|
|
28
|
+
1. Update ``vendor.md`` with the library, version, and SHA256 (`pypi` provides hashes as of recently)
|
|
29
|
+
2. Remove all old files and directories of the old version.
|
|
30
|
+
3. Replace them with new files (only replace relevant python packages:move LICENSE )
|
|
31
|
+
* move license files to [licenses](../../3rd-party-licenses) folder
|
|
32
|
+
* remove README and any other supporting files (they can be found in PyPI)
|
|
33
|
+
* make sure to add requirements to airflow's ``pyproject.toml`` with appropriate comment stating
|
|
34
|
+
why the requirements are added and when they should be removed
|
|
35
|
+
4. If you replace previous version, re-apply historical fixes from the "package" folder by
|
|
36
|
+
cherry-picking them.
|
|
File without changes
|
airflow/alembic.ini
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
|
4
|
+
# distributed with this work for additional information
|
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
|
7
|
+
# "License"); you may not use this file except in compliance
|
|
8
|
+
# with the License. You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
|
13
|
+
# software distributed under the License is distributed on an
|
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
# KIND, either express or implied. See the License for the
|
|
16
|
+
# specific language governing permissions and limitations
|
|
17
|
+
# under the License.
|
|
18
|
+
|
|
19
|
+
# A generic, single database configuration.
|
|
20
|
+
|
|
21
|
+
[alembic]
|
|
22
|
+
# path to migration scripts
|
|
23
|
+
script_location = %(here)s/migrations
|
|
24
|
+
|
|
25
|
+
# template used to generate migration files
|
|
26
|
+
# file_template = %%(rev)s_%%(slug)s
|
|
27
|
+
|
|
28
|
+
# max length of characters to apply to the
|
|
29
|
+
# "slug" field
|
|
30
|
+
#truncate_slug_length = 40
|
|
31
|
+
|
|
32
|
+
# set to 'true' to run the environment during
|
|
33
|
+
# the 'revision' command, regardless of autogenerate
|
|
34
|
+
# revision_environment = false
|
|
35
|
+
|
|
36
|
+
# set to 'true' to allow .pyc and .pyo files without
|
|
37
|
+
# a source .py file to be detected as revisions in the
|
|
38
|
+
# versions/ directory
|
|
39
|
+
# sourceless = false
|
|
40
|
+
|
|
41
|
+
# version location specification; this defaults
|
|
42
|
+
# to help/versions. When using multiple version
|
|
43
|
+
# directories, initial revisions must be specified with --version-path
|
|
44
|
+
# version_locations = %(here)s/bar %(here)s/bat help/versions
|
|
45
|
+
|
|
46
|
+
# the output encoding used when revision files
|
|
47
|
+
# are written from script.py.mako
|
|
48
|
+
# output_encoding = utf-8
|
|
49
|
+
|
|
50
|
+
sqlalchemy.url = scheme://localhost/airflow
|
|
51
|
+
|
|
52
|
+
# Logging configuration
|
|
53
|
+
[loggers]
|
|
54
|
+
keys = root,sqlalchemy,alembic
|
|
55
|
+
|
|
56
|
+
[handlers]
|
|
57
|
+
keys = console
|
|
58
|
+
|
|
59
|
+
[formatters]
|
|
60
|
+
keys = generic
|
|
61
|
+
|
|
62
|
+
[logger_root]
|
|
63
|
+
level = WARN
|
|
64
|
+
handlers = console
|
|
65
|
+
qualname =
|
|
66
|
+
|
|
67
|
+
[logger_sqlalchemy]
|
|
68
|
+
level = WARN
|
|
69
|
+
handlers =
|
|
70
|
+
qualname = sqlalchemy.engine
|
|
71
|
+
|
|
72
|
+
[logger_alembic]
|
|
73
|
+
level = INFO
|
|
74
|
+
handlers =
|
|
75
|
+
qualname = alembic
|
|
76
|
+
|
|
77
|
+
[handler_console]
|
|
78
|
+
class = StreamHandler
|
|
79
|
+
args = (sys.stderr,)
|
|
80
|
+
level = NOTSET
|
|
81
|
+
formatter = generic
|
|
82
|
+
|
|
83
|
+
[formatter_generic]
|
|
84
|
+
format = %(levelname)-5.5s [%(name)s] %(message)s
|
|
85
|
+
datefmt = %H:%M:%S
|
airflow/api/__init__.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
# or more contributor license agreements. See the NOTICE file
|
|
3
|
+
# distributed with this work for additional information
|
|
4
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
# to you under the Apache License, Version 2.0 (the
|
|
6
|
+
# "License"); you may not use this file except in compliance
|
|
7
|
+
# with the License. You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
|
4
|
+
# distributed with this work for additional information
|
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
|
7
|
+
# "License"); you may not use this file except in compliance
|
|
8
|
+
# with the License. You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
|
13
|
+
# software distributed under the License is distributed on an
|
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
# KIND, either express or implied. See the License for the
|
|
16
|
+
# specific language governing permissions and limitations
|
|
17
|
+
# under the License.
|
|
18
|
+
"""API Client that allows interacting with Airflow API."""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
from airflow.api.client.local_client import Client
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_current_api_client() -> Client:
|
|
26
|
+
return Client()
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
|
4
|
+
# distributed with this work for additional information
|
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
|
7
|
+
# "License"); you may not use this file except in compliance
|
|
8
|
+
# with the License. You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
|
13
|
+
# software distributed under the License is distributed on an
|
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
# KIND, either express or implied. See the License for the
|
|
16
|
+
# specific language governing permissions and limitations
|
|
17
|
+
# under the License.
|
|
18
|
+
"""Local client API."""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import httpx
|
|
23
|
+
|
|
24
|
+
from airflow.api.common import delete_dag, trigger_dag
|
|
25
|
+
from airflow.exceptions import AirflowBadRequest, PoolNotFound
|
|
26
|
+
from airflow.models.pool import Pool
|
|
27
|
+
from airflow.utils.types import DagRunTriggeredByType
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class Client:
|
|
31
|
+
"""Local API client implementation."""
|
|
32
|
+
|
|
33
|
+
def __init__(self, auth=None, session: httpx.Client | None = None):
|
|
34
|
+
self._session: httpx.Client = session or httpx.Client()
|
|
35
|
+
if auth:
|
|
36
|
+
self._session.auth = auth
|
|
37
|
+
|
|
38
|
+
def trigger_dag(
|
|
39
|
+
self, dag_id, run_id=None, conf=None, logical_date=None, replace_microseconds=True
|
|
40
|
+
) -> dict | None:
|
|
41
|
+
dag_run = trigger_dag.trigger_dag(
|
|
42
|
+
dag_id=dag_id,
|
|
43
|
+
triggered_by=DagRunTriggeredByType.CLI,
|
|
44
|
+
run_id=run_id,
|
|
45
|
+
conf=conf,
|
|
46
|
+
logical_date=logical_date,
|
|
47
|
+
replace_microseconds=replace_microseconds,
|
|
48
|
+
)
|
|
49
|
+
if dag_run:
|
|
50
|
+
return {
|
|
51
|
+
"conf": dag_run.conf,
|
|
52
|
+
"dag_id": dag_run.dag_id,
|
|
53
|
+
"dag_run_id": dag_run.run_id,
|
|
54
|
+
"data_interval_start": dag_run.data_interval_start,
|
|
55
|
+
"data_interval_end": dag_run.data_interval_end,
|
|
56
|
+
"end_date": dag_run.end_date,
|
|
57
|
+
"last_scheduling_decision": dag_run.last_scheduling_decision,
|
|
58
|
+
"logical_date": dag_run.logical_date,
|
|
59
|
+
"run_type": dag_run.run_type,
|
|
60
|
+
"start_date": dag_run.start_date,
|
|
61
|
+
"state": dag_run.state,
|
|
62
|
+
}
|
|
63
|
+
return dag_run
|
|
64
|
+
|
|
65
|
+
def delete_dag(self, dag_id):
|
|
66
|
+
count = delete_dag.delete_dag(dag_id)
|
|
67
|
+
return f"Removed {count} record(s)"
|
|
68
|
+
|
|
69
|
+
def get_pool(self, name):
|
|
70
|
+
pool = Pool.get_pool(pool_name=name)
|
|
71
|
+
if not pool:
|
|
72
|
+
raise PoolNotFound(f"Pool {name} not found")
|
|
73
|
+
return pool.pool, pool.slots, pool.description, pool.include_deferred
|
|
74
|
+
|
|
75
|
+
def get_pools(self):
|
|
76
|
+
return [(p.pool, p.slots, p.description, p.include_deferred) for p in Pool.get_pools()]
|
|
77
|
+
|
|
78
|
+
def create_pool(self, name, slots, description, include_deferred):
|
|
79
|
+
if not (name and name.strip()):
|
|
80
|
+
raise AirflowBadRequest("Pool name shouldn't be empty")
|
|
81
|
+
pool_name_length = Pool.pool.property.columns[0].type.length
|
|
82
|
+
if len(name) > pool_name_length:
|
|
83
|
+
raise AirflowBadRequest(f"pool name cannot be more than {pool_name_length} characters")
|
|
84
|
+
try:
|
|
85
|
+
slots = int(slots)
|
|
86
|
+
except ValueError:
|
|
87
|
+
raise AirflowBadRequest(f"Bad value for `slots`: {slots}")
|
|
88
|
+
pool = Pool.create_or_update_pool(
|
|
89
|
+
name=name, slots=slots, description=description, include_deferred=include_deferred
|
|
90
|
+
)
|
|
91
|
+
return pool.pool, pool.slots, pool.description
|
|
92
|
+
|
|
93
|
+
def delete_pool(self, name):
|
|
94
|
+
pool = Pool.delete_pool(name=name)
|
|
95
|
+
return pool.pool, pool.slots, pool.description
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
|
4
|
+
# distributed with this work for additional information
|
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
|
7
|
+
# "License"); you may not use this file except in compliance
|
|
8
|
+
# with the License. You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
|
13
|
+
# software distributed under the License is distributed on an
|
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
# KIND, either express or implied. See the License for the
|
|
16
|
+
# specific language governing permissions and limitations
|
|
17
|
+
# under the License.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
# or more contributor license agreements. See the NOTICE file
|
|
3
|
+
# distributed with this work for additional information
|
|
4
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
# to you under the Apache License, Version 2.0 (the
|
|
6
|
+
# "License"); you may not use this file except in compliance
|
|
7
|
+
# with the License. You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
from typing import Any
|
|
20
|
+
|
|
21
|
+
from airflow.jobs.dag_processor_job_runner import DagProcessorJobRunner
|
|
22
|
+
from airflow.jobs.scheduler_job_runner import SchedulerJobRunner
|
|
23
|
+
from airflow.jobs.triggerer_job_runner import TriggererJobRunner
|
|
24
|
+
|
|
25
|
+
HEALTHY = "healthy"
|
|
26
|
+
UNHEALTHY = "unhealthy"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def get_airflow_health() -> dict[str, Any]:
|
|
30
|
+
"""Get the health for Airflow metadatabase, scheduler and triggerer."""
|
|
31
|
+
metadatabase_status = HEALTHY
|
|
32
|
+
latest_scheduler_heartbeat = None
|
|
33
|
+
latest_triggerer_heartbeat = None
|
|
34
|
+
latest_dag_processor_heartbeat = None
|
|
35
|
+
|
|
36
|
+
scheduler_status = UNHEALTHY
|
|
37
|
+
triggerer_status: str | None = UNHEALTHY
|
|
38
|
+
dag_processor_status: str | None = UNHEALTHY
|
|
39
|
+
|
|
40
|
+
try:
|
|
41
|
+
latest_scheduler_job = SchedulerJobRunner.most_recent_job()
|
|
42
|
+
|
|
43
|
+
if latest_scheduler_job:
|
|
44
|
+
latest_scheduler_heartbeat = latest_scheduler_job.latest_heartbeat.isoformat()
|
|
45
|
+
if latest_scheduler_job.is_alive():
|
|
46
|
+
scheduler_status = HEALTHY
|
|
47
|
+
except Exception:
|
|
48
|
+
metadatabase_status = UNHEALTHY
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
latest_triggerer_job = TriggererJobRunner.most_recent_job()
|
|
52
|
+
|
|
53
|
+
if latest_triggerer_job:
|
|
54
|
+
latest_triggerer_heartbeat = latest_triggerer_job.latest_heartbeat.isoformat()
|
|
55
|
+
if latest_triggerer_job.is_alive():
|
|
56
|
+
triggerer_status = HEALTHY
|
|
57
|
+
else:
|
|
58
|
+
triggerer_status = None
|
|
59
|
+
except Exception:
|
|
60
|
+
metadatabase_status = UNHEALTHY
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
latest_dag_processor_job = DagProcessorJobRunner.most_recent_job()
|
|
64
|
+
|
|
65
|
+
if latest_dag_processor_job:
|
|
66
|
+
latest_dag_processor_heartbeat = latest_dag_processor_job.latest_heartbeat.isoformat()
|
|
67
|
+
if latest_dag_processor_job.is_alive():
|
|
68
|
+
dag_processor_status = HEALTHY
|
|
69
|
+
else:
|
|
70
|
+
dag_processor_status = None
|
|
71
|
+
except Exception:
|
|
72
|
+
metadatabase_status = UNHEALTHY
|
|
73
|
+
|
|
74
|
+
airflow_health_status = {
|
|
75
|
+
"metadatabase": {"status": metadatabase_status},
|
|
76
|
+
"scheduler": {
|
|
77
|
+
"status": scheduler_status,
|
|
78
|
+
"latest_scheduler_heartbeat": latest_scheduler_heartbeat,
|
|
79
|
+
},
|
|
80
|
+
"triggerer": {
|
|
81
|
+
"status": triggerer_status,
|
|
82
|
+
"latest_triggerer_heartbeat": latest_triggerer_heartbeat,
|
|
83
|
+
},
|
|
84
|
+
"dag_processor": {
|
|
85
|
+
"status": dag_processor_status,
|
|
86
|
+
"latest_dag_processor_heartbeat": latest_dag_processor_heartbeat,
|
|
87
|
+
},
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return airflow_health_status
|