123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #
- # Licensed to the Apache Software Foundation (ASF) under one
- # or more contributor license agreements. See the NOTICE file
- # distributed with this work for additional information
- # regarding copyright ownership. The ASF licenses this file
- # to you under the Apache License, Version 2.0 (the
- # "License"); you may not use this file except in compliance
- # with the License. You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing,
- # software distributed under the License is distributed on an
- # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- # KIND, either express or implied. See the License for the
- # specific language governing permissions and limitations
- # under the License.
- """
- ### Tutorial Documentation
- Documentation that goes along with the Airflow tutorial located
- [here](https://airflow.apache.org/tutorial.html)
- """
- from __future__ import annotations
- # [START tutorial]
- # [START import_module]
- import textwrap
- from datetime import datetime, timedelta
- # The DAG object; we'll need this to instantiate a DAG
- from airflow.models.dag import DAG
- # Operators; we need this to operate!
- from airflow.operators.bash import BashOperator
- # [END import_module]
- # [START instantiate_dag]
- with DAG(
- "tutorial",
- # [START default_args]
- # These args will get passed on to each operator
- # You can override them on a per-task basis during operator initialization
- default_args={
- "depends_on_past": False,
- "email": ["airflow@example.com"],
- "email_on_failure": False,
- "email_on_retry": False,
- "retries": 1,
- "retry_delay": timedelta(minutes=5),
- # 'queue': 'bash_queue',
- # 'pool': 'backfill',
- # 'priority_weight': 10,
- # 'end_date': datetime(2016, 1, 1),
- # 'wait_for_downstream': False,
- # 'sla': timedelta(hours=2),
- # 'execution_timeout': timedelta(seconds=300),
- # 'on_failure_callback': some_function, # or list of functions
- # 'on_success_callback': some_other_function, # or list of functions
- # 'on_retry_callback': another_function, # or list of functions
- # 'sla_miss_callback': yet_another_function, # or list of functions
- # 'on_skipped_callback': another_function, #or list of functions
- # 'trigger_rule': 'all_success'
- },
- # [END default_args]
- description="A simple tutorial DAG",
- schedule=timedelta(days=1),
- start_date=datetime(2021, 1, 1),
- catchup=False,
- tags=["example"],
- ) as dag:
- # [END instantiate_dag]
- # t1, t2 and t3 are examples of tasks created by instantiating operators
- # [START basic_task]
- t1 = BashOperator(
- task_id="print_date",
- bash_command="date",
- )
- t2 = BashOperator(
- task_id="sleep",
- depends_on_past=False,
- bash_command="sleep 5",
- retries=3,
- )
- # [END basic_task]
- # [START documentation]
- t1.doc_md = textwrap.dedent(
- """\
- #### Task Documentation
- You can document your task using the attributes `doc_md` (markdown),
- `doc` (plain text), `doc_rst`, `doc_json`, `doc_yaml` which gets
- rendered in the UI's Task Instance Details page.
- 
- **Image Credit:** Randall Munroe, [XKCD](https://xkcd.com/license.html)
- """
- )
- dag.doc_md = __doc__ # providing that you have a docstring at the beginning of the DAG; OR
- dag.doc_md = """
- This is a documentation placed anywhere
- """ # otherwise, type it like this
- # [END documentation]
- # [START jinja_template]
- templated_command = textwrap.dedent(
- """
- {% for i in range(5) %}
- echo "{{ ds }}"
- echo "{{ macros.ds_add(ds, 7)}}"
- {% endfor %}
- """
- )
- t3 = BashOperator(
- task_id="templated",
- depends_on_past=False,
- bash_command=templated_command,
- )
- # [END jinja_template]
- t1 >> [t2, t3]
- # [END tutorial]
|