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.
Files changed (1149) hide show
  1. airflow/METRICS.md +58 -0
  2. airflow/__init__.py +135 -0
  3. airflow/__main__.py +59 -0
  4. airflow/_vendor/README.md +36 -0
  5. airflow/_vendor/__init__.py +0 -0
  6. airflow/_vendor/vendor.md +2 -0
  7. airflow/alembic.ini +85 -0
  8. airflow/api/__init__.py +16 -0
  9. airflow/api/client/__init__.py +26 -0
  10. airflow/api/client/local_client.py +95 -0
  11. airflow/api/common/__init__.py +17 -0
  12. airflow/api/common/airflow_health.py +90 -0
  13. airflow/api/common/delete_dag.py +85 -0
  14. airflow/api/common/mark_tasks.py +372 -0
  15. airflow/api/common/trigger_dag.py +163 -0
  16. airflow/api_fastapi/__init__.py +16 -0
  17. airflow/api_fastapi/app.py +200 -0
  18. airflow/api_fastapi/auth/__init__.py +17 -0
  19. airflow/api_fastapi/auth/managers/__init__.py +17 -0
  20. airflow/api_fastapi/auth/managers/base_auth_manager.py +507 -0
  21. airflow/api_fastapi/auth/managers/models/__init__.py +17 -0
  22. airflow/api_fastapi/auth/managers/models/base_user.py +30 -0
  23. airflow/api_fastapi/auth/managers/models/batch_apis.py +59 -0
  24. airflow/api_fastapi/auth/managers/models/resource_details.py +107 -0
  25. airflow/api_fastapi/auth/managers/simple/__init__.py +17 -0
  26. airflow/api_fastapi/auth/managers/simple/datamodels/__init__.py +17 -0
  27. airflow/api_fastapi/auth/managers/simple/datamodels/login.py +35 -0
  28. airflow/api_fastapi/auth/managers/simple/openapi/__init__.py +17 -0
  29. airflow/api_fastapi/auth/managers/simple/openapi/v1-simple-auth-manager-generated.yaml +193 -0
  30. airflow/api_fastapi/auth/managers/simple/routes/__init__.py +17 -0
  31. airflow/api_fastapi/auth/managers/simple/routes/login.py +85 -0
  32. airflow/api_fastapi/auth/managers/simple/services/__init__.py +16 -0
  33. airflow/api_fastapi/auth/managers/simple/services/login.py +102 -0
  34. airflow/api_fastapi/auth/managers/simple/simple_auth_manager.py +381 -0
  35. airflow/api_fastapi/auth/managers/simple/ui/.prettierignore +7 -0
  36. airflow/api_fastapi/auth/managers/simple/ui/.prettierrc +13 -0
  37. airflow/api_fastapi/auth/managers/simple/ui/dev/index.html +24 -0
  38. airflow/api_fastapi/auth/managers/simple/ui/dist/.vite/manifest.json +8 -0
  39. airflow/api_fastapi/auth/managers/simple/ui/dist/assets/index-BV-Yw0zh.js +132 -0
  40. airflow/api_fastapi/auth/managers/simple/ui/dist/index.html +14 -0
  41. airflow/api_fastapi/auth/managers/simple/ui/dist/pin_100.png +0 -0
  42. airflow/api_fastapi/auth/managers/simple/ui/dist/pin_32.png +0 -0
  43. airflow/api_fastapi/auth/managers/simple/ui/eslint.config.js +47 -0
  44. airflow/api_fastapi/auth/managers/simple/ui/index.html +14 -0
  45. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/common.ts +37 -0
  46. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/ensureQueryData.ts +16 -0
  47. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/index.ts +4 -0
  48. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/infiniteQueries.ts +1 -0
  49. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/prefetch.ts +16 -0
  50. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/queries.ts +91 -0
  51. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/queries/suspense.ts +32 -0
  52. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiError.ts +21 -0
  53. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiRequestOptions.ts +14 -0
  54. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/ApiResult.ts +7 -0
  55. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/CancelablePromise.ts +126 -0
  56. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/OpenAPI.ts +58 -0
  57. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/core/request.ts +374 -0
  58. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/index.ts +7 -0
  59. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/schemas.gen.ts +97 -0
  60. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/services.gen.ts +89 -0
  61. airflow/api_fastapi/auth/managers/simple/ui/openapi-gen/requests/types.gen.ts +126 -0
  62. airflow/api_fastapi/auth/managers/simple/ui/package-lock.json +9140 -0
  63. airflow/api_fastapi/auth/managers/simple/ui/package.json +56 -0
  64. airflow/api_fastapi/auth/managers/simple/ui/pnpm-lock.yaml +6050 -0
  65. airflow/api_fastapi/auth/managers/simple/ui/public/pin_100.png +0 -0
  66. airflow/api_fastapi/auth/managers/simple/ui/public/pin_32.png +0 -0
  67. airflow/api_fastapi/auth/managers/simple/ui/rules/core.js +1448 -0
  68. airflow/api_fastapi/auth/managers/simple/ui/rules/levels.js +27 -0
  69. airflow/api_fastapi/auth/managers/simple/ui/rules/off.js +29 -0
  70. airflow/api_fastapi/auth/managers/simple/ui/rules/perfectionist.js +139 -0
  71. airflow/api_fastapi/auth/managers/simple/ui/rules/plugin-patch.d.ts +49 -0
  72. airflow/api_fastapi/auth/managers/simple/ui/rules/prettier.js +39 -0
  73. airflow/api_fastapi/auth/managers/simple/ui/rules/react.js +623 -0
  74. airflow/api_fastapi/auth/managers/simple/ui/rules/stylistic.js +91 -0
  75. airflow/api_fastapi/auth/managers/simple/ui/rules/typescript.js +1889 -0
  76. airflow/api_fastapi/auth/managers/simple/ui/rules/unicorn.js +1281 -0
  77. airflow/api_fastapi/auth/managers/simple/ui/src/AirflowPin.tsx +76 -0
  78. airflow/api_fastapi/auth/managers/simple/ui/src/alert/Alert.tsx +58 -0
  79. airflow/api_fastapi/auth/managers/simple/ui/src/alert/ErrorAlert.tsx +64 -0
  80. airflow/api_fastapi/auth/managers/simple/ui/src/login/Login.test.tsx +36 -0
  81. airflow/api_fastapi/auth/managers/simple/ui/src/login/Login.tsx +119 -0
  82. airflow/api_fastapi/auth/managers/simple/ui/src/login/LoginForm.tsx +80 -0
  83. airflow/api_fastapi/auth/managers/simple/ui/src/main.tsx +40 -0
  84. airflow/api_fastapi/auth/managers/simple/ui/src/queries/useCreateToken.ts +47 -0
  85. airflow/api_fastapi/auth/managers/simple/ui/src/queryClient.ts +36 -0
  86. airflow/api_fastapi/auth/managers/simple/ui/src/router.tsx +41 -0
  87. airflow/api_fastapi/auth/managers/simple/ui/src/test-utils.tsx +47 -0
  88. airflow/api_fastapi/auth/managers/simple/ui/tests-setup.ts +24 -0
  89. airflow/api_fastapi/auth/managers/simple/ui/tsconfig.app.json +31 -0
  90. airflow/api_fastapi/auth/managers/simple/ui/tsconfig.dev.json +12 -0
  91. airflow/api_fastapi/auth/managers/simple/ui/tsconfig.json +8 -0
  92. airflow/api_fastapi/auth/managers/simple/ui/tsconfig.node.json +28 -0
  93. airflow/api_fastapi/auth/managers/simple/ui/vite.config.ts +49 -0
  94. airflow/api_fastapi/auth/managers/simple/user.py +41 -0
  95. airflow/api_fastapi/auth/tokens.py +578 -0
  96. airflow/api_fastapi/common/__init__.py +16 -0
  97. airflow/api_fastapi/common/db/__init__.py +16 -0
  98. airflow/api_fastapi/common/db/common.py +181 -0
  99. airflow/api_fastapi/common/db/dag_runs.py +32 -0
  100. airflow/api_fastapi/common/db/dags.py +92 -0
  101. airflow/api_fastapi/common/exceptions.py +85 -0
  102. airflow/api_fastapi/common/headers.py +49 -0
  103. airflow/api_fastapi/common/parameters.py +709 -0
  104. airflow/api_fastapi/common/router.py +94 -0
  105. airflow/api_fastapi/common/types.py +106 -0
  106. airflow/api_fastapi/core_api/__init__.py +16 -0
  107. airflow/api_fastapi/core_api/app.py +170 -0
  108. airflow/api_fastapi/core_api/base.py +64 -0
  109. airflow/api_fastapi/core_api/datamodels/__init__.py +16 -0
  110. airflow/api_fastapi/core_api/datamodels/assets.py +158 -0
  111. airflow/api_fastapi/core_api/datamodels/backfills.py +71 -0
  112. airflow/api_fastapi/core_api/datamodels/common.py +144 -0
  113. airflow/api_fastapi/core_api/datamodels/config.py +64 -0
  114. airflow/api_fastapi/core_api/datamodels/connections.py +138 -0
  115. airflow/api_fastapi/core_api/datamodels/dag_report.py +40 -0
  116. airflow/api_fastapi/core_api/datamodels/dag_run.py +162 -0
  117. airflow/api_fastapi/core_api/datamodels/dag_sources.py +27 -0
  118. airflow/api_fastapi/core_api/datamodels/dag_stats.py +42 -0
  119. airflow/api_fastapi/core_api/datamodels/dag_tags.py +34 -0
  120. airflow/api_fastapi/core_api/datamodels/dag_versions.py +51 -0
  121. airflow/api_fastapi/core_api/datamodels/dag_warning.py +39 -0
  122. airflow/api_fastapi/core_api/datamodels/dags.py +189 -0
  123. airflow/api_fastapi/core_api/datamodels/event_logs.py +47 -0
  124. airflow/api_fastapi/core_api/datamodels/extra_links.py +30 -0
  125. airflow/api_fastapi/core_api/datamodels/import_error.py +40 -0
  126. airflow/api_fastapi/core_api/datamodels/job.py +43 -0
  127. airflow/api_fastapi/core_api/datamodels/log.py +44 -0
  128. airflow/api_fastapi/core_api/datamodels/monitor.py +52 -0
  129. airflow/api_fastapi/core_api/datamodels/plugins.py +100 -0
  130. airflow/api_fastapi/core_api/datamodels/pools.py +77 -0
  131. airflow/api_fastapi/core_api/datamodels/providers.py +35 -0
  132. airflow/api_fastapi/core_api/datamodels/task_instances.py +224 -0
  133. airflow/api_fastapi/core_api/datamodels/tasks.py +114 -0
  134. airflow/api_fastapi/core_api/datamodels/trigger.py +36 -0
  135. airflow/api_fastapi/core_api/datamodels/ui/__init__.py +16 -0
  136. airflow/api_fastapi/core_api/datamodels/ui/auth.py +28 -0
  137. airflow/api_fastapi/core_api/datamodels/ui/common.py +59 -0
  138. airflow/api_fastapi/core_api/datamodels/ui/config.py +43 -0
  139. airflow/api_fastapi/core_api/datamodels/ui/dags.py +36 -0
  140. airflow/api_fastapi/core_api/datamodels/ui/dashboard.py +63 -0
  141. airflow/api_fastapi/core_api/datamodels/ui/grid.py +64 -0
  142. airflow/api_fastapi/core_api/datamodels/ui/structure.py +48 -0
  143. airflow/api_fastapi/core_api/datamodels/variables.py +73 -0
  144. airflow/api_fastapi/core_api/datamodels/version.py +26 -0
  145. airflow/api_fastapi/core_api/datamodels/xcom.py +74 -0
  146. airflow/api_fastapi/core_api/init_dagbag.py +29 -0
  147. airflow/api_fastapi/core_api/middleware.py +39 -0
  148. airflow/api_fastapi/core_api/openapi/__init__.py +16 -0
  149. airflow/api_fastapi/core_api/openapi/_private_ui.yaml +1789 -0
  150. airflow/api_fastapi/core_api/openapi/exceptions.py +41 -0
  151. airflow/api_fastapi/core_api/openapi/v1-rest-api-generated.yaml +10493 -0
  152. airflow/api_fastapi/core_api/routes/__init__.py +16 -0
  153. airflow/api_fastapi/core_api/routes/public/__init__.py +94 -0
  154. airflow/api_fastapi/core_api/routes/public/assets.py +555 -0
  155. airflow/api_fastapi/core_api/routes/public/auth.py +57 -0
  156. airflow/api_fastapi/core_api/routes/public/backfills.py +297 -0
  157. airflow/api_fastapi/core_api/routes/public/config.py +179 -0
  158. airflow/api_fastapi/core_api/routes/public/connections.py +249 -0
  159. airflow/api_fastapi/core_api/routes/public/dag_parsing.py +75 -0
  160. airflow/api_fastapi/core_api/routes/public/dag_report.py +75 -0
  161. airflow/api_fastapi/core_api/routes/public/dag_run.py +492 -0
  162. airflow/api_fastapi/core_api/routes/public/dag_sources.py +80 -0
  163. airflow/api_fastapi/core_api/routes/public/dag_stats.py +96 -0
  164. airflow/api_fastapi/core_api/routes/public/dag_tags.py +71 -0
  165. airflow/api_fastapi/core_api/routes/public/dag_versions.py +128 -0
  166. airflow/api_fastapi/core_api/routes/public/dag_warning.py +80 -0
  167. airflow/api_fastapi/core_api/routes/public/dags.py +349 -0
  168. airflow/api_fastapi/core_api/routes/public/event_logs.py +145 -0
  169. airflow/api_fastapi/core_api/routes/public/extra_links.py +90 -0
  170. airflow/api_fastapi/core_api/routes/public/import_error.py +196 -0
  171. airflow/api_fastapi/core_api/routes/public/job.py +130 -0
  172. airflow/api_fastapi/core_api/routes/public/log.py +153 -0
  173. airflow/api_fastapi/core_api/routes/public/monitor.py +30 -0
  174. airflow/api_fastapi/core_api/routes/public/plugins.py +46 -0
  175. airflow/api_fastapi/core_api/routes/public/pools.py +207 -0
  176. airflow/api_fastapi/core_api/routes/public/providers.py +62 -0
  177. airflow/api_fastapi/core_api/routes/public/task_instances.py +912 -0
  178. airflow/api_fastapi/core_api/routes/public/tasks.py +84 -0
  179. airflow/api_fastapi/core_api/routes/public/variables.py +202 -0
  180. airflow/api_fastapi/core_api/routes/public/version.py +34 -0
  181. airflow/api_fastapi/core_api/routes/public/xcom.py +303 -0
  182. airflow/api_fastapi/core_api/routes/ui/__init__.py +42 -0
  183. airflow/api_fastapi/core_api/routes/ui/assets.py +89 -0
  184. airflow/api_fastapi/core_api/routes/ui/auth.py +40 -0
  185. airflow/api_fastapi/core_api/routes/ui/backfills.py +78 -0
  186. airflow/api_fastapi/core_api/routes/ui/config.py +69 -0
  187. airflow/api_fastapi/core_api/routes/ui/connections.py +40 -0
  188. airflow/api_fastapi/core_api/routes/ui/dags.py +165 -0
  189. airflow/api_fastapi/core_api/routes/ui/dashboard.py +99 -0
  190. airflow/api_fastapi/core_api/routes/ui/dependencies.py +89 -0
  191. airflow/api_fastapi/core_api/routes/ui/grid.py +262 -0
  192. airflow/api_fastapi/core_api/routes/ui/structure.py +142 -0
  193. airflow/api_fastapi/core_api/security.py +362 -0
  194. airflow/api_fastapi/core_api/services/__init__.py +16 -0
  195. airflow/api_fastapi/core_api/services/public/__init__.py +16 -0
  196. airflow/api_fastapi/core_api/services/public/common.py +74 -0
  197. airflow/api_fastapi/core_api/services/public/connections.py +187 -0
  198. airflow/api_fastapi/core_api/services/public/pools.py +149 -0
  199. airflow/api_fastapi/core_api/services/public/variables.py +133 -0
  200. airflow/api_fastapi/core_api/services/ui/__init__.py +16 -0
  201. airflow/api_fastapi/core_api/services/ui/connections.py +253 -0
  202. airflow/api_fastapi/core_api/services/ui/dependencies.py +78 -0
  203. airflow/api_fastapi/core_api/services/ui/grid.py +326 -0
  204. airflow/api_fastapi/core_api/services/ui/structure.py +114 -0
  205. airflow/api_fastapi/execution_api/__init__.py +16 -0
  206. airflow/api_fastapi/execution_api/app.py +244 -0
  207. airflow/api_fastapi/execution_api/datamodels/__init__.py +16 -0
  208. airflow/api_fastapi/execution_api/datamodels/asset.py +55 -0
  209. airflow/api_fastapi/execution_api/datamodels/asset_event.py +58 -0
  210. airflow/api_fastapi/execution_api/datamodels/connection.py +35 -0
  211. airflow/api_fastapi/execution_api/datamodels/dagrun.py +38 -0
  212. airflow/api_fastapi/execution_api/datamodels/taskinstance.py +343 -0
  213. airflow/api_fastapi/execution_api/datamodels/token.py +32 -0
  214. airflow/api_fastapi/execution_api/datamodels/variable.py +36 -0
  215. airflow/api_fastapi/execution_api/datamodels/xcom.py +38 -0
  216. airflow/api_fastapi/execution_api/deps.py +152 -0
  217. airflow/api_fastapi/execution_api/routes/__init__.py +52 -0
  218. airflow/api_fastapi/execution_api/routes/asset_events.py +111 -0
  219. airflow/api_fastapi/execution_api/routes/assets.py +71 -0
  220. airflow/api_fastapi/execution_api/routes/connections.py +72 -0
  221. airflow/api_fastapi/execution_api/routes/dag_runs.py +178 -0
  222. airflow/api_fastapi/execution_api/routes/health.py +47 -0
  223. airflow/api_fastapi/execution_api/routes/task_instances.py +725 -0
  224. airflow/api_fastapi/execution_api/routes/task_reschedules.py +48 -0
  225. airflow/api_fastapi/execution_api/routes/variables.py +104 -0
  226. airflow/api_fastapi/execution_api/routes/xcoms.py +314 -0
  227. airflow/api_fastapi/execution_api/versions/__init__.py +25 -0
  228. airflow/api_fastapi/gunicorn_config.py +33 -0
  229. airflow/api_fastapi/logging/__init__.py +16 -0
  230. airflow/api_fastapi/logging/decorators.py +162 -0
  231. airflow/api_fastapi/main.py +27 -0
  232. airflow/assets/__init__.py +16 -0
  233. airflow/assets/evaluation.py +78 -0
  234. airflow/assets/manager.py +293 -0
  235. airflow/callbacks/__init__.py +16 -0
  236. airflow/callbacks/base_callback_sink.py +31 -0
  237. airflow/callbacks/callback_requests.py +91 -0
  238. airflow/callbacks/database_callback_sink.py +39 -0
  239. airflow/callbacks/pipe_callback_sink.py +50 -0
  240. airflow/cli/__init__.py +17 -0
  241. airflow/cli/cli_config.py +1916 -0
  242. airflow/cli/cli_parser.py +195 -0
  243. airflow/cli/commands/__init__.py +17 -0
  244. airflow/cli/commands/api_server_command.py +137 -0
  245. airflow/cli/commands/asset_command.py +158 -0
  246. airflow/cli/commands/backfill_command.py +81 -0
  247. airflow/cli/commands/cheat_sheet_command.py +66 -0
  248. airflow/cli/commands/config_command.py +1003 -0
  249. airflow/cli/commands/connection_command.py +382 -0
  250. airflow/cli/commands/daemon_utils.py +86 -0
  251. airflow/cli/commands/dag_command.py +652 -0
  252. airflow/cli/commands/dag_processor_command.py +59 -0
  253. airflow/cli/commands/db_command.py +309 -0
  254. airflow/cli/commands/info_command.py +390 -0
  255. airflow/cli/commands/jobs_command.py +62 -0
  256. airflow/cli/commands/kerberos_command.py +43 -0
  257. airflow/cli/commands/legacy_commands.py +39 -0
  258. airflow/cli/commands/plugins_command.py +60 -0
  259. airflow/cli/commands/pool_command.py +149 -0
  260. airflow/cli/commands/provider_command.py +259 -0
  261. airflow/cli/commands/rotate_fernet_key_command.py +80 -0
  262. airflow/cli/commands/scheduler_command.py +88 -0
  263. airflow/cli/commands/standalone_command.py +307 -0
  264. airflow/cli/commands/task_command.py +524 -0
  265. airflow/cli/commands/triggerer_command.py +71 -0
  266. airflow/cli/commands/variable_command.py +144 -0
  267. airflow/cli/commands/version_command.py +26 -0
  268. airflow/cli/simple_table.py +142 -0
  269. airflow/cli/utils.py +98 -0
  270. airflow/config_templates/__init__.py +17 -0
  271. airflow/config_templates/airflow_local_settings.py +325 -0
  272. airflow/config_templates/config.yml +2597 -0
  273. airflow/config_templates/config.yml.schema.json +111 -0
  274. airflow/config_templates/default_airflow.cfg +45 -0
  275. airflow/config_templates/default_webserver_config.py +132 -0
  276. airflow/config_templates/provider_config_fallback_defaults.cfg +136 -0
  277. airflow/config_templates/unit_tests.cfg +141 -0
  278. airflow/configuration.py +2251 -0
  279. airflow/customized_form_field_behaviours.schema.json +32 -0
  280. airflow/dag_processing/__init__.py +16 -0
  281. airflow/dag_processing/bundles/__init__.py +16 -0
  282. airflow/dag_processing/bundles/base.py +423 -0
  283. airflow/dag_processing/bundles/local.py +50 -0
  284. airflow/dag_processing/bundles/manager.py +163 -0
  285. airflow/dag_processing/bundles/provider.yaml +47 -0
  286. airflow/dag_processing/collection.py +920 -0
  287. airflow/dag_processing/manager.py +1140 -0
  288. airflow/dag_processing/processor.py +320 -0
  289. airflow/datasets/__init__.py +61 -0
  290. airflow/datasets/metadata.py +33 -0
  291. airflow/decorators/__init__.py +39 -0
  292. airflow/example_dags/__init__.py +17 -0
  293. airflow/example_dags/example_asset_alias.py +96 -0
  294. airflow/example_dags/example_asset_alias_with_no_taskflow.py +107 -0
  295. airflow/example_dags/example_asset_decorator.py +50 -0
  296. airflow/example_dags/example_asset_with_watchers.py +42 -0
  297. airflow/example_dags/example_assets.py +191 -0
  298. airflow/example_dags/example_bash_decorator.py +114 -0
  299. airflow/example_dags/example_bash_operator.py +74 -0
  300. airflow/example_dags/example_branch_datetime_operator.py +105 -0
  301. airflow/example_dags/example_branch_day_of_week_operator.py +61 -0
  302. airflow/example_dags/example_branch_labels.py +45 -0
  303. airflow/example_dags/example_branch_operator.py +166 -0
  304. airflow/example_dags/example_branch_operator_decorator.py +142 -0
  305. airflow/example_dags/example_branch_python_dop_operator_3.py +57 -0
  306. airflow/example_dags/example_complex.py +220 -0
  307. airflow/example_dags/example_custom_weight.py +58 -0
  308. airflow/example_dags/example_dag_decorator.py +74 -0
  309. airflow/example_dags/example_display_name.py +48 -0
  310. airflow/example_dags/example_dynamic_task_mapping.py +58 -0
  311. airflow/example_dags/example_dynamic_task_mapping_with_no_taskflow_operators.py +64 -0
  312. airflow/example_dags/example_external_task_marker_dag.py +98 -0
  313. airflow/example_dags/example_inlet_event_extra.py +59 -0
  314. airflow/example_dags/example_kubernetes_executor.py +221 -0
  315. airflow/example_dags/example_latest_only.py +38 -0
  316. airflow/example_dags/example_latest_only_with_trigger.py +49 -0
  317. airflow/example_dags/example_local_kubernetes_executor.py +71 -0
  318. airflow/example_dags/example_nested_branch_dag.py +56 -0
  319. airflow/example_dags/example_outlet_event_extra.py +77 -0
  320. airflow/example_dags/example_params_trigger_ui.py +102 -0
  321. airflow/example_dags/example_params_ui_tutorial.py +250 -0
  322. airflow/example_dags/example_passing_params_via_test_command.py +86 -0
  323. airflow/example_dags/example_python_decorator.py +132 -0
  324. airflow/example_dags/example_python_operator.py +147 -0
  325. airflow/example_dags/example_sensor_decorator.py +66 -0
  326. airflow/example_dags/example_sensors.py +132 -0
  327. airflow/example_dags/example_setup_teardown.py +50 -0
  328. airflow/example_dags/example_setup_teardown_taskflow.py +106 -0
  329. airflow/example_dags/example_short_circuit_decorator.py +60 -0
  330. airflow/example_dags/example_short_circuit_operator.py +66 -0
  331. airflow/example_dags/example_simplest_dag.py +33 -0
  332. airflow/example_dags/example_skip_dag.py +73 -0
  333. airflow/example_dags/example_task_group.py +66 -0
  334. airflow/example_dags/example_task_group_decorator.py +80 -0
  335. airflow/example_dags/example_time_delta_sensor_async.py +42 -0
  336. airflow/example_dags/example_trigger_controller_dag.py +42 -0
  337. airflow/example_dags/example_trigger_target_dag.py +55 -0
  338. airflow/example_dags/example_workday_timetable.py +31 -0
  339. airflow/example_dags/example_xcom.py +94 -0
  340. airflow/example_dags/example_xcomargs.py +65 -0
  341. airflow/example_dags/libs/__init__.py +17 -0
  342. airflow/example_dags/libs/helper.py +22 -0
  343. airflow/example_dags/plugins/__init__.py +16 -0
  344. airflow/example_dags/plugins/decreasing_priority_weight_strategy.py +41 -0
  345. airflow/example_dags/plugins/event_listener.py +184 -0
  346. airflow/example_dags/plugins/listener_plugin.py +26 -0
  347. airflow/example_dags/plugins/workday.py +104 -0
  348. airflow/example_dags/sql/sample.sql +24 -0
  349. airflow/example_dags/sql/tutorial_taskflow_template.sql +23 -0
  350. airflow/example_dags/tutorial.py +123 -0
  351. airflow/example_dags/tutorial_dag.py +136 -0
  352. airflow/example_dags/tutorial_objectstorage.py +134 -0
  353. airflow/example_dags/tutorial_taskflow_api.py +106 -0
  354. airflow/example_dags/tutorial_taskflow_api_virtualenv.py +84 -0
  355. airflow/example_dags/tutorial_taskflow_templates.py +107 -0
  356. airflow/exceptions.py +560 -0
  357. airflow/executors/__init__.py +16 -0
  358. airflow/executors/base_executor.py +758 -0
  359. airflow/executors/executor_constants.py +39 -0
  360. airflow/executors/executor_loader.py +300 -0
  361. airflow/executors/executor_utils.py +59 -0
  362. airflow/executors/local_executor.py +248 -0
  363. airflow/executors/workloads.py +165 -0
  364. airflow/git_version +1 -0
  365. airflow/hooks/README.md +24 -0
  366. airflow/hooks/__init__.py +35 -0
  367. airflow/hooks/base.py +171 -0
  368. airflow/io/__init__.py +118 -0
  369. airflow/io/path.py +22 -0
  370. airflow/io/storage.py +22 -0
  371. airflow/io/typedef.py +19 -0
  372. airflow/jobs/JOB_LIFECYCLE.md +158 -0
  373. airflow/jobs/__init__.py +17 -0
  374. airflow/jobs/base_job_runner.py +70 -0
  375. airflow/jobs/dag_processor_job_runner.py +71 -0
  376. airflow/jobs/job.py +405 -0
  377. airflow/jobs/scheduler_job_runner.py +2482 -0
  378. airflow/jobs/triggerer_job_runner.py +1052 -0
  379. airflow/lineage/__init__.py +17 -0
  380. airflow/lineage/hook.py +273 -0
  381. airflow/listeners/__init__.py +22 -0
  382. airflow/listeners/listener.py +91 -0
  383. airflow/listeners/spec/__init__.py +16 -0
  384. airflow/listeners/spec/asset.py +42 -0
  385. airflow/listeners/spec/dagrun.py +42 -0
  386. airflow/listeners/spec/importerrors.py +32 -0
  387. airflow/listeners/spec/lifecycle.py +44 -0
  388. airflow/listeners/spec/taskinstance.py +50 -0
  389. airflow/logging/__init__.py +16 -0
  390. airflow/logging/remote.py +49 -0
  391. airflow/logging_config.py +135 -0
  392. airflow/macros/__init__.py +33 -0
  393. airflow/metrics/__init__.py +16 -0
  394. airflow/metrics/base_stats_logger.py +113 -0
  395. airflow/metrics/datadog_logger.py +174 -0
  396. airflow/metrics/otel_logger.py +407 -0
  397. airflow/metrics/protocols.py +122 -0
  398. airflow/metrics/statsd_logger.py +186 -0
  399. airflow/metrics/validators.py +271 -0
  400. airflow/migrations/__init__.py +17 -0
  401. airflow/migrations/db_types.py +84 -0
  402. airflow/migrations/db_types.pyi +27 -0
  403. airflow/migrations/env.py +144 -0
  404. airflow/migrations/script.py.mako +45 -0
  405. airflow/migrations/utils.py +105 -0
  406. airflow/migrations/versions/0001_2_7_0_add_index_to_task_instance_table.py +55 -0
  407. airflow/migrations/versions/0002_2_7_0_add_custom_operator_name_column.py +52 -0
  408. airflow/migrations/versions/0003_2_7_0_add_include_deferred_column_to_pool.py +54 -0
  409. airflow/migrations/versions/0004_2_8_0_add_clear_number_to_dag_run.py +64 -0
  410. airflow/migrations/versions/0005_2_8_0_add_owner_display_name_to_audit_log_table.py +52 -0
  411. airflow/migrations/versions/0006_2_8_0_make_connection_login_password_text.py +60 -0
  412. airflow/migrations/versions/0007_2_8_0_add_processor_subdir_import_error.py +55 -0
  413. airflow/migrations/versions/0008_2_8_1_refactor_dag_run_indexes.py +52 -0
  414. airflow/migrations/versions/0009_2_9_0_add_rendered_map_index_to_taskinstance.py +50 -0
  415. airflow/migrations/versions/0010_2_9_0_add_run_id_to_audit_log_table_and_change_event_name_length.py +66 -0
  416. airflow/migrations/versions/0011_2_9_0_add_dataset_expression_in_dagmodel.py +55 -0
  417. airflow/migrations/versions/0012_2_9_0_adding_adding_max_failure_runs_column_.py +50 -0
  418. airflow/migrations/versions/0013_2_9_0_make_xcom_value_to_longblob_for_mysql.py +55 -0
  419. airflow/migrations/versions/0014_2_9_0_add_display_name_for_dag_and_task_.py +50 -0
  420. airflow/migrations/versions/0015_2_9_0_update_trigger_kwargs_type.py +93 -0
  421. airflow/migrations/versions/0016_2_9_2_remove_idx_last_scheduling_decision_.py +47 -0
  422. airflow/migrations/versions/0017_2_9_2_fix_inconsistency_between_ORM_and_migration_files.py +298 -0
  423. airflow/migrations/versions/0018_2_10_0_add_indexes_on_dag_id_column_in_referencing_tables.py +106 -0
  424. airflow/migrations/versions/0019_2_10_0_add_new_executor_field_to_db.py +48 -0
  425. airflow/migrations/versions/0020_2_10_0_added_dagpriorityparsingrequest_table.py +53 -0
  426. airflow/migrations/versions/0021_2_10_0_add_task_instance_history.py +106 -0
  427. airflow/migrations/versions/0022_2_10_0_add_dataset_alias.py +60 -0
  428. airflow/migrations/versions/0023_2_10_0_dataset_alias_dataset_event.py +68 -0
  429. airflow/migrations/versions/0024_2_10_0_add_try_number_to_audit_log.py +54 -0
  430. airflow/migrations/versions/0025_2_10_0_dataset_alias_dataset.py +69 -0
  431. airflow/migrations/versions/0026_2_10_0_dag_schedule_dataset_alias_reference.py +76 -0
  432. airflow/migrations/versions/0027_2_10_3_fix_dag_schedule_dataset_alias_reference_naming.py +238 -0
  433. airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key.py +95 -0
  434. airflow/migrations/versions/0029_3_0_0_remove_is_subdag.py +56 -0
  435. airflow/migrations/versions/0030_3_0_0_rename_schedule_interval_to_timetable_.py +60 -0
  436. airflow/migrations/versions/0031_3_0_0_add_triggered_by_field_to_dagrun.py +67 -0
  437. airflow/migrations/versions/0032_3_0_0_rename_execution_date_to_logical_date_and_nullable.py +128 -0
  438. airflow/migrations/versions/0033_3_0_0_add_tables_for_backfill.py +78 -0
  439. airflow/migrations/versions/0034_3_0_0_remove_redundant_index.py +49 -0
  440. airflow/migrations/versions/0035_3_0_0_update_user_id_type.py +52 -0
  441. airflow/migrations/versions/0036_3_0_0_add_name_field_to_dataset_model.py +137 -0
  442. airflow/migrations/versions/0037_3_0_0_add_backfill_to_dag_run_model.py +54 -0
  443. airflow/migrations/versions/0038_3_0_0_add_asset_active.py +77 -0
  444. airflow/migrations/versions/0039_3_0_0_tweak_assetaliasmodel_to_match_asset.py +83 -0
  445. airflow/migrations/versions/0040_3_0_0_add_exception_reason_and_logical_date_.py +57 -0
  446. airflow/migrations/versions/0041_3_0_0_rename_dataset_as_asset.py +754 -0
  447. airflow/migrations/versions/0042_3_0_0_add_uuid_primary_key_to_task_instance_.py +309 -0
  448. airflow/migrations/versions/0043_3_0_0_remove_scheduler_lock_column.py +49 -0
  449. airflow/migrations/versions/0044_3_0_0__drop_task_fail_table.py +75 -0
  450. airflow/migrations/versions/0045_3_0_0_add_last_heartbeat_at_directly_to_ti.py +60 -0
  451. airflow/migrations/versions/0046_3_0_0_drop_dag_pickling.py +66 -0
  452. airflow/migrations/versions/0047_3_0_0_add_dag_versioning.py +408 -0
  453. airflow/migrations/versions/0048_3_0_0_add_trigger_asset_reference.py +63 -0
  454. airflow/migrations/versions/0049_3_0_0_remove_pickled_data_from_xcom_table.py +184 -0
  455. airflow/migrations/versions/0050_3_0_0_add_dagbundlemodel.py +83 -0
  456. airflow/migrations/versions/0051_3_0_0_update_task_instance_trigger_timeout_to_utcdatetime.py +62 -0
  457. airflow/migrations/versions/0052_3_0_0_add_deadline_alerts_table.py +63 -0
  458. airflow/migrations/versions/0053_3_0_0_remove_processor_subdir.py +74 -0
  459. airflow/migrations/versions/0054_3_0_0_add_asset_reference_models.py +93 -0
  460. airflow/migrations/versions/0055_3_0_0_remove_pickled_data_from_dagrun_table.py +145 -0
  461. airflow/migrations/versions/0056_3_0_0_add_relative_fileloc_column.py +49 -0
  462. airflow/migrations/versions/0057_3_0_0_add_new_task_instance_field_scheduled_.py +58 -0
  463. airflow/migrations/versions/0058_3_0_0_add_dagrun_run_after.py +62 -0
  464. airflow/migrations/versions/0059_3_0_0_remove_external_trigger_field.py +58 -0
  465. airflow/migrations/versions/0060_3_0_0_add_try_id_to_ti_and_tih.py +162 -0
  466. airflow/migrations/versions/0061_3_0_0_use_ti_id_as_primary_key_to_TINote.py +151 -0
  467. airflow/migrations/versions/0062_3_0_0_remove_dag_default_view.py +48 -0
  468. airflow/migrations/versions/0063_3_0_0_use_ti_id_as_fk_to_taskreschedule.py +169 -0
  469. airflow/migrations/versions/0064_3_0_0_support_bundles_in_.py +61 -0
  470. airflow/migrations/versions/0065_3_0_0_add_new_otel_span_fields.py +76 -0
  471. airflow/migrations/versions/0066_3_0_0_rename_dataset_triggered_to_asset_triggered.py +47 -0
  472. airflow/migrations/versions/0067_3_0_0_rename_is_active_to_is_stale_column_in_.py +52 -0
  473. airflow/migrations/versions/0068_3_0_0_ti_table_id_unique_per_try.py +121 -0
  474. airflow/migrations/versions/__init__.py +17 -0
  475. airflow/models/__init__.py +143 -0
  476. airflow/models/abstractoperator.py +34 -0
  477. airflow/models/asset.py +764 -0
  478. airflow/models/backfill.py +500 -0
  479. airflow/models/base.py +95 -0
  480. airflow/models/baseoperator.py +693 -0
  481. airflow/models/baseoperatorlink.py +22 -0
  482. airflow/models/connection.py +558 -0
  483. airflow/models/crypto.py +92 -0
  484. airflow/models/dag.py +2629 -0
  485. airflow/models/dag_version.py +168 -0
  486. airflow/models/dagbag.py +698 -0
  487. airflow/models/dagbundle.py +45 -0
  488. airflow/models/dagcode.py +189 -0
  489. airflow/models/dagrun.py +1982 -0
  490. airflow/models/dagwarning.py +101 -0
  491. airflow/models/db_callback_request.py +55 -0
  492. airflow/models/deadline.py +92 -0
  493. airflow/models/errors.py +34 -0
  494. airflow/models/expandinput.py +140 -0
  495. airflow/models/log.py +101 -0
  496. airflow/models/mappedoperator.py +120 -0
  497. airflow/models/operator.py +28 -0
  498. airflow/models/param.py +22 -0
  499. airflow/models/pool.py +352 -0
  500. airflow/models/renderedtifields.py +282 -0
  501. airflow/models/serialized_dag.py +699 -0
  502. airflow/models/skipmixin.py +22 -0
  503. airflow/models/taskinstance.py +3471 -0
  504. airflow/models/taskinstancehistory.py +178 -0
  505. airflow/models/taskinstancekey.py +53 -0
  506. airflow/models/tasklog.py +44 -0
  507. airflow/models/taskmap.py +266 -0
  508. airflow/models/taskmixin.py +28 -0
  509. airflow/models/taskreschedule.py +94 -0
  510. airflow/models/trigger.py +450 -0
  511. airflow/models/variable.py +414 -0
  512. airflow/models/xcom.py +413 -0
  513. airflow/models/xcom_arg.py +192 -0
  514. airflow/operators/__init__.py +69 -0
  515. airflow/plugins_manager.py +633 -0
  516. airflow/policies.py +214 -0
  517. airflow/provider.yaml.schema.json +547 -0
  518. airflow/provider_info.schema.json +479 -0
  519. airflow/providers_manager.py +1276 -0
  520. airflow/py.typed +18 -0
  521. airflow/secrets/__init__.py +41 -0
  522. airflow/secrets/base_secrets.py +98 -0
  523. airflow/secrets/cache.py +130 -0
  524. airflow/secrets/environment_variables.py +43 -0
  525. airflow/secrets/local_filesystem.py +310 -0
  526. airflow/secrets/metastore.py +68 -0
  527. airflow/security/__init__.py +17 -0
  528. airflow/security/kerberos.py +212 -0
  529. airflow/security/permissions.py +126 -0
  530. airflow/security/utils.py +84 -0
  531. airflow/sensors/__init__.py +61 -0
  532. airflow/sensors/base.py +24 -0
  533. airflow/sentry.py +196 -0
  534. airflow/serialization/__init__.py +18 -0
  535. airflow/serialization/dag_dependency.py +121 -0
  536. airflow/serialization/enums.py +77 -0
  537. airflow/serialization/helpers.py +80 -0
  538. airflow/serialization/json_schema.py +72 -0
  539. airflow/serialization/schema.json +394 -0
  540. airflow/serialization/serde.py +390 -0
  541. airflow/serialization/serialized_objects.py +2189 -0
  542. airflow/serialization/serializers/__init__.py +17 -0
  543. airflow/serialization/serializers/bignum.py +59 -0
  544. airflow/serialization/serializers/builtin.py +59 -0
  545. airflow/serialization/serializers/datetime.py +101 -0
  546. airflow/serialization/serializers/deltalake.py +79 -0
  547. airflow/serialization/serializers/iceberg.py +76 -0
  548. airflow/serialization/serializers/kubernetes.py +64 -0
  549. airflow/serialization/serializers/numpy.py +92 -0
  550. airflow/serialization/serializers/pandas.py +70 -0
  551. airflow/serialization/serializers/timezone.py +102 -0
  552. airflow/settings.py +687 -0
  553. airflow/stats.py +79 -0
  554. airflow/task/__init__.py +17 -0
  555. airflow/task/priority_strategy.py +152 -0
  556. airflow/ti_deps/__init__.py +17 -0
  557. airflow/ti_deps/dep_context.py +105 -0
  558. airflow/ti_deps/dependencies_deps.py +74 -0
  559. airflow/ti_deps/dependencies_states.py +44 -0
  560. airflow/ti_deps/deps/__init__.py +18 -0
  561. airflow/ti_deps/deps/base_ti_dep.py +163 -0
  562. airflow/ti_deps/deps/dag_ti_slots_available_dep.py +38 -0
  563. airflow/ti_deps/deps/dag_unpaused_dep.py +33 -0
  564. airflow/ti_deps/deps/dagrun_exists_dep.py +37 -0
  565. airflow/ti_deps/deps/exec_date_after_start_date_dep.py +51 -0
  566. airflow/ti_deps/deps/mapped_task_expanded.py +36 -0
  567. airflow/ti_deps/deps/mapped_task_upstream_dep.py +104 -0
  568. airflow/ti_deps/deps/not_in_retry_period_dep.py +56 -0
  569. airflow/ti_deps/deps/not_previously_skipped_dep.py +100 -0
  570. airflow/ti_deps/deps/pool_slots_available_dep.py +68 -0
  571. airflow/ti_deps/deps/prev_dagrun_dep.py +213 -0
  572. airflow/ti_deps/deps/ready_to_reschedule.py +95 -0
  573. airflow/ti_deps/deps/runnable_exec_date_dep.py +61 -0
  574. airflow/ti_deps/deps/task_concurrency_dep.py +51 -0
  575. airflow/ti_deps/deps/task_not_running_dep.py +47 -0
  576. airflow/ti_deps/deps/trigger_rule_dep.py +592 -0
  577. airflow/ti_deps/deps/valid_state_dep.py +64 -0
  578. airflow/timetables/__init__.py +19 -0
  579. airflow/timetables/_cron.py +152 -0
  580. airflow/timetables/_delta.py +56 -0
  581. airflow/timetables/assets.py +97 -0
  582. airflow/timetables/base.py +295 -0
  583. airflow/timetables/datasets.py +33 -0
  584. airflow/timetables/events.py +134 -0
  585. airflow/timetables/interval.py +251 -0
  586. airflow/timetables/simple.py +210 -0
  587. airflow/timetables/trigger.py +369 -0
  588. airflow/traces/__init__.py +21 -0
  589. airflow/traces/otel_tracer.py +377 -0
  590. airflow/traces/tracer.py +304 -0
  591. airflow/traces/utils.py +114 -0
  592. airflow/triggers/__init__.py +35 -0
  593. airflow/triggers/base.py +239 -0
  594. airflow/triggers/testing.py +53 -0
  595. airflow/typing_compat.py +50 -0
  596. airflow/ui/.env.example +21 -0
  597. airflow/ui/.gitignore +1 -0
  598. airflow/ui/.prettierignore +7 -0
  599. airflow/ui/.prettierrc +13 -0
  600. airflow/ui/CONTRIBUTING.md +35 -0
  601. airflow/ui/README.md +69 -0
  602. airflow/ui/dev/index.html +24 -0
  603. airflow/ui/dist/.vite/manifest.json +20 -0
  604. airflow/ui/dist/assets/FailedLogs-Bt_DLoX8.js +1 -0
  605. airflow/ui/dist/assets/index-DVWpfKkn.js +1513 -0
  606. airflow/ui/dist/index.html +15 -0
  607. airflow/ui/dist/pin_100.png +0 -0
  608. airflow/ui/dist/pin_32.png +0 -0
  609. airflow/ui/eslint.config.js +47 -0
  610. airflow/ui/index.html +14 -0
  611. airflow/ui/openapi-gen/queries/common.ts +1902 -0
  612. airflow/ui/openapi-gen/queries/ensureQueryData.ts +2518 -0
  613. airflow/ui/openapi-gen/queries/index.ts +4 -0
  614. airflow/ui/openapi-gen/queries/infiniteQueries.ts +1 -0
  615. airflow/ui/openapi-gen/queries/prefetch.ts +2518 -0
  616. airflow/ui/openapi-gen/queries/queries.ts +4729 -0
  617. airflow/ui/openapi-gen/queries/suspense.ts +2974 -0
  618. airflow/ui/openapi-gen/requests/core/ApiError.ts +21 -0
  619. airflow/ui/openapi-gen/requests/core/ApiRequestOptions.ts +14 -0
  620. airflow/ui/openapi-gen/requests/core/ApiResult.ts +7 -0
  621. airflow/ui/openapi-gen/requests/core/CancelablePromise.ts +126 -0
  622. airflow/ui/openapi-gen/requests/core/OpenAPI.ts +58 -0
  623. airflow/ui/openapi-gen/requests/core/request.ts +374 -0
  624. airflow/ui/openapi-gen/requests/index.ts +7 -0
  625. airflow/ui/openapi-gen/requests/schemas.gen.ts +6966 -0
  626. airflow/ui/openapi-gen/requests/services.gen.ts +3587 -0
  627. airflow/ui/openapi-gen/requests/types.gen.ts +5490 -0
  628. airflow/ui/openapi-merge.json +11 -0
  629. airflow/ui/package.json +93 -0
  630. airflow/ui/pnpm-lock.yaml +9348 -0
  631. airflow/ui/public/pin_100.png +0 -0
  632. airflow/ui/public/pin_32.png +0 -0
  633. airflow/ui/rules/core.js +1448 -0
  634. airflow/ui/rules/levels.js +27 -0
  635. airflow/ui/rules/off.js +29 -0
  636. airflow/ui/rules/perfectionist.js +139 -0
  637. airflow/ui/rules/plugin-patch.d.ts +49 -0
  638. airflow/ui/rules/prettier.js +39 -0
  639. airflow/ui/rules/react.js +623 -0
  640. airflow/ui/rules/stylistic.js +91 -0
  641. airflow/ui/rules/typescript.js +1889 -0
  642. airflow/ui/rules/unicorn.js +1281 -0
  643. airflow/ui/src/assets/AirflowPin.tsx +76 -0
  644. airflow/ui/src/assets/DagIcon.tsx +53 -0
  645. airflow/ui/src/assets/TaskIcon.tsx +35 -0
  646. airflow/ui/src/components/ActionAccordion/ActionAccordion.tsx +103 -0
  647. airflow/ui/src/components/ActionAccordion/columns.tsx +65 -0
  648. airflow/ui/src/components/ActionAccordion/index.tsx +20 -0
  649. airflow/ui/src/components/AssetExpression/AndGateNode.tsx +53 -0
  650. airflow/ui/src/components/AssetExpression/AssetExpression.tsx +83 -0
  651. airflow/ui/src/components/AssetExpression/AssetNode.tsx +61 -0
  652. airflow/ui/src/components/AssetExpression/OrGateNode.tsx +28 -0
  653. airflow/ui/src/components/AssetExpression/index.ts +21 -0
  654. airflow/ui/src/components/AssetExpression/types.ts +46 -0
  655. airflow/ui/src/components/Assets/AssetEvent.tsx +92 -0
  656. airflow/ui/src/components/Assets/AssetEvents.tsx +116 -0
  657. airflow/ui/src/components/Assets/TriggeredRuns.tsx +70 -0
  658. airflow/ui/src/components/Banner/BackfillBanner.tsx +120 -0
  659. airflow/ui/src/components/Banner/index.tsx +20 -0
  660. airflow/ui/src/components/BreadcrumbStats.tsx +53 -0
  661. airflow/ui/src/components/Clear/Run/ClearRunButton.tsx +50 -0
  662. airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx +130 -0
  663. airflow/ui/src/components/Clear/Run/index.tsx +20 -0
  664. airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceButton.tsx +52 -0
  665. airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx +157 -0
  666. airflow/ui/src/components/Clear/TaskInstance/index.tsx +20 -0
  667. airflow/ui/src/components/Clear/columns.tsx +66 -0
  668. airflow/ui/src/components/Clear/index.tsx +21 -0
  669. airflow/ui/src/components/ConfirmationModal.tsx +59 -0
  670. airflow/ui/src/components/DagActions/ParseDag.tsx +45 -0
  671. airflow/ui/src/components/DagActions/RunBackfillButton.tsx +45 -0
  672. airflow/ui/src/components/DagActions/RunBackfillForm.tsx +243 -0
  673. airflow/ui/src/components/DagActions/RunBackfillModal.tsx +47 -0
  674. airflow/ui/src/components/DagRunInfo.tsx +68 -0
  675. airflow/ui/src/components/DagVersion.tsx +36 -0
  676. airflow/ui/src/components/DagVersionDetails.tsx +63 -0
  677. airflow/ui/src/components/DagVersionSelect.tsx +102 -0
  678. airflow/ui/src/components/DataTable/CardList.tsx +42 -0
  679. airflow/ui/src/components/DataTable/DataTable.test.tsx +162 -0
  680. airflow/ui/src/components/DataTable/DataTable.tsx +164 -0
  681. airflow/ui/src/components/DataTable/FilterMenuButton.tsx +70 -0
  682. airflow/ui/src/components/DataTable/TableList.tsx +103 -0
  683. airflow/ui/src/components/DataTable/ToggleTableDisplay.tsx +60 -0
  684. airflow/ui/src/components/DataTable/index.ts +20 -0
  685. airflow/ui/src/components/DataTable/searchParams.test.ts +79 -0
  686. airflow/ui/src/components/DataTable/searchParams.ts +82 -0
  687. airflow/ui/src/components/DataTable/skeleton.tsx +51 -0
  688. airflow/ui/src/components/DataTable/types.ts +42 -0
  689. airflow/ui/src/components/DataTable/useRowSelection.ts +87 -0
  690. airflow/ui/src/components/DataTable/useTableUrlState.ts +62 -0
  691. airflow/ui/src/components/DisplayMarkdownButton.tsx +65 -0
  692. airflow/ui/src/components/DurationChart.tsx +169 -0
  693. airflow/ui/src/components/EditableMarkdownButton.tsx +119 -0
  694. airflow/ui/src/components/ErrorAlert.tsx +64 -0
  695. airflow/ui/src/components/FlexibleForm/FieldAdvancedArray.tsx +87 -0
  696. airflow/ui/src/components/FlexibleForm/FieldBool.tsx +44 -0
  697. airflow/ui/src/components/FlexibleForm/FieldDateTime.tsx +54 -0
  698. airflow/ui/src/components/FlexibleForm/FieldDropdown.tsx +82 -0
  699. airflow/ui/src/components/FlexibleForm/FieldMultiSelect.tsx +87 -0
  700. airflow/ui/src/components/FlexibleForm/FieldMultilineText.tsx +48 -0
  701. airflow/ui/src/components/FlexibleForm/FieldNumber.tsx +59 -0
  702. airflow/ui/src/components/FlexibleForm/FieldObject.tsx +59 -0
  703. airflow/ui/src/components/FlexibleForm/FieldRow.tsx +61 -0
  704. airflow/ui/src/components/FlexibleForm/FieldSelector.tsx +121 -0
  705. airflow/ui/src/components/FlexibleForm/FieldString.tsx +64 -0
  706. airflow/ui/src/components/FlexibleForm/FieldStringArray.tsx +67 -0
  707. airflow/ui/src/components/FlexibleForm/FlexibleForm.tsx +89 -0
  708. airflow/ui/src/components/FlexibleForm/HiddenInput.tsx +40 -0
  709. airflow/ui/src/components/FlexibleForm/Row.tsx +34 -0
  710. airflow/ui/src/components/FlexibleForm/index.tsx +27 -0
  711. airflow/ui/src/components/Graph/AliasNode.tsx +50 -0
  712. airflow/ui/src/components/Graph/AssetConditionNode.tsx +43 -0
  713. airflow/ui/src/components/Graph/AssetNode.tsx +91 -0
  714. airflow/ui/src/components/Graph/DagNode.tsx +58 -0
  715. airflow/ui/src/components/Graph/DefaultNode.tsx +39 -0
  716. airflow/ui/src/components/Graph/DownloadButton.tsx +79 -0
  717. airflow/ui/src/components/Graph/Edge.tsx +79 -0
  718. airflow/ui/src/components/Graph/JoinNode.tsx +34 -0
  719. airflow/ui/src/components/Graph/NodeWrapper.tsx +28 -0
  720. airflow/ui/src/components/Graph/TaskLink.tsx +50 -0
  721. airflow/ui/src/components/Graph/TaskNode.tsx +149 -0
  722. airflow/ui/src/components/Graph/graphTypes.ts +39 -0
  723. airflow/ui/src/components/Graph/reactflowUtils.ts +146 -0
  724. airflow/ui/src/components/Graph/useGraphLayout.ts +271 -0
  725. airflow/ui/src/components/HeaderCard.tsx +56 -0
  726. airflow/ui/src/components/JsonEditor.tsx +51 -0
  727. airflow/ui/src/components/LimitedItemsList.tsx +70 -0
  728. airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx +79 -0
  729. airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx +78 -0
  730. airflow/ui/src/components/MarkAs/Run/index.tsx +20 -0
  731. airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx +82 -0
  732. airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx +142 -0
  733. airflow/ui/src/components/MarkAs/TaskInstance/index.tsx +20 -0
  734. airflow/ui/src/components/MarkAs/index.tsx +21 -0
  735. airflow/ui/src/components/MarkAs/utils.ts +21 -0
  736. airflow/ui/src/components/QuickFilterButton.tsx +39 -0
  737. airflow/ui/src/components/ReactMarkdown.tsx +117 -0
  738. airflow/ui/src/components/RenderedJsonField.tsx +56 -0
  739. airflow/ui/src/components/RunTypeIcon.tsx +48 -0
  740. airflow/ui/src/components/SearchBar.test.tsx +49 -0
  741. airflow/ui/src/components/SearchBar.tsx +106 -0
  742. airflow/ui/src/components/SearchDags/SearchDags.tsx +93 -0
  743. airflow/ui/src/components/SearchDags/SearchDagsButton.tsx +58 -0
  744. airflow/ui/src/components/SearchDags/SearchDagsDropdownIndicator.tsx +29 -0
  745. airflow/ui/src/components/SearchDags/index.ts +20 -0
  746. airflow/ui/src/components/Stat.tsx +33 -0
  747. airflow/ui/src/components/StateBadge.tsx +44 -0
  748. airflow/ui/src/components/StateIcon.tsx +61 -0
  749. airflow/ui/src/components/TaskInstanceTooltip.tsx +70 -0
  750. airflow/ui/src/components/TaskName.tsx +87 -0
  751. airflow/ui/src/components/TaskTrySelect.tsx +150 -0
  752. airflow/ui/src/components/Time.test.tsx +61 -0
  753. airflow/ui/src/components/Time.tsx +65 -0
  754. airflow/ui/src/components/TimeRangeSelector.tsx +88 -0
  755. airflow/ui/src/components/TogglePause.tsx +75 -0
  756. airflow/ui/src/components/TrendCountButton.tsx +66 -0
  757. airflow/ui/src/components/TrendCountChart.tsx +149 -0
  758. airflow/ui/src/components/TriggerDag/EditableMarkdown.tsx +53 -0
  759. airflow/ui/src/components/TriggerDag/TriggerDAGButton.tsx +59 -0
  760. airflow/ui/src/components/TriggerDag/TriggerDAGForm.tsx +224 -0
  761. airflow/ui/src/components/TriggerDag/TriggerDAGModal.tsx +58 -0
  762. airflow/ui/src/components/TruncatedText.tsx +40 -0
  763. airflow/ui/src/components/WarningAlert.tsx +39 -0
  764. airflow/ui/src/components/renderStructuredLog.tsx +218 -0
  765. airflow/ui/src/components/ui/Accordion/ItemContent.tsx +28 -0
  766. airflow/ui/src/components/ui/Accordion/ItemTrigger.tsx +47 -0
  767. airflow/ui/src/components/ui/Accordion/index.tsx +28 -0
  768. airflow/ui/src/components/ui/ActionBar/BarContent.tsx +39 -0
  769. airflow/ui/src/components/ui/ActionBar/CloseTrigger.tsx +28 -0
  770. airflow/ui/src/components/ui/ActionBar/index.ts +28 -0
  771. airflow/ui/src/components/ui/ActionButton.tsx +68 -0
  772. airflow/ui/src/components/ui/Alert.tsx +60 -0
  773. airflow/ui/src/components/ui/Breadcrumb/Root.tsx +49 -0
  774. airflow/ui/src/components/ui/Breadcrumb/index.ts +26 -0
  775. airflow/ui/src/components/ui/Button.tsx +52 -0
  776. airflow/ui/src/components/ui/Checkbox.tsx +38 -0
  777. airflow/ui/src/components/ui/Clipboard.tsx +89 -0
  778. airflow/ui/src/components/ui/CloseButton.tsx +30 -0
  779. airflow/ui/src/components/ui/DagWarningsModal.tsx +70 -0
  780. airflow/ui/src/components/ui/Dialog/CloseTrigger.tsx +36 -0
  781. airflow/ui/src/components/ui/Dialog/Content.tsx +41 -0
  782. airflow/ui/src/components/ui/Dialog/index.ts +28 -0
  783. airflow/ui/src/components/ui/FileUpload/Dropzone.tsx +43 -0
  784. airflow/ui/src/components/ui/FileUpload/FileInput.tsx +52 -0
  785. airflow/ui/src/components/ui/FileUpload/Item.tsx +61 -0
  786. airflow/ui/src/components/ui/FileUpload/List.tsx +51 -0
  787. airflow/ui/src/components/ui/FileUpload/Root.tsx +35 -0
  788. airflow/ui/src/components/ui/FileUpload/index.ts +34 -0
  789. airflow/ui/src/components/ui/InputGroup.tsx +57 -0
  790. airflow/ui/src/components/ui/Menu/Menu.tsx +26 -0
  791. airflow/ui/src/components/ui/Menu/MenuContent.tsx +37 -0
  792. airflow/ui/src/components/ui/Menu/index.ts +20 -0
  793. airflow/ui/src/components/ui/NumberInput.tsx +40 -0
  794. airflow/ui/src/components/ui/Pagination/Ellipsis.tsx +37 -0
  795. airflow/ui/src/components/ui/Pagination/Item.tsx +48 -0
  796. airflow/ui/src/components/ui/Pagination/Items.tsx +36 -0
  797. airflow/ui/src/components/ui/Pagination/NextTrigger.tsx +37 -0
  798. airflow/ui/src/components/ui/Pagination/PageText.tsx +46 -0
  799. airflow/ui/src/components/ui/Pagination/PrevTrigger.tsx +37 -0
  800. airflow/ui/src/components/ui/Pagination/Root.tsx +54 -0
  801. airflow/ui/src/components/ui/Pagination/context.ts +34 -0
  802. airflow/ui/src/components/ui/Pagination/index.ts +35 -0
  803. airflow/ui/src/components/ui/Popover/Arrow.tsx +26 -0
  804. airflow/ui/src/components/ui/Popover/CloseTrigger.tsx +30 -0
  805. airflow/ui/src/components/ui/Popover/Content.tsx +37 -0
  806. airflow/ui/src/components/ui/Popover/index.tsx +30 -0
  807. airflow/ui/src/components/ui/ProgressBar.tsx +30 -0
  808. airflow/ui/src/components/ui/RadioCard.tsx +82 -0
  809. airflow/ui/src/components/ui/SegmentedControl.tsx +69 -0
  810. airflow/ui/src/components/ui/Select/Content.tsx +37 -0
  811. airflow/ui/src/components/ui/Select/Item.tsx +34 -0
  812. airflow/ui/src/components/ui/Select/ItemGroup.tsx +35 -0
  813. airflow/ui/src/components/ui/Select/Root.tsx +24 -0
  814. airflow/ui/src/components/ui/Select/Trigger.tsx +51 -0
  815. airflow/ui/src/components/ui/Select/ValueText.tsx +51 -0
  816. airflow/ui/src/components/ui/Select/index.ts +36 -0
  817. airflow/ui/src/components/ui/Switch.tsx +50 -0
  818. airflow/ui/src/components/ui/Tag.tsx +44 -0
  819. airflow/ui/src/components/ui/Toaster/Toaster.tsx +41 -0
  820. airflow/ui/src/components/ui/Toaster/createToaster.ts +24 -0
  821. airflow/ui/src/components/ui/Toaster/index.ts +21 -0
  822. airflow/ui/src/components/ui/Tooltip.tsx +64 -0
  823. airflow/ui/src/components/ui/index.ts +35 -0
  824. airflow/ui/src/constants/reprocessBehaviourParams.ts +23 -0
  825. airflow/ui/src/constants/searchParams.ts +38 -0
  826. airflow/ui/src/constants/sortParams.ts +38 -0
  827. airflow/ui/src/constants/stateOptions.ts +63 -0
  828. airflow/ui/src/constants/urlRegex.ts +20 -0
  829. airflow/ui/src/context/colorMode/ColorModeProvider.tsx +24 -0
  830. airflow/ui/src/context/colorMode/index.ts +21 -0
  831. airflow/ui/src/context/colorMode/useColorMode.tsx +32 -0
  832. airflow/ui/src/context/openGroups/Context.ts +27 -0
  833. airflow/ui/src/context/openGroups/OpenGroupsProvider.tsx +49 -0
  834. airflow/ui/src/context/openGroups/index.ts +22 -0
  835. airflow/ui/src/context/openGroups/useOpenGroups.ts +31 -0
  836. airflow/ui/src/context/timezone/Context.ts +26 -0
  837. airflow/ui/src/context/timezone/TimezoneProvider.tsx +37 -0
  838. airflow/ui/src/context/timezone/index.ts +22 -0
  839. airflow/ui/src/context/timezone/useTimezone.ts +31 -0
  840. airflow/ui/src/hooks/useSelectedVersion.ts +92 -0
  841. airflow/ui/src/layouts/BaseLayout.tsx +42 -0
  842. airflow/ui/src/layouts/DagsLayout.tsx +35 -0
  843. airflow/ui/src/layouts/Details/DagBreadcrumb.tsx +108 -0
  844. airflow/ui/src/layouts/Details/DagRunSelect.tsx +105 -0
  845. airflow/ui/src/layouts/Details/DetailsLayout.tsx +133 -0
  846. airflow/ui/src/layouts/Details/Gantt/Gantt.tsx +21 -0
  847. airflow/ui/src/layouts/Details/Gantt/index.ts +20 -0
  848. airflow/ui/src/layouts/Details/Graph/Graph.tsx +204 -0
  849. airflow/ui/src/layouts/Details/Graph/index.ts +20 -0
  850. airflow/ui/src/layouts/Details/Grid/Bar.tsx +80 -0
  851. airflow/ui/src/layouts/Details/Grid/DurationAxis.tsx +23 -0
  852. airflow/ui/src/layouts/Details/Grid/DurationTick.tsx +25 -0
  853. airflow/ui/src/layouts/Details/Grid/Grid.tsx +117 -0
  854. airflow/ui/src/layouts/Details/Grid/GridButton.tsx +79 -0
  855. airflow/ui/src/layouts/Details/Grid/GridTI.tsx +122 -0
  856. airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx +60 -0
  857. airflow/ui/src/layouts/Details/Grid/TaskNames.tsx +101 -0
  858. airflow/ui/src/layouts/Details/Grid/index.ts +20 -0
  859. airflow/ui/src/layouts/Details/Grid/utils.ts +58 -0
  860. airflow/ui/src/layouts/Details/NavTabs.tsx +63 -0
  861. airflow/ui/src/layouts/Details/PanelButtons.tsx +232 -0
  862. airflow/ui/src/layouts/Details/ToggleGroups.tsx +81 -0
  863. airflow/ui/src/layouts/Nav/AdminButton.tsx +77 -0
  864. airflow/ui/src/layouts/Nav/BrowseButton.tsx +61 -0
  865. airflow/ui/src/layouts/Nav/DocsButton.tsx +80 -0
  866. airflow/ui/src/layouts/Nav/LogoutModal.tsx +44 -0
  867. airflow/ui/src/layouts/Nav/Nav.tsx +79 -0
  868. airflow/ui/src/layouts/Nav/NavButton.tsx +55 -0
  869. airflow/ui/src/layouts/Nav/PluginMenus.tsx +92 -0
  870. airflow/ui/src/layouts/Nav/SecurityButton.tsx +50 -0
  871. airflow/ui/src/layouts/Nav/TimezoneModal.tsx +42 -0
  872. airflow/ui/src/layouts/Nav/TimezoneSelector.tsx +79 -0
  873. airflow/ui/src/layouts/Nav/UserSettingsButton.tsx +93 -0
  874. airflow/ui/src/layouts/Nav/index.ts +20 -0
  875. airflow/ui/src/main.tsx +76 -0
  876. airflow/ui/src/mocks/handlers/config.ts +42 -0
  877. airflow/ui/src/mocks/handlers/dag.ts +65 -0
  878. airflow/ui/src/mocks/handlers/dags.ts +189 -0
  879. airflow/ui/src/mocks/handlers/index.ts +24 -0
  880. airflow/ui/src/mocks/handlers/log.ts +194 -0
  881. airflow/ui/src/pages/Asset/Asset.tsx +121 -0
  882. airflow/ui/src/pages/Asset/AssetGraph.tsx +89 -0
  883. airflow/ui/src/pages/Asset/CreateAssetEvent.tsx +54 -0
  884. airflow/ui/src/pages/Asset/CreateAssetEventModal.tsx +218 -0
  885. airflow/ui/src/pages/Asset/Header.tsx +46 -0
  886. airflow/ui/src/pages/Asset/index.ts +20 -0
  887. airflow/ui/src/pages/AssetsList/AssetsList.tsx +140 -0
  888. airflow/ui/src/pages/AssetsList/DependencyPopover.tsx +64 -0
  889. airflow/ui/src/pages/AssetsList/index.ts +20 -0
  890. airflow/ui/src/pages/Configs/Configs.tsx +71 -0
  891. airflow/ui/src/pages/Configs/index.ts +20 -0
  892. airflow/ui/src/pages/Connections/AddConnectionButton.tsx +80 -0
  893. airflow/ui/src/pages/Connections/ConnectionForm.tsx +242 -0
  894. airflow/ui/src/pages/Connections/ConnectionStandardFields.tsx +98 -0
  895. airflow/ui/src/pages/Connections/Connections.tsx +150 -0
  896. airflow/ui/src/pages/Connections/DeleteConnectionButton.tsx +87 -0
  897. airflow/ui/src/pages/Connections/EditConnectionButton.tsx +92 -0
  898. airflow/ui/src/pages/Connections/index.ts +20 -0
  899. airflow/ui/src/pages/Dag/Backfills/Backfills.tsx +135 -0
  900. airflow/ui/src/pages/Dag/Backfills/index.ts +20 -0
  901. airflow/ui/src/pages/Dag/Code/Code.tsx +185 -0
  902. airflow/ui/src/pages/Dag/Code/index.ts +20 -0
  903. airflow/ui/src/pages/Dag/Dag.tsx +99 -0
  904. airflow/ui/src/pages/Dag/DagHeader.test.tsx +66 -0
  905. airflow/ui/src/pages/Dag/Details.tsx +138 -0
  906. airflow/ui/src/pages/Dag/Header.tsx +118 -0
  907. airflow/ui/src/pages/Dag/Overview/FailedLogs.tsx +65 -0
  908. airflow/ui/src/pages/Dag/Overview/Overview.tsx +151 -0
  909. airflow/ui/src/pages/Dag/Overview/TaskLogPreview.tsx +76 -0
  910. airflow/ui/src/pages/Dag/Overview/index.ts +20 -0
  911. airflow/ui/src/pages/Dag/Tasks/TaskCard.tsx +97 -0
  912. airflow/ui/src/pages/Dag/Tasks/TaskRecentRuns.tsx +71 -0
  913. airflow/ui/src/pages/Dag/Tasks/Tasks.tsx +67 -0
  914. airflow/ui/src/pages/Dag/Tasks/index.ts +20 -0
  915. airflow/ui/src/pages/Dag/index.ts +20 -0
  916. airflow/ui/src/pages/DagRuns.tsx +286 -0
  917. airflow/ui/src/pages/DagsList/AssetSchedule.tsx +87 -0
  918. airflow/ui/src/pages/DagsList/DagCard.test.tsx +107 -0
  919. airflow/ui/src/pages/DagsList/DagCard.tsx +91 -0
  920. airflow/ui/src/pages/DagsList/DagTags.tsx +37 -0
  921. airflow/ui/src/pages/DagsList/DagsFilters.tsx +244 -0
  922. airflow/ui/src/pages/DagsList/DagsList.test.tsx +37 -0
  923. airflow/ui/src/pages/DagsList/DagsList.tsx +260 -0
  924. airflow/ui/src/pages/DagsList/RecentRuns.tsx +98 -0
  925. airflow/ui/src/pages/DagsList/Schedule.tsx +42 -0
  926. airflow/ui/src/pages/DagsList/SortSelect.tsx +48 -0
  927. airflow/ui/src/pages/DagsList/index.ts +20 -0
  928. airflow/ui/src/pages/Dashboard/Dashboard.tsx +70 -0
  929. airflow/ui/src/pages/Dashboard/Health/Health.tsx +64 -0
  930. airflow/ui/src/pages/Dashboard/Health/HealthBadge.tsx +60 -0
  931. airflow/ui/src/pages/Dashboard/Health/HealthSection.tsx +59 -0
  932. airflow/ui/src/pages/Dashboard/Health/index.ts +20 -0
  933. airflow/ui/src/pages/Dashboard/HistoricalMetrics/DagRunMetrics.tsx +62 -0
  934. airflow/ui/src/pages/Dashboard/HistoricalMetrics/HistoricalMetrics.tsx +102 -0
  935. airflow/ui/src/pages/Dashboard/HistoricalMetrics/MetricSection.tsx +88 -0
  936. airflow/ui/src/pages/Dashboard/HistoricalMetrics/MetricSectionSkeleton.tsx +26 -0
  937. airflow/ui/src/pages/Dashboard/HistoricalMetrics/TaskInstanceMetrics.tsx +84 -0
  938. airflow/ui/src/pages/Dashboard/HistoricalMetrics/index.ts +20 -0
  939. airflow/ui/src/pages/Dashboard/Stats/DAGImportErrors.tsx +82 -0
  940. airflow/ui/src/pages/Dashboard/Stats/DAGImportErrorsModal.tsx +115 -0
  941. airflow/ui/src/pages/Dashboard/Stats/DagFilterButton.tsx +44 -0
  942. airflow/ui/src/pages/Dashboard/Stats/Stats.tsx +48 -0
  943. airflow/ui/src/pages/Dashboard/Stats/index.ts +20 -0
  944. airflow/ui/src/pages/Dashboard/index.ts +20 -0
  945. airflow/ui/src/pages/Error.tsx +73 -0
  946. airflow/ui/src/pages/Events/Events.tsx +157 -0
  947. airflow/ui/src/pages/Events/index.tsx +20 -0
  948. airflow/ui/src/pages/MappedTaskInstance/Header.tsx +65 -0
  949. airflow/ui/src/pages/MappedTaskInstance/MappedTaskInstance.tsx +89 -0
  950. airflow/ui/src/pages/MappedTaskInstance/index.ts +20 -0
  951. airflow/ui/src/pages/Plugins.tsx +55 -0
  952. airflow/ui/src/pages/Pools/AddPoolButton.tsx +75 -0
  953. airflow/ui/src/pages/Pools/DeletePoolButton.tsx +85 -0
  954. airflow/ui/src/pages/Pools/EditPoolButton.tsx +85 -0
  955. airflow/ui/src/pages/Pools/PoolBar.tsx +102 -0
  956. airflow/ui/src/pages/Pools/PoolForm.tsx +140 -0
  957. airflow/ui/src/pages/Pools/Pools.tsx +136 -0
  958. airflow/ui/src/pages/Pools/index.tsx +20 -0
  959. airflow/ui/src/pages/Providers.tsx +87 -0
  960. airflow/ui/src/pages/Run/Details.tsx +156 -0
  961. airflow/ui/src/pages/Run/Header.tsx +124 -0
  962. airflow/ui/src/pages/Run/Run.tsx +77 -0
  963. airflow/ui/src/pages/Run/index.ts +20 -0
  964. airflow/ui/src/pages/Security.tsx +56 -0
  965. airflow/ui/src/pages/Task/Header.tsx +45 -0
  966. airflow/ui/src/pages/Task/Overview/Overview.tsx +106 -0
  967. airflow/ui/src/pages/Task/Overview/index.ts +20 -0
  968. airflow/ui/src/pages/Task/Task.tsx +55 -0
  969. airflow/ui/src/pages/Task/index.ts +20 -0
  970. airflow/ui/src/pages/TaskInstance/BlockingDeps.tsx +57 -0
  971. airflow/ui/src/pages/TaskInstance/Details.tsx +243 -0
  972. airflow/ui/src/pages/TaskInstance/ExtraLinks.tsx +50 -0
  973. airflow/ui/src/pages/TaskInstance/Header.tsx +114 -0
  974. airflow/ui/src/pages/TaskInstance/Logs/Logs.test.tsx +52 -0
  975. airflow/ui/src/pages/TaskInstance/Logs/Logs.tsx +134 -0
  976. airflow/ui/src/pages/TaskInstance/Logs/TaskLogContent.tsx +76 -0
  977. airflow/ui/src/pages/TaskInstance/Logs/TaskLogHeader.tsx +194 -0
  978. airflow/ui/src/pages/TaskInstance/Logs/index.ts +20 -0
  979. airflow/ui/src/pages/TaskInstance/RenderedTemplates.tsx +64 -0
  980. airflow/ui/src/pages/TaskInstance/TaskInstance.tsx +82 -0
  981. airflow/ui/src/pages/TaskInstance/TriggererInfo.tsx +58 -0
  982. airflow/ui/src/pages/TaskInstance/index.ts +21 -0
  983. airflow/ui/src/pages/TaskInstances/TaskInstances.tsx +226 -0
  984. airflow/ui/src/pages/TaskInstances/TaskInstancesFilter.tsx +134 -0
  985. airflow/ui/src/pages/TaskInstances/index.ts +19 -0
  986. airflow/ui/src/pages/Variables/DeleteVariablesButton.tsx +101 -0
  987. airflow/ui/src/pages/Variables/ImportVariablesButton.tsx +58 -0
  988. airflow/ui/src/pages/Variables/ImportVariablesForm.tsx +211 -0
  989. airflow/ui/src/pages/Variables/ManageVariable/AddVariableButton.tsx +78 -0
  990. airflow/ui/src/pages/Variables/ManageVariable/DeleteVariableButton.tsx +87 -0
  991. airflow/ui/src/pages/Variables/ManageVariable/EditVariableButton.tsx +87 -0
  992. airflow/ui/src/pages/Variables/ManageVariable/VariableForm.tsx +127 -0
  993. airflow/ui/src/pages/Variables/Variables.tsx +229 -0
  994. airflow/ui/src/pages/Variables/index.tsx +20 -0
  995. airflow/ui/src/pages/XCom/XCom.tsx +133 -0
  996. airflow/ui/src/pages/XCom/XComEntry.tsx +60 -0
  997. airflow/ui/src/pages/XCom/index.ts +20 -0
  998. airflow/ui/src/queries/useAddConnection.ts +79 -0
  999. airflow/ui/src/queries/useAddPool.ts +67 -0
  1000. airflow/ui/src/queries/useAddVariable.ts +67 -0
  1001. airflow/ui/src/queries/useBulkDeleteVariables.ts +70 -0
  1002. airflow/ui/src/queries/useClearDagRunDryRun.ts +51 -0
  1003. airflow/ui/src/queries/useClearRun.ts +71 -0
  1004. airflow/ui/src/queries/useClearTaskInstances.ts +97 -0
  1005. airflow/ui/src/queries/useClearTaskInstancesDryRun.ts +48 -0
  1006. airflow/ui/src/queries/useConfig.tsx +26 -0
  1007. airflow/ui/src/queries/useConnectionTypeMeta.ts +115 -0
  1008. airflow/ui/src/queries/useCreateBackfill.ts +90 -0
  1009. airflow/ui/src/queries/useCreateBackfillDryRun.ts +60 -0
  1010. airflow/ui/src/queries/useDagParams.ts +73 -0
  1011. airflow/ui/src/queries/useDagParsing.ts +64 -0
  1012. airflow/ui/src/queries/useDags.tsx +87 -0
  1013. airflow/ui/src/queries/useDeleteConnection.ts +53 -0
  1014. airflow/ui/src/queries/useDeletePool.ts +53 -0
  1015. airflow/ui/src/queries/useDeleteVariable.ts +53 -0
  1016. airflow/ui/src/queries/useDependencyGraph.ts +52 -0
  1017. airflow/ui/src/queries/useEditConnection.tsx +101 -0
  1018. airflow/ui/src/queries/useEditPool.ts +89 -0
  1019. airflow/ui/src/queries/useEditVariable.ts +85 -0
  1020. airflow/ui/src/queries/useGrid.ts +72 -0
  1021. airflow/ui/src/queries/useImportVariables.ts +64 -0
  1022. airflow/ui/src/queries/useLogs.tsx +157 -0
  1023. airflow/ui/src/queries/useParamStore.ts +102 -0
  1024. airflow/ui/src/queries/usePatchDagRun.ts +71 -0
  1025. airflow/ui/src/queries/usePatchTaskInstance.ts +77 -0
  1026. airflow/ui/src/queries/usePatchTaskInstanceDryRun.ts +67 -0
  1027. airflow/ui/src/queries/useTogglePause.ts +50 -0
  1028. airflow/ui/src/queries/useTrigger.ts +88 -0
  1029. airflow/ui/src/queryClient.ts +44 -0
  1030. airflow/ui/src/router.tsx +212 -0
  1031. airflow/ui/src/theme.ts +176 -0
  1032. airflow/ui/src/utils/AppWrapper.tsx +39 -0
  1033. airflow/ui/src/utils/ChakraWrapper.test.tsx +40 -0
  1034. airflow/ui/src/utils/ChakraWrapper.tsx +24 -0
  1035. airflow/ui/src/utils/RouterWrapper.test.tsx +40 -0
  1036. airflow/ui/src/utils/RouterWrapper.tsx +22 -0
  1037. airflow/ui/src/utils/TrimText.tsx +118 -0
  1038. airflow/ui/src/utils/Wrapper.tsx +48 -0
  1039. airflow/ui/src/utils/advancedSelectStyles.ts +18 -0
  1040. airflow/ui/src/utils/capitalize.ts +22 -0
  1041. airflow/ui/src/utils/datetime_utils.ts +25 -0
  1042. airflow/ui/src/utils/downloadJson.ts +32 -0
  1043. airflow/ui/src/utils/getMetaKey.ts +20 -0
  1044. airflow/ui/src/utils/index.ts +25 -0
  1045. airflow/ui/src/utils/links.ts +34 -0
  1046. airflow/ui/src/utils/logs.ts +53 -0
  1047. airflow/ui/src/utils/option.ts +24 -0
  1048. airflow/ui/src/utils/pluralize.test.ts +77 -0
  1049. airflow/ui/src/utils/pluralize.ts +28 -0
  1050. airflow/ui/src/utils/query.ts +49 -0
  1051. airflow/ui/src/utils/tokenHandler.test.ts +54 -0
  1052. airflow/ui/src/utils/tokenHandler.ts +51 -0
  1053. airflow/ui/src/utils/trimTextFn.ts +24 -0
  1054. airflow/ui/src/utils/useContainerWidth.ts +43 -0
  1055. airflow/ui/src/vite-env.d.ts +25 -0
  1056. airflow/ui/testsSetup.ts +38 -0
  1057. airflow/ui/tsconfig.app.json +31 -0
  1058. airflow/ui/tsconfig.dev.json +12 -0
  1059. airflow/ui/tsconfig.json +8 -0
  1060. airflow/ui/tsconfig.node.json +28 -0
  1061. airflow/ui/vite.config.ts +52 -0
  1062. airflow/utils/__init__.py +17 -0
  1063. airflow/utils/cli.py +439 -0
  1064. airflow/utils/cli_action_loggers.py +166 -0
  1065. airflow/utils/code_utils.py +87 -0
  1066. airflow/utils/context.py +177 -0
  1067. airflow/utils/dag_cycle_tester.py +69 -0
  1068. airflow/utils/dag_edges.py +134 -0
  1069. airflow/utils/dag_parsing_context.py +34 -0
  1070. airflow/utils/dates.py +42 -0
  1071. airflow/utils/db.py +1625 -0
  1072. airflow/utils/db_cleanup.py +525 -0
  1073. airflow/utils/db_manager.py +227 -0
  1074. airflow/utils/decorators.py +88 -0
  1075. airflow/utils/deprecation_tools.py +97 -0
  1076. airflow/utils/docs.py +32 -0
  1077. airflow/utils/dot_renderer.py +227 -0
  1078. airflow/utils/edgemodifier.py +20 -0
  1079. airflow/utils/email.py +331 -0
  1080. airflow/utils/entry_points.py +61 -0
  1081. airflow/utils/event_scheduler.py +46 -0
  1082. airflow/utils/file.py +352 -0
  1083. airflow/utils/hashlib_wrapper.py +34 -0
  1084. airflow/utils/helpers.py +337 -0
  1085. airflow/utils/json.py +62 -0
  1086. airflow/utils/log/__init__.py +50 -0
  1087. airflow/utils/log/action_logger.py +26 -0
  1088. airflow/utils/log/colored_log.py +110 -0
  1089. airflow/utils/log/file_processor_handler.py +153 -0
  1090. airflow/utils/log/file_task_handler.py +643 -0
  1091. airflow/utils/log/json_formatter.py +58 -0
  1092. airflow/utils/log/log_reader.py +157 -0
  1093. airflow/utils/log/logging_mixin.py +309 -0
  1094. airflow/utils/log/non_caching_file_handler.py +72 -0
  1095. airflow/utils/log/task_handler_with_custom_formatter.py +67 -0
  1096. airflow/utils/log/timezone_aware.py +50 -0
  1097. airflow/utils/module_loading.py +67 -0
  1098. airflow/utils/net.py +56 -0
  1099. airflow/utils/operator_helpers.py +112 -0
  1100. airflow/utils/operator_resources.py +160 -0
  1101. airflow/utils/orm_event_handlers.py +94 -0
  1102. airflow/utils/platform.py +85 -0
  1103. airflow/utils/process_utils.py +367 -0
  1104. airflow/utils/providers_configuration_loader.py +57 -0
  1105. airflow/utils/retries.py +112 -0
  1106. airflow/utils/scheduler_health.py +68 -0
  1107. airflow/utils/serve_logs.py +196 -0
  1108. airflow/utils/session.py +110 -0
  1109. airflow/utils/setup_teardown.py +342 -0
  1110. airflow/utils/singleton.py +33 -0
  1111. airflow/utils/span_status.py +33 -0
  1112. airflow/utils/sqlalchemy.py +450 -0
  1113. airflow/utils/state.py +228 -0
  1114. airflow/utils/strings.py +39 -0
  1115. airflow/utils/task_group.py +84 -0
  1116. airflow/utils/task_instance_session.py +60 -0
  1117. airflow/utils/thread_safe_dict.py +49 -0
  1118. airflow/utils/timeout.py +88 -0
  1119. airflow/utils/timezone.py +318 -0
  1120. airflow/utils/trigger_rule.py +50 -0
  1121. airflow/utils/types.py +76 -0
  1122. airflow/utils/warnings.py +40 -0
  1123. airflow/utils/weight_rule.py +56 -0
  1124. airflow/utils/xcom.py +24 -0
  1125. airflow/utils/yaml.py +73 -0
  1126. airflow/version.py +23 -0
  1127. apache_airflow_core-3.0.0.dist-info/METADATA +195 -0
  1128. apache_airflow_core-3.0.0.dist-info/RECORD +1149 -0
  1129. apache_airflow_core-3.0.0.dist-info/WHEEL +4 -0
  1130. apache_airflow_core-3.0.0.dist-info/entry_points.txt +2 -0
  1131. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-bootstrap.txt +22 -0
  1132. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-bootstrap3-typeahead.txt +20 -0
  1133. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-d3-shape.txt +27 -0
  1134. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-d3-tip.txt +16 -0
  1135. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-d3js.txt +27 -0
  1136. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-dagre-d3.txt +19 -0
  1137. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-datatables.txt +16 -0
  1138. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-elasticmock.txt +21 -0
  1139. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-eonasdan-bootstrap-datetimepicker.txt +21 -0
  1140. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-flask-kerberos.txt +22 -0
  1141. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-hue.txt +202 -0
  1142. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-jqclock.txt +201 -0
  1143. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-jquery.txt +36 -0
  1144. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-moment.txt +22 -0
  1145. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-normalize.txt +21 -0
  1146. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-pytest-capture-warnings.txt +22 -0
  1147. apache_airflow_core-3.0.0.dist-info/licenses/3rd-party-licenses/LICENSE-reproducible.txt +8 -0
  1148. apache_airflow_core-3.0.0.dist-info/licenses/LICENSE +251 -0
  1149. 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
@@ -0,0 +1,2 @@
1
+ | Package | Version | File | SHA256 |
2
+ |-----------|---------|------------------------|------------------------------------------------------------------|
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
@@ -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