You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by ep...@apache.org on 2022/07/02 20:01:38 UTC
[airflow] branch v2-3-stable updated (0bf5f495d4 -> b5202fa4ef)
This is an automated email from the ASF dual-hosted git repository.
ephraimanierobi pushed a change to branch v2-3-stable
in repository https://gitbox.apache.org/repos/asf/airflow.git
from 0bf5f495d4 Update version to 2.3.2 and add release notes
add 641ce14261 fix 2.3.2 release date. (#24370)
add 2a7c1f8424 Update flask-appbuilder authlib/oauth dependency (#24516)
add 50657119da Get rid of TimedJSONWebSignatureSerializer (#24519)
add df49aa06a6 Update 'rich' to latest version across the board. (#24186)
add 1641b49614 Refresh list of committers (#24398)
add 0c8cda1dd4 Switch Markdown engine to markdown-it-py (#19702)
add 86c4540ded Remove warnings when starting breeze (#24183)
add d7989b60f6 Fix choosing backend versions in breeze's command line (#24228)
add 797fce76e3 Add command to regenerate breeze command output images (#24216)
add b5cbad4d3c Better diagnostics for ARM for MySQL and MSSQL (#24185)
add 0d0f57f3bd Fix links to sources for examples (#24386)
add a66af3b17d Add CI-friendly progress output for tests (#24236)
add 6a05f04300 First attempt to have CI-controlled process of releasing PROD image (#24433)
add 0c106a47d0 Improve production image release workflow (#24481)
add 799074d7f9 Restore capability of reproducing CI failures using new Breeze (#24402)
add e4c41ade22 Move LOAD_DEFAULT_CONNECTIONS env var to database config section in CI (#24536)
add c7fafc6516 Add verification steps when releasing the images. (#24520)
add 01eae0e0f0 Added instructions on what to do if your command images are regenerated (#24581)
add 9c57cf3baf Switch to building images in parallell (#24580)
add 7e08c3a3df Upgrade FAB to 4.1.1 (#24399)
add 839d67da27 Fix recording console for new rich-click 1.5 (#24611)
add 5c7b7993b8 Fix errors revealed on autoupgrade of breeze (#24612)
add 4e43f976a3 Fix usage of `click.get_terminal_size()` (#24616)
add d72b745712 Upgrade FAB to 4.1.2 (#24619)
add 4e29345bf2 We now need at least Flask-WTF 0.15 (#24621)
add 761b2d0f7f Limit azure-servicebus to not be used on ARM (#24635)
add de17f27d30 Allows to specify different Python base image when building images (#24634)
add d52eeaf022 Convert selective checks to Breeze Python (#24610)
add 4fbea89f0d Switch to new selective-checks in label-when-reviewed workflow (#24651)
add 44e181796c Cleanup references to selective checks (#24649)
add fbca47eba4 Remove misleading message from CI (#24650)
add 1bea5b0d14 Remove selective checks from the "release workflow" (#24655)
add 0c55c721f2 Use target commit SHA for build image workflow (#24659)
add 4baf1d569a Handle "workflow_run" event properly in selective-check (#24656)
add 174ee470d5 Fix behaviour of build/pull after recent Breeze changes (#24657)
add 0d659c96a9 Remove "Label when approved" workflow (#24704)
add 8913c99fce Add ARM image building for regular PRs (#24664)
add 44994a79b7 Fix unnecessary check for ARM images (#24718)
add 2905ede084 Script to filter candidates for PR of the month based on heuristics (#24654)
add 8e4bb85098 Merge-friendly output of command hashes for breeze (#24711)
add 6ceb7e245e Fix selective checks to work for non-main-branch
add b8b6f31676 Parse error for task added to multiple groups (#23071)
add 90d338fb18 Check bag DAG schedule_interval match tiemtable (#23113)
add bab5e1cc6f Fix closing connection dbapi.get_pandas_df (#23452)
add d7b58db158 Fix permission issue for dag that has dot in name (#23510)
add 5e174a12b7 Refactor `DagRun.verify_integrity` (#24114)
add 8892587cce Fix mapped task immutability after clear (#23667)
add e74803d406 Fix xfail test in test_scheduler.py (#23731)
add 5b7dbaa805 Add TaskInstance State 'REMOVED' to finished states and success states (#23797)
add 5a125b6f16 Grid fix details button truncated and small UI tweaks (#23934)
add aa34428246 Replace `use_task_execution_date` with `use_task_logical_date` (#23983)
add 412c1524ad Removing magic numbers from exceptions (#23997)
add 324be5081c Cleanup `BranchDayOfWeekOperator` example dag (#24007)
add 93d929daad Removing magic status code numbers from api_connecxion (#24050)
add 8e73a77f39 Rename Permissions to Permission Pairs. (#24065)
add 0aae6bbb29 Reduce grid view API calls (#24083)
add 96a2e79a3d Do not fail requeued TIs (#23846)
add 1c71aa94d4 Fix useTasks crash on error (#24152)
add 595063cb80 Check that edge nodes actually exist (#24166)
add 72a36efdc8 Use `get_hostname` instead of `socket.getfqdn` (#24260)
add 24da78500a Optimize calendar view for cron scheduled DAGs (#24262)
add 85143b80b6 Mention context variables and logging (#24304)
add 45e8d916f8 Check for run_id for grid group summaries (#24327)
add 328b81aae8 Add typescript (#24337)
add 86f891ab69 Revert "Remove custom signal handling in Triggerer (#23274)" (#24390)
add fa50004b7d Fix flaky order of returned dag runs (#24405)
add 717ccb2640 Update errors.rst (#24412)
add 48a156e260 Improve grid rendering performance with a custom tooltip (#24417)
add b7026e5527 Upgrade to react 18 and chakra 2 (#24430)
add baebdcc2f9 Remove framer-motion from custom tooltip (#24449)
add 45216e51f2 Update description of installing providers separately from core (#24454)
add 45b308750f Docs: Fix default 2.2.5 log_id_template (#24455)
add 4ab96bac19 Return empty dict if Pod JSON encoding fails (#24478)
add 8b39de73f0 Small cleanup of ``get_current_context()`` chapter (#24482)
add 64baa0d94a Add indexes for CASCADE deletes for task_instance (#24488)
add c4358cfca9 Remove internet explorer support (#24495)
add 894f15c26f Fix toast messages (#24505)
add 540f48cd4a Fix deprecated log_id_template value (#24506)
add 023270c4ec Seed log_template table (#24511)
add 63ca887021 Add note about image regeneration in June 2022 (#24524)
add 2320145803 Add imports to deferring code samples (#24544)
add bada25d2c3 Clarify that users should not use Maria DB (#24556)
add 628815e54c Patch sql_alchemy_conn if old Postgres schemes used (#24569)
add 79fe04558e Fix migration 0080_2_0_2 - Replace null values before setting column not null (#24585)
add 19a3931035 `TI.log_url` fix for `map_index` (#24335)
add b1be02473b Don't crash scheduler if exec config has old k8s objects (#24117)
add bea9e656bb Apply per-run log templates to log handlers (#24153)
add d54af711c4 Add tests for the grid_data endpoint (#24375)
add 627488f67f Speed up grid_data endpoint by 10x (#24284)
add 4e65403776 Maintain grid view selection on filtering upstream (#23779)
add c5774e65e3 Do not calculate grid root instances (#24528)
add 0cc91d618e Upgrade to webpack 5 (#24485)
add ca8c8cb64b Restore tooltip animation (#24503)
add 05737bccda Migrate jsx files that affect run/task selection to tsx (#24509)
add 06c4e8426b don't try to render child rows for closed groups (#24637)
add 1306f9950e Fix Grid vertical scrolling (#24684)
add b73c38cc35 Debounce status highlighting in Grid view (#24710)
add 5e4d93df6a Address all yarn test warnings (#24722)
add b6aa6806e4 Fix grid date ticks (#24738)
add 4a11f46ca2 Add verification step to image release process (#24177)
add f5dd1f3f6b Add scripts that provide good links to example dags (#24348)
add bdb1945c8f Update Dockerfile (#24397)
add f032ffe89c The timeouts for Helm tests are far too small for "full tests" (#24408)
add bdddfb2e98 Allow for LOGGING_LEVEL=DEBUG (#23360)
add dcbc1433cb Alphabetizes two tables (#23923)
add 96a2bcacd8 Fix inverted section levels in best-practices.rst (#23968)
add 7b74793272 Update production-deployment.rst (#24121)
add ba19e032dd Update ui.rst (#24514)
add c711b76fe9 docs: sqlalchemy link update (#24627)
add 53dcf8faf4 Fix selective checks to work for non-main-branch (#24769)
add 50b9d7a3fa Choose the right builder when pushing to ghcr.io registry for cache (#24780)
add de235fde88 Update version to 2.3.3
add 6ec47b9ad7 Document built in Timetables (#23099)
add 3fa6d25362 Update templates doc to mention `extras` and format Airflow Vars / Conns (#24735)
add 668e0e35c9 docs: sqlalchemy link update (#24756)
add cecfa51b42 Align Black and blacken-docs configs (#24785)
add ad78c85af7 Add release note for 2.3.3
add b5202fa4ef Unified "dash-name" convention for outputs in ci workflows.
No new revisions were added by this update.
Summary of changes:
.gitattributes | 2 -
.github/actions/checks-action | 1 -
.github/actions/label-when-approved-action | 1 -
.github/workflows/build-images.yml | 354 +-
.github/workflows/ci.yml | 882 +--
.github/workflows/codeql-analysis.yml | 20 +-
.../workflows/label_when_reviewed_workflow_run.yml | 177 -
.github/workflows/release_dockerhub_image.yml | 153 +
.gitignore | 4 +
.gitmodules | 6 -
.pre-commit-config.yaml | 66 +-
BREEZE.rst | 47 +-
CI.rst | 15 +-
CONTRIBUTING.rst | 27 -
Dockerfile | 4 +-
Dockerfile.ci | 38 +-
IMAGES.rst | 5 +-
NOTICE | 7 +
PULL_REQUEST_WORKFLOW.rst | 158 -
README.md | 14 +-
RELEASE_NOTES.rst | 128 +-
SELECTIVE_CHECKS.md | 144 -
STATIC_CODE_CHECKS.rst | 4 +-
TESTING.rst | 17 +-
airflow/api/auth/backend/basic_auth.py | 5 +-
airflow/api_connexion/endpoints/config_endpoint.py | 4 +-
.../api_connexion/endpoints/connection_endpoint.py | 3 +-
airflow/api_connexion/endpoints/dag_endpoint.py | 12 +-
.../api_connexion/endpoints/dag_run_endpoint.py | 23 +-
.../api_connexion/endpoints/dag_source_endpoint.py | 4 +-
.../api_connexion/endpoints/extra_link_endpoint.py | 4 +-
airflow/api_connexion/endpoints/log_endpoint.py | 11 +-
airflow/api_connexion/endpoints/pool_endpoint.py | 18 +-
.../endpoints/request_dict.py} | 8 +
.../endpoints/role_and_permission_endpoint.py | 18 +-
airflow/api_connexion/endpoints/task_endpoint.py | 7 +-
.../endpoints/task_instance_endpoint.py | 17 +-
airflow/api_connexion/endpoints/user_endpoint.py | 16 +-
.../api_connexion/endpoints/variable_endpoint.py | 10 +-
airflow/api_connexion/endpoints/xcom_endpoint.py | 5 +-
airflow/api_connexion/exceptions.py | 13 +-
airflow/api_connexion/schemas/dag_schema.py | 2 +-
.../api_connexion/schemas/task_instance_schema.py | 2 +-
airflow/api_connexion/security.py | 7 +-
airflow/cli/commands/triggerer_command.py | 18 +-
airflow/config_templates/airflow_local_settings.py | 1 -
airflow/config_templates/config.yml | 4 +-
airflow/config_templates/default_airflow.cfg | 4 +-
airflow/config_templates/default_test.cfg | 1 -
airflow/configuration.py | 17 +-
.../example_branch_datetime_operator.py | 20 +-
.../example_branch_day_of_week_operator.py | 4 +-
.../example_external_task_marker_dag.py | 26 +-
airflow/exceptions.py | 32 +-
airflow/executors/kubernetes_executor.py | 12 +-
airflow/hooks/dbapi.py | 18 +
airflow/jobs/scheduler_job.py | 16 +-
airflow/kubernetes/pod_generator.py | 7 +-
.../0080_2_0_2_change_default_pool_slots_to_1.py | 1 +
.../0111_2_3_3_add_indexes_for_cascade_deletes.py | 94 +
airflow/models/abstractoperator.py | 1 -
airflow/models/dag.py | 43 +-
airflow/models/dagbag.py | 21 +-
airflow/models/dagrun.py | 217 +-
airflow/models/taskfail.py | 3 +-
airflow/models/taskinstance.py | 24 +-
airflow/models/taskreschedule.py | 1 +
airflow/models/xcom.py | 1 +
airflow/operators/datetime.py | 15 +-
airflow/operators/trigger_dagrun.py | 5 +-
airflow/operators/weekday.py | 16 +-
.../alibaba/cloud/log/oss_task_handler.py | 2 +-
.../example_google_api_youtube_to_s3.py | 3 +-
.../amazon/aws/example_dags/example_s3.py | 5 +-
.../providers/amazon/aws/hooks/batch_waiters.py | 8 +-
.../amazon/aws/log/cloudwatch_task_handler.py | 3 +-
.../providers/amazon/aws/log/s3_task_handler.py | 3 +-
.../arangodb/example_dags/example_arangodb.py | 4 +-
.../example_dags/example_elasticsearch_query.py | 50 -
.../providers/elasticsearch/log/es_task_handler.py | 33 +-
airflow/providers/google/CHANGELOG.rst | 3 +-
.../cloud/example_dags/example_automl_tables.py | 4 +-
.../example_cloud_storage_transfer_service_aws.py | 10 +-
.../google/cloud/example_dags/example_pubsub.py | 8 +-
.../google/cloud/example_dags/example_vertex_ai.py | 5 +-
.../providers/google/cloud/log/gcs_task_handler.py | 2 +-
.../google/common/auth_backend/google_openid.py | 2 +-
.../microsoft/azure/log/wasb_task_handler.py | 3 +-
airflow/providers/mongo/hooks/mongo.py | 2 +-
airflow/providers/oracle/hooks/oracle.py | 7 +-
airflow/security/kerberos.py | 6 +-
airflow/security/permissions.py | 19 +-
airflow/sensors/external_task.py | 6 +-
airflow/sensors/weekday.py | 22 +-
.../utils/airflow_flask_app.py | 26 +-
airflow/utils/db.py | 18 +-
airflow/utils/json.py | 26 +-
airflow/utils/jwt_signer.py | 80 +
airflow/utils/log/file_task_handler.py | 44 +-
airflow/utils/log/log_reader.py | 2 +-
airflow/utils/serve_logs.py | 84 +-
airflow/utils/state.py | 1 +
airflow/utils/task_group.py | 18 +-
airflow/www/.babelrc | 2 +-
airflow/www/.eslintrc | 61 +-
airflow/www/api/experimental/endpoints.py | 3 +-
airflow/www/auth.py | 9 +-
airflow/www/extensions/init_jinja_globals.py | 4 +-
airflow/www/extensions/init_wsgi_middlewares.py | 2 +-
airflow/www/fab_security/manager.py | 39 +-
airflow/www/jest-setup.js | 15 +
airflow/www/jest.config.js | 2 +-
airflow/www/package.json | 89 +-
airflow/www/security.py | 29 +-
airflow/www/static/css/main.css | 4 +
airflow/www/static/js/dag.js | 6 +-
airflow/www/static/js/dag_dependencies.js | 8 +-
airflow/www/static/js/dags.js | 6 +-
airflow/www/static/js/grid/AutoRefresh.jsx | 8 +-
airflow/www/static/js/grid/{Grid.jsx => Grid.tsx} | 113 +-
.../{LegendRow.test.jsx => LegendRow.test.tsx} | 21 +-
.../js/grid/{LegendRow.jsx => LegendRow.tsx} | 29 +-
airflow/www/static/js/grid/{Main.jsx => Main.tsx} | 55 +-
airflow/www/static/js/grid/ResetRoot.jsx | 2 +-
airflow/www/static/js/grid/ToggleGroups.jsx | 8 +-
.../www/static/js/grid/api/{index.js => index.ts} | 4 +-
.../gridData.test.js => api/useGridData.test.js} | 2 +-
.../www/static/js/grid/api/useGridData.test.jsx | 78 -
.../js/grid/api/{useGridData.js => useGridData.ts} | 67 +-
.../www/static/js/grid/api/useMappedInstances.js | 3 +
airflow/www/static/js/grid/api/useTasks.test.jsx | 86 +
.../js/grid/api/{useTasks.js => useTasks.ts} | 23 +-
.../www/static/js/grid/components/Clipboard.jsx | 1 -
...ceTooltip.test.jsx => InstanceTooltip.test.tsx} | 24 +-
.../{InstanceTooltip.jsx => InstanceTooltip.tsx} | 34 +-
.../components/{StatusBox.jsx => StatusBox.tsx} | 49 +-
airflow/www/static/js/grid/components/Table.jsx | 1 +
airflow/www/static/js/grid/components/TaskName.jsx | 2 +-
.../static/js/grid/components/TaskName.test.jsx | 12 +-
.../components/{Time.test.jsx => Time.test.tsx} | 14 +-
.../js/grid/components/{Time.jsx => Time.tsx} | 13 +-
airflow/www/static/js/grid/components/Tooltip.tsx | 199 +
airflow/www/static/js/grid/context/autorefresh.jsx | 77 +-
.../context/{containerRef.jsx => containerRef.tsx} | 16 +-
airflow/www/static/js/grid/context/selection.jsx | 56 -
airflow/www/static/js/grid/context/timezone.jsx | 12 +-
.../static/js/grid/dagRuns/{Bar.jsx => Bar.tsx} | 36 +-
airflow/www/static/js/grid/dagRuns/index.test.jsx | 129 -
airflow/www/static/js/grid/dagRuns/index.test.tsx | 142 +
.../js/grid/dagRuns/{index.jsx => index.tsx} | 92 +-
.../useTasks.js => details/BreadcrumbText.tsx} | 30 +-
.../js/grid/details/{Header.jsx => Header.tsx} | 25 +-
airflow/www/static/js/grid/details/content/Dag.jsx | 9 +-
.../grid/details/content/taskInstance/Details.jsx | 14 +-
.../js/grid/details/content/taskInstance/Nav.jsx | 4 +-
.../content/taskInstance/{index.jsx => index.tsx} | 31 +-
.../js/grid/details/{index.jsx => index.tsx} | 14 +-
airflow/www/static/js/{ie.js => grid/index.d.ts} | 14 +-
airflow/www/static/js/grid/index.jsx | 55 +-
...erTaskRows.test.jsx => renderTaskRows.test.tsx} | 21 +-
.../{renderTaskRows.jsx => renderTaskRows.tsx} | 111 +-
.../static/js/grid/{api/useTasks.js => theme.ts} | 31 +-
airflow/www/static/js/grid/types/index.ts | 75 +
airflow/www/static/js/grid/utils/gridData.js | 34 -
.../www/static/js/{ie.js => grid/utils/index.ts} | 12 +-
airflow/www/static/js/grid/utils/useErrorToast.js | 2 +-
airflow/www/static/js/grid/utils/useFilters.js | 6 +-
.../www/static/js/grid/utils/useFilters.test.jsx | 2 +-
...useSelection.test.jsx => useSelection.test.tsx} | 10 +-
.../utils/{useSelection.js => useSelection.ts} | 7 +-
airflow/www/static/js/main.js | 8 +-
airflow/www/static/js/ti_log.js | 6 +-
airflow/www/templates/airflow/grid.html | 1 -
airflow/www/templates/airflow/main.html | 3 -
airflow/www/{jest.config.js => tsconfig.json} | 31 +-
airflow/www/utils.py | 50 +-
airflow/www/views.py | 371 +-
airflow/www/webpack.config.js | 41 +-
airflow/www/yarn.lock | 6554 +++++++-------------
breeze-complete | 3 -
breeze-legacy | 24 -
dev/MANUALLY_BUILDING_IMAGES.md | 96 +
dev/README_RELEASE_AIRFLOW.md | 118 +-
dev/REFRESHING_CI_CACHE.md | 2 +-
dev/airflow-github | 2 -
dev/breeze/README.md | 2 +-
dev/breeze/SELECTIVE_CHECKS.md | 98 +
dev/breeze/setup.cfg | 5 +-
dev/breeze/src/airflow_breeze/branch_defaults.py | 1 +
dev/breeze/src/airflow_breeze/breeze.py | 6 +-
.../src/airflow_breeze/commands/ci_commands.py | 250 +
.../airflow_breeze/commands/ci_image_commands.py | 169 +-
.../configuration_and_maintenance_commands.py | 110 +-
.../airflow_breeze/commands/developer_commands.py | 35 +-
.../src/airflow_breeze/commands/main_command.py | 2 -
.../commands/production_image_commands.py | 134 +-
.../commands/release_management_commands.py | 71 +-
.../airflow_breeze/commands/testing_commands.py | 191 +-
.../src/airflow_breeze/configure_rich_click.py | 5 +-
dev/breeze/src/airflow_breeze/global_constants.py | 111 +-
.../src/airflow_breeze/params/build_ci_params.py | 1 +
.../src/airflow_breeze/params/build_prod_params.py | 3 +-
.../airflow_breeze/params/common_build_params.py | 8 +-
.../src/airflow_breeze/params/doc_build_params.py | 4 +
.../src/airflow_breeze/params/shell_params.py | 39 +-
dev/breeze/src/airflow_breeze/pre_commit_ids.py | 4 +-
dev/breeze/src/airflow_breeze/utils/ci_group.py | 8 +-
.../src/airflow_breeze/utils/common_options.py | 64 +-
dev/breeze/src/airflow_breeze/utils/console.py | 14 +
.../airflow_breeze/utils/docker_command_utils.py | 36 +-
dev/breeze/src/airflow_breeze/utils/image.py | 5 +-
.../src/airflow_breeze/utils/md5_build_check.py | 2 +-
dev/breeze/src/airflow_breeze/utils/path_utils.py | 33 +
dev/breeze/src/airflow_breeze/utils/recording.py | 8 +-
dev/breeze/src/airflow_breeze/utils/run_tests.py | 4 +-
dev/breeze/src/airflow_breeze/utils/run_utils.py | 1 +
.../src/airflow_breeze/utils/selective_checks.py | 519 ++
dev/breeze/tests/test_commands.py | 12 +-
dev/breeze/tests/test_selective_checks.py | 569 ++
.../example_dags/README.md | 7 +-
dev/example_dags/update_example_dags_paths.py | 119 +
dev/images/release_prod_image.png | Bin 0 -> 76309 bytes
dev/images/release_prod_image_rc.png | Bin 0 -> 65816 bytes
dev/refresh_images.sh | 8 +-
dev/requirements.txt | 2 +
dev/send_email.py | 4 +-
dev/stats/get_important_pr_candidates.py | 180 +
docker_tests/test_prod_image.py | 10 +-
.../example_dags => docs}/__init__.py | 0
docs/apache-airflow-providers-alibaba/index.rst | 6 +
.../connections/aws.rst | 8 +-
docs/apache-airflow-providers-amazon/index.rst | 6 +
.../apache-airflow-providers-apache-beam/index.rst | 11 +
.../index.rst | 6 +
.../index.rst | 6 +
.../index.rst | 12 +
.../apache-airflow-providers-apache-hive/index.rst | 6 +
.../index.rst | 6 +
.../apache-airflow-providers-apache-livy/index.rst | 6 +
docs/apache-airflow-providers-apache-pig/index.rst | 6 +
.../index.rst | 6 +
.../index.rst | 6 +
docs/apache-airflow-providers-databricks/index.rst | 6 +
docs/apache-airflow-providers-dbt-cloud/index.rst | 6 +
docs/apache-airflow-providers-dingding/index.rst | 6 +
docs/apache-airflow-providers-docker/index.rst | 6 +
.../logging/index.rst | 2 +-
docs/apache-airflow-providers-google/index.rst | 6 +
.../operators/cloud/bigquery.rst | 50 +-
.../operators/cloud/datastore.rst | 26 +-
.../operators/cloud/kubernetes_engine.rst | 10 +-
docs/apache-airflow-providers-http/index.rst | 6 +
docs/apache-airflow-providers-jdbc/index.rst | 6 +
docs/apache-airflow-providers-jenkins/index.rst | 6 +
.../index.rst | 6 +
.../index.rst | 6 +
.../index.rst | 6 +
docs/apache-airflow-providers-mysql/index.rst | 6 +
docs/apache-airflow-providers-opsgenie/index.rst | 6 +
docs/apache-airflow-providers-papermill/index.rst | 6 +
docs/apache-airflow-providers-presto/index.rst | 6 +
docs/apache-airflow-providers-qubole/index.rst | 6 +
docs/apache-airflow-providers-salesforce/index.rst | 6 +
.../apache-airflow-providers-singularity/index.rst | 6 +
docs/apache-airflow-providers-snowflake/index.rst | 6 +
docs/apache-airflow-providers-tableau/index.rst | 6 +
docs/apache-airflow-providers-telegram/index.rst | 6 +
docs/apache-airflow-providers-trino/index.rst | 6 +
docs/apache-airflow-providers-yandex/index.rst | 6 +
docs/apache-airflow/best-practices.rst | 20 +-
docs/apache-airflow/concepts/dags.rst | 4 +-
docs/apache-airflow/concepts/deferring.rst | 12 +
.../concepts/dynamic-task-mapping.rst | 12 +-
docs/apache-airflow/concepts/taskflow.rst | 17 +
docs/apache-airflow/concepts/timetable.rst | 61 +
docs/apache-airflow/executor/kubernetes.rst | 8 +-
docs/apache-airflow/extra-packages-ref.rst | 12 +-
docs/apache-airflow/howto/connection.rst | 16 +-
docs/apache-airflow/howto/custom-operator.rst | 4 +-
docs/apache-airflow/howto/customize-ui.rst | 4 +-
docs/apache-airflow/howto/define_extra_link.rst | 10 +-
docs/apache-airflow/howto/set-up-database.rst | 11 +-
.../installation/installing-from-pypi.rst | 36 +-
docs/apache-airflow/installation/prerequisites.rst | 45 +-
.../installation/supported-versions.rst | 2 +-
docs/apache-airflow/lineage.rst | 8 +-
docs/apache-airflow/logging-monitoring/errors.rst | 4 +-
docs/apache-airflow/migrations-ref.rst | 4 +-
docs/apache-airflow/plugins.rst | 4 +-
docs/apache-airflow/production-deployment.rst | 2 +-
docs/apache-airflow/python-api-ref.rst | 9 +
docs/apache-airflow/security/webserver.rst | 8 +-
docs/apache-airflow/start/docker-compose.yaml | 2 +-
docs/apache-airflow/templates-ref.rst | 18 +-
docs/apache-airflow/tutorial_taskflow_api.rst | 6 +-
docs/apache-airflow/ui.rst | 4 +-
docs/apache-airflow/upgrading-from-1-10/index.rst | 28 +-
docs/build_docs.py | 23 +-
docs/conf.py | 39 +-
docs/docker-stack/README.md | 10 +-
docs/docker-stack/changelog.rst | 35 +-
.../customizing/pypi-extras-and-deps.sh | 2 +-
.../customizing/pypi-selected-version.sh | 2 +-
.../extending/add-apt-packages/Dockerfile | 2 +-
.../add-build-essential-extend/Dockerfile | 2 +-
.../extending/add-providers/Dockerfile | 2 +-
.../extending/add-pypi-packages/Dockerfile | 2 +-
.../extending/custom-providers/Dockerfile | 2 +-
.../extending/embedding-dags/Dockerfile | 2 +-
.../extending/writable-directory/Dockerfile | 2 +-
docs/docker-stack/entrypoint.rst | 18 +-
docs/exts/docs_build/docs_builder.py | 8 +-
docs/exts/docs_build/lint_checks.py | 8 +-
docs/exts/provider_yaml_utils.py | 32 +-
docs/publish_docs.py | 2 +
docs/spelling_wordlist.txt | 12 +
images/breeze/output-build-docs.svg | 318 +-
images/breeze/output-build-image.svg | 357 +-
images/breeze/output-build-prod-image.svg | 442 +-
images/breeze/output-cleanup.svg | 118 +-
images/breeze/output-command-hash-export.svg | 86 +-
images/breeze/output-commands-hash.txt | 37 +
images/breeze/output-commands.svg | 478 +-
images/breeze/output-config.svg | 148 +-
images/breeze/output-docker-compose-tests.svg | 128 +-
images/breeze/output-exec.svg | 91 +-
images/breeze/output-find-newer-dependencies.svg | 133 +-
images/breeze/output-fix-ownership.svg | 98 +-
images/breeze/output-free-space.svg | 98 +-
images/breeze/output-generate-constraints.svg | 192 +-
images/breeze/output-prepare-airflow-package.svg | 123 +-
.../output-prepare-provider-documentation.svg | 173 +-
images/breeze/output-prepare-provider-packages.svg | 183 +-
images/breeze/output-pull-image.svg | 185 +-
images/breeze/output-pull-prod-image.svg | 185 +-
images/breeze/output-regenerate-command-images.svg | 99 +
images/breeze/output-release-prod-images.svg | 168 +-
images/breeze/output-resource-check.svg | 91 +-
images/breeze/output-selective-check.svg | 148 +
images/breeze/output-self-upgrade.svg | 101 +-
images/breeze/output-setup-autocomplete.svg | 113 +-
images/breeze/output-shell.svg | 280 +-
images/breeze/output-start-airflow.svg | 290 +-
images/breeze/output-static-checks.svg | 285 +-
images/breeze/output-stop.svg | 106 +-
images/breeze/output-tests.svg | 189 +-
images/breeze/output-verify-image.svg | 132 +-
images/breeze/output-verify-prod-image.svg | 136 +-
images/breeze/output-verify-provider-packages.svg | 182 +-
images/breeze/output-version.svg | 86 +-
images/pr/pr-full-tests-needed.png | Bin 88512 -> 0 bytes
images/pr/pr-likely-ok-to-merge.png | Bin 98362 -> 0 bytes
images/pr/pr-no-tests-needed-comment.png | Bin 80852 -> 0 bytes
scripts/ci/docker-compose/_docker.env | 1 +
scripts/ci/docker-compose/base.yml | 1 +
scripts/ci/docker-compose/devcontainer.env | 1 +
scripts/ci/docker-compose/local.yml | 7 +-
.../ci/docker-compose/mypy.yml | 21 +-
.../ci/pre_commit/pre_commit_breeze_cmd_line.py | 29 +-
.../pre_commit_check_2_1_compatibility.py | 44 +-
.../pre_commit/pre_commit_check_init_in_tests.py | 50 +
.../pre_commit_check_setup_extra_packages_ref.py | 4 +-
...re_commit_check_system_tests_hidden_in_index.py | 72 +
scripts/ci/pre_commit/pre_commit_flake8.py | 3 +-
.../pre_commit/pre_commit_migration_reference.py | 3 +-
scripts/ci/pre_commit/pre_commit_mypy.py | 3 +-
.../ci/pre_commit/pre_commit_supported_versions.py | 2 +-
scripts/ci/pre_commit/pre_commit_ui_lint.py | 3 +-
scripts/ci/pre_commit/pre_commit_www_lint.py | 3 +-
scripts/ci/selective_ci_checks.sh | 766 ---
.../ci_run_single_airflow_test_in_docker.sh | 12 +-
scripts/docker/entrypoint_ci.sh | 38 +-
scripts/in_container/_in_container_utils.sh | 29 +-
scripts/in_container/airflow_ci.cfg | 4 +-
scripts/in_container/check_environment.sh | 2 +-
scripts/in_container/run_docs_build.sh | 3 +-
setup.cfg | 54 +-
setup.py | 34 +-
tests/always/test_project_structure.py | 138 -
tests/api_connexion/endpoints/test_dag_endpoint.py | 97 +-
.../endpoints/test_dag_source_endpoint.py | 27 +-
tests/api_connexion/endpoints/test_log_endpoint.py | 8 +-
.../api_connexion/endpoints/test_xcom_endpoint.py | 6 +-
tests/api_connexion/schemas/test_dag_schema.py | 321 +-
.../config_templates}/__init__.py | 0
tests/conftest.py | 63 +
{airflow/api_connexion => tests/core}/__init__.py | 0
{airflow/api_connexion => tests/dags}/__init__.py | 0
.../dags/subdir1}/__init__.py | 0
.../dags/subdir2}/__init__.py | 0
.../dags/subdir2/subdir3}/__init__.py | 0
tests/dags_corrupted/README.md | 4 +-
.../dags_corrupted}/__init__.py | 0
.../dags_with_system_exit}/__init__.py | 0
.../__init__.py | 0
tests/executors/test_kubernetes_executor.py | 39 +
tests/jobs/test_scheduler_job.py | 109 +-
tests/kubernetes/test_pod_generator.py | 30 +-
tests/models/test_dag.py | 26 +
tests/models/test_dagrun.py | 184 +-
tests/models/test_taskinstance.py | 39 +-
tests/operators/test_datetime.py | 21 +-
tests/operators/test_weekday.py | 19 +-
.../alibaba/cloud/log/test_oss_task_handler.py | 5 +-
.../amazon/aws/log/test_cloudwatch_task_handler.py | 37 +-
.../amazon/aws/log/test_s3_task_handler.py | 43 +-
.../elasticsearch/log/test_es_task_handler.py | 68 +-
.../google/cloud/log/test_gcs_task_handler.py | 8 +-
.../google}/test_project_structure.py | 146 +-
.../microsoft/azure/log/test_wasb_task_handler.py | 41 +-
.../api_connexion => tests/secrets}/__init__.py | 0
tests/security/test_kerberos.py | 2 +-
tests/sensors/test_weekday_sensor.py | 25 +-
tests/system/README.md | 2 +-
.../system/providers/amazon}/__init__.py | 0
.../system/providers/amazon/aws}/__init__.py | 0
.../system/providers/apache/kylin}/__init__.py | 0
.../system/providers/cncf}/__init__.py | 0
.../elasticsearch/example_elasticsearch_query.py | 66 -
.../system/providers/github}/__init__.py | 0
tests/system/providers/google/README.md | 2 +-
.../system/providers/google/cloud}/__init__.py | 0
.../providers/google/cloud/azure}/__init__.py | 0
.../providers/google/cloud/bigquery}/__init__.py | 0
.../bigquery/example_bigquery_dataset.py | 0
.../bigquery/example_bigquery_operations.py | 0
.../example_bigquery_operations_location.py | 0
.../bigquery/example_bigquery_queries.py | 0
.../bigquery/example_bigquery_sensors.py | 0
.../bigquery/example_bigquery_tables.py | 0
.../bigquery/example_bigquery_to_bigquery.py | 0
.../bigquery/example_bigquery_to_gcs.py | 0
.../google/cloud/bigquery/resources}/__init__.py | 0
.../bigquery/resources/example_bigquery_query.sql | 0
.../bigquery/resources/update_table_schema.json | 0
.../{ => cloud}/bigquery/resources/us-states.csv | 0
.../providers/google/cloud/cloud_sql}/__init__.py | 0
.../providers/google/cloud/dataproc}/__init__.py | 0
.../{ => cloud}/dataproc/example_dataproc_gke.py | 0
.../google/cloud/dataproc/resources}/__init__.py | 0
.../providers/google/cloud/datastore}/__init__.py | 0
.../datastore/example_datastore_commit.py | 0
.../datastore/example_datastore_export_import.py | 0
.../datastore/example_datastore_query.py | 0
.../datastore/example_datastore_rollback.py | 0
.../system/providers/google/cloud/gcs}/__init__.py | 0
.../{ => cloud}/gcs/example_gcs_to_bigquery.py | 0
.../google/cloud/gcs/resources}/__init__.py | 0
.../google/cloud/kubernetes_engine}/__init__.py | 0
.../kubernetes_engine/example_kubernetes_engine.py | 0
.../providers/google/cloud/spanner}/__init__.py | 0
.../google/cloud/speech_to_text}/__init__.py | 0
.../google/cloud/stackdriver}/__init__.py | 0
.../providers/google/cloud/tasks}/__init__.py | 0
.../google/cloud/text_to_speech}/__init__.py | 0
.../providers/google/cloud/workflows}/__init__.py | 0
.../system/providers/google/workplace}/__init__.py | 0
.../system/providers/presto}/__init__.py | 0
tests/task/task_runner/test_task_runner.py | 1 +
.../test_utils/operators}/__init__.py | 0
.../test_utils/perf}/__init__.py | 0
.../test_utils/perf/dags}/__init__.py | 0
tests/test_utils/perf/perf_kit/__init__.py | 10 +-
tests/test_utils/remote_user_api_auth_backend.py | 6 +-
.../api_connexion => tests/testconfig}/__init__.py | 0
.../testconfig/conf}/__init__.py | 0
.../api_connexion => tests/triggers}/__init__.py | 0
tests/utils/log/test_log_reader.py | 12 +-
tests/utils/test_json.py | 7 +-
tests/utils/test_log_handlers.py | 47 +-
tests/utils/test_serve_logs.py | 152 +-
tests/utils/test_task_group.py | 22 +
.../www/test_logs}/__init__.py | 0
.../task_for_testing_log_view}/1.log | 0
.../attempt=1.log} | 0
tests/www/test_security.py | 66 +-
tests/www/test_utils.py | 112 +-
.../api_connexion => tests/www/views}/__init__.py | 0
tests/www/views/test_views.py | 25 +-
tests/www/views/test_views_acl.py | 10 +-
tests/www/views/test_views_decorators.py | 6 +-
tests/www/views/test_views_grid.py | 260 +
tests/www/views/test_views_log.py | 5 +-
tests/www/views/test_views_mount.py | 4 +-
tests/www/views/test_views_tasks.py | 18 +-
485 files changed, 15746 insertions(+), 10606 deletions(-)
delete mode 160000 .github/actions/checks-action
delete mode 160000 .github/actions/label-when-approved-action
delete mode 100644 .github/workflows/label_when_reviewed_workflow_run.yml
create mode 100644 .github/workflows/release_dockerhub_image.yml
delete mode 100644 PULL_REQUEST_WORKFLOW.rst
delete mode 100644 SELECTIVE_CHECKS.md
copy airflow/{providers/elasticsearch/example_dags/__init__.py => api_connexion/endpoints/request_dict.py} (81%)
create mode 100644 airflow/migrations/versions/0111_2_3_3_add_indexes_for_cascade_deletes.py
delete mode 100644 airflow/providers/elasticsearch/example_dags/example_elasticsearch_query.py
copy scripts/in_container/run_docs_build.sh => airflow/utils/airflow_flask_app.py (64%)
mode change 100755 => 100644
create mode 100644 airflow/utils/jwt_signer.py
rename airflow/www/static/js/grid/{Grid.jsx => Grid.tsx} (50%)
rename airflow/www/static/js/grid/{LegendRow.test.jsx => LegendRow.test.tsx} (71%)
rename airflow/www/static/js/grid/{LegendRow.jsx => LegendRow.tsx} (70%)
rename airflow/www/static/js/grid/{Main.jsx => Main.tsx} (56%)
rename airflow/www/static/js/grid/api/{index.js => index.ts} (93%)
rename airflow/www/static/js/grid/{utils/gridData.test.js => api/useGridData.test.js} (96%)
delete mode 100644 airflow/www/static/js/grid/api/useGridData.test.jsx
rename airflow/www/static/js/grid/api/{useGridData.js => useGridData.ts} (63%)
create mode 100644 airflow/www/static/js/grid/api/useTasks.test.jsx
copy airflow/www/static/js/grid/api/{useTasks.js => useTasks.ts} (69%)
rename airflow/www/static/js/grid/components/{InstanceTooltip.test.jsx => InstanceTooltip.test.tsx} (78%)
rename airflow/www/static/js/grid/components/{InstanceTooltip.jsx => InstanceTooltip.tsx} (77%)
rename airflow/www/static/js/grid/components/{StatusBox.jsx => StatusBox.tsx} (68%)
rename airflow/www/static/js/grid/components/{Time.test.jsx => Time.test.tsx} (90%)
rename airflow/www/static/js/grid/components/{Time.jsx => Time.tsx} (86%)
create mode 100644 airflow/www/static/js/grid/components/Tooltip.tsx
rename airflow/www/static/js/grid/context/{containerRef.jsx => containerRef.tsx} (77%)
delete mode 100644 airflow/www/static/js/grid/context/selection.jsx
rename airflow/www/static/js/grid/dagRuns/{Bar.jsx => Bar.tsx} (79%)
delete mode 100644 airflow/www/static/js/grid/dagRuns/index.test.jsx
create mode 100644 airflow/www/static/js/grid/dagRuns/index.test.tsx
rename airflow/www/static/js/grid/dagRuns/{index.jsx => index.tsx} (55%)
copy airflow/www/static/js/grid/{api/useTasks.js => details/BreadcrumbText.tsx} (66%)
rename airflow/www/static/js/grid/details/{Header.jsx => Header.tsx} (86%)
rename airflow/www/static/js/grid/details/content/taskInstance/{index.jsx => index.tsx} (84%)
rename airflow/www/static/js/grid/details/{index.jsx => index.tsx} (82%)
copy airflow/www/static/js/{ie.js => grid/index.d.ts} (81%)
rename airflow/www/static/js/grid/{renderTaskRows.test.jsx => renderTaskRows.test.tsx} (87%)
rename airflow/www/static/js/grid/{renderTaskRows.jsx => renderTaskRows.tsx} (64%)
rename airflow/www/static/js/grid/{api/useTasks.js => theme.ts} (71%)
create mode 100644 airflow/www/static/js/grid/types/index.ts
delete mode 100644 airflow/www/static/js/grid/utils/gridData.js
rename airflow/www/static/js/{ie.js => grid/utils/index.ts} (84%)
rename airflow/www/static/js/grid/utils/{useSelection.test.jsx => useSelection.test.tsx} (91%)
rename airflow/www/static/js/grid/utils/{useSelection.js => useSelection.ts} (91%)
copy airflow/www/{jest.config.js => tsconfig.json} (63%)
create mode 100644 dev/MANUALLY_BUILDING_IMAGES.md
create mode 100644 dev/breeze/SELECTIVE_CHECKS.md
create mode 100644 dev/breeze/src/airflow_breeze/commands/ci_commands.py
create mode 100644 dev/breeze/src/airflow_breeze/utils/selective_checks.py
create mode 100644 dev/breeze/tests/test_selective_checks.py
copy tests/system/providers/google/bigquery/resources/example_bigquery_query.sql => dev/example_dags/README.md (82%)
create mode 100755 dev/example_dags/update_example_dags_paths.py
create mode 100644 dev/images/release_prod_image.png
create mode 100644 dev/images/release_prod_image_rc.png
create mode 100755 dev/stats/get_important_pr_candidates.py
rename {airflow/providers/elasticsearch/example_dags => docs}/__init__.py (100%)
create mode 100644 images/breeze/output-commands-hash.txt
create mode 100644 images/breeze/output-regenerate-command-images.svg
create mode 100644 images/breeze/output-selective-check.svg
delete mode 100644 images/pr/pr-full-tests-needed.png
delete mode 100644 images/pr/pr-likely-ok-to-merge.png
delete mode 100644 images/pr/pr-no-tests-needed-comment.png
rename .github/workflows/label_when_reviewed.yml => scripts/ci/docker-compose/mypy.yml (73%)
create mode 100755 scripts/ci/pre_commit/pre_commit_check_init_in_tests.py
create mode 100755 scripts/ci/pre_commit/pre_commit_check_system_tests_hidden_in_index.py
delete mode 100755 scripts/ci/selective_ci_checks.sh
copy {airflow/api_connexion => tests/config_templates}/__init__.py (100%)
copy {airflow/api_connexion => tests/core}/__init__.py (100%)
copy {airflow/api_connexion => tests/dags}/__init__.py (100%)
copy {airflow/api_connexion => tests/dags/subdir1}/__init__.py (100%)
copy {airflow/api_connexion => tests/dags/subdir2}/__init__.py (100%)
copy {airflow/api_connexion => tests/dags/subdir2/subdir3}/__init__.py (100%)
copy {airflow/api_connexion => tests/dags_corrupted}/__init__.py (100%)
copy {airflow/api_connexion => tests/dags_with_system_exit}/__init__.py (100%)
copy {airflow/api_connexion => tests/executors/kubernetes_executor_template_files}/__init__.py (100%)
copy tests/{always => providers/google}/test_project_structure.py (57%)
copy {airflow/api_connexion => tests/secrets}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/amazon}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/amazon/aws}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/apache/kylin}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/cncf}/__init__.py (100%)
delete mode 100644 tests/system/providers/elasticsearch/example_elasticsearch_query.py
copy {airflow/api_connexion => tests/system/providers/github}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/azure}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/bigquery}/__init__.py (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/example_bigquery_dataset.py (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/example_bigquery_operations.py (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/example_bigquery_operations_location.py (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/example_bigquery_queries.py (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/example_bigquery_sensors.py (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/example_bigquery_tables.py (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/example_bigquery_to_bigquery.py (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/example_bigquery_to_gcs.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/bigquery/resources}/__init__.py (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/resources/example_bigquery_query.sql (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/resources/update_table_schema.json (100%)
rename tests/system/providers/google/{ => cloud}/bigquery/resources/us-states.csv (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/cloud_sql}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/dataproc}/__init__.py (100%)
rename tests/system/providers/google/{ => cloud}/dataproc/example_dataproc_gke.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/dataproc/resources}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/datastore}/__init__.py (100%)
rename tests/system/providers/google/{ => cloud}/datastore/example_datastore_commit.py (100%)
rename tests/system/providers/google/{ => cloud}/datastore/example_datastore_export_import.py (100%)
rename tests/system/providers/google/{ => cloud}/datastore/example_datastore_query.py (100%)
rename tests/system/providers/google/{ => cloud}/datastore/example_datastore_rollback.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/gcs}/__init__.py (100%)
rename tests/system/providers/google/{ => cloud}/gcs/example_gcs_to_bigquery.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/gcs/resources}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/kubernetes_engine}/__init__.py (100%)
rename tests/system/providers/google/{ => cloud}/kubernetes_engine/example_kubernetes_engine.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/spanner}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/speech_to_text}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/stackdriver}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/tasks}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/text_to_speech}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/cloud/workflows}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/google/workplace}/__init__.py (100%)
copy {airflow/api_connexion => tests/system/providers/presto}/__init__.py (100%)
copy {airflow/api_connexion => tests/test_utils/operators}/__init__.py (100%)
copy {airflow/api_connexion => tests/test_utils/perf}/__init__.py (100%)
copy {airflow/api_connexion => tests/test_utils/perf/dags}/__init__.py (100%)
copy {airflow/api_connexion => tests/testconfig}/__init__.py (100%)
copy {airflow/api_connexion => tests/testconfig/conf}/__init__.py (100%)
copy {airflow/api_connexion => tests/triggers}/__init__.py (100%)
copy {airflow/api_connexion => tests/www/test_logs}/__init__.py (100%)
copy tests/www/test_logs/dag_for_testing_log_view/{task_for_testing_log_view/2017-09-01T00.00.00+00.00 => scheduled__2017-09-01T00:00:00+00:00/task_for_testing_log_view}/1.log (100%)
copy tests/www/test_logs/{dag_for_testing_log_view/task_for_testing_log_view/2017-09-01T00.00.00+00.00/1.log => dag_id=dag_for_testing_log_view/run_id=scheduled__2017-09-01T00:00:00+00:00/task_id=task_for_testing_log_view/attempt=1.log} (100%)
copy {airflow/api_connexion => tests/www/views}/__init__.py (100%)
create mode 100644 tests/www/views/test_views_grid.py