MoviePy 2 Tutorial: Edit Videos with Python (Trim, Text, Merge, Audio) 2026 FastAPI Dependency Injection with Depends: Annotated, Yield and Overrides (2026) HTML to PDF in Python with WeasyPrint and Jinja2: Invoices and Reports (2026) Extract Tables from PDF in Python with pdfplumber: CSV, Excel and pandas (2026) OCR in Python: Extract Text from Images and Scanned PDFs with RapidOCR (2026) Text to Speech in Python with Piper: Offline Natural Voices, WAV Files and a TTS API (2026) Speech to Text in Python with faster-whisper: Transcribe Audio and Make Subtitles (2026) Send Email with Python: smtplib, HTML, Attachments and Bulk Mail (2026) Python QR Code Generator: Styled QR Codes with qrcode (2026) Pillow 13: Resize, Crop and Watermark Images in Python (2026) Parallel Programming with Dask in Python 2026: Intro Guide MarkItDown: Convert Files to Markdown for LLMs in Python (2026) Plotly Express: Interactive Charts in Python (2026) pandera: Validate pandas DataFrames in Python (2026) jsonschema: Validate JSON Data in Python (2026) Faker: Generate Fake Test Data in Python (2026) RapidFuzz: Fuzzy String Matching in Python (2026) sqlglot: Parse and Transpile SQL in Python (2026) structlog: Structured Logging in Python (2026) python-pptx in 2026: Automate PowerPoint Reports with Python python-docx: Create and Edit Word Documents with Python (2026) pypdf: Merge, Split and Edit PDFs with Python (2026) openpyxl: Automate Excel Files with Python (2026) Hypothesis: Property-Based Testing in Python (2026) tiktoken: Count LLM Tokens in Python (2026) pydantic-settings: Typed Env Config in Python (2026) orjson: Fast JSON in Python (2026) PyArrow Tables + Parquet in Python (2026) SQLAlchemy 2.0 ORM in Python (2026): Mapped Models + Session Build Semantic Search with ChromaDB in Python (2026) View all in this category →

Apache Airflow for Data Engineering - Full Course (2 Hours): DAGs, TaskFlow, Scheduling, ETL Project – Source Code

Learn Apache Airflow 3 the way data engineers use it, from zero to a scheduled, tested, rerunnable pipeline, all locally with a Python virtual environment: DAGs and tasks, the web UI, operators and TaskFlow, dependencies, scheduling, catchup and backfills, templating, XComs, variables and connections, sensors, retries and callbacks, dynamic task mapping, testing DAGs with pytest, branching and run parameters, and asset-based scheduling. Then a final project: extract weather data from a public API, transform it with pandas, load it into DuckDB idempotently, and gate it with data quality checks.

Duration
2:05:27 (20 chapters)
Tools
Apache Airflow 3.3.2, Python 3.13, pandas, DuckDB, pytest, VS Code, bash

Watch the course

Watch on YouTube

Chapters

  1. 0:00:0001. Welcome: what orchestration is, and the plan
  2. 0:04:4802. Installing Airflow locally
  3. 0:11:3703. Starting Airflow and the web UI
  4. 0:17:2304. Your first DAG
  5. 0:25:4105. Tasks, dependencies and the graph
  6. 0:31:4506. The PythonOperator, and testing one task
  7. 0:36:1207. The TaskFlow API
  8. 0:41:2008. Scheduling, logical dates and catchup
  9. 0:49:1409. Templates and the run context
  10. 0:55:0910. XComs: passing data between tasks
  11. 0:59:3511. Variables and connections
  12. 1:06:1312. Sensors: waiting for something to happen
  13. 1:10:4213. Retries, timeouts, trigger rules and alerts
  14. 1:17:1014. Dynamic task mapping
  15. 1:22:1915. Testing DAGs with pytest
  16. 1:29:5616. Branching and run parameters
  17. 1:36:0817. Assets: data-aware scheduling
  18. 1:41:5718. Final project 1: extract weather data from a public API
  19. 1:48:2119. Final project 2: transform with pandas, load into DuckDB
  20. 1:54:5420. Final project 3: quality checks, backfill and the finished pipeline

What's in the zip

  • airflow-for-data-engineering/HOW_TO_RUN.txt
  • airflow-for-data-engineering/LICENSE
  • airflow-for-data-engineering/MANIFEST.sha256
  • airflow-for-data-engineering/README.md
  • airflow-for-data-engineering/airflow.env
  • airflow-for-data-engineering/dags/assets_demo.py
  • airflow-for-data-engineering/dags/branch_demo.py
  • airflow-for-data-engineering/dags/config_demo.py
  • airflow-for-data-engineering/dags/daily_report.py
  • airflow-for-data-engineering/dags/dependencies_demo.py
  • airflow-for-data-engineering/dags/hello_airflow.py
  • airflow-for-data-engineering/dags/mapping_demo.py
  • airflow-for-data-engineering/dags/python_demo.py
  • airflow-for-data-engineering/dags/reliability_demo.py
  • airflow-for-data-engineering/dags/sensor_demo.py
  • airflow-for-data-engineering/dags/taskflow_etl.py
  • airflow-for-data-engineering/dags/templates_demo.py
  • airflow-for-data-engineering/dags/weather_helpers.py
  • airflow-for-data-engineering/dags/weather_pipeline.py
  • airflow-for-data-engineering/dags/xcom_demo.py
  • airflow-for-data-engineering/dagtest.sh
  • airflow-for-data-engineering/pytest.ini
  • airflow-for-data-engineering/query.py
  • airflow-for-data-engineering/start_airflow.sh
  • airflow-for-data-engineering/stop_airflow.sh
  • airflow-for-data-engineering/tests/test_dags.py
  • airflow-for-data-engineering/tests/test_helpers.py

How to run

Python 3.11+ (tested with 3.13) and apache-airflow 3.3.2 installed with the official constraints file. Linux or macOS; on Windows use WSL. Run every command from the course folder in a bash terminal. Airflow runs locally with SQLite; no cloud account.

python3 -m venv .venv && source .venv/bin/activate
pip install "apache-airflow==3.3.2" pandas duckdb pytest --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.3.2/constraints-3.13.txt"
source airflow.env
airflow db migrate
bash dagtest.sh hello_airflow
bash start_airflow.sh

See HOW_TO_RUN.txt for every chapter's exact commands, including the variable and connection used by the final project.

Data

No datasets are bundled. The final project downloads daily weather history from the free public Open-Meteo archive API (no key needed); the other demo data is generated by the course code itself.

Download source code

File: airflow-for-data-engineering-code.zip

Size: 16.8 KB (17,184 bytes)

SHA-256:
56650c810fc7ad01be12418e72a4ba204a13c184261a1f1c03142b166fb853c3

Licence: code is released under the MIT licence, copyright PyInns. See LICENSE and README inside the zip. Free learning code, not production code.