Full Code of dbt-labs/dbt-core for AI

main 7acf053cb99a cached
1075 files
12.5 MB
3.3M tokens
11180 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (13,333K chars total). Download the full file to get everything.
Repository: dbt-labs/dbt-core
Branch: main
Commit: 7acf053cb99a
Files: 1075
Total size: 12.5 MB

Directory structure:
gitextract_6zoc49gl/

├── .changes/
│   ├── 0.0.0.md
│   ├── README.md
│   ├── header.tpl.md
│   └── unreleased/
│       ├── .gitkeep
│       ├── Dependencies-20251118-155354.yaml
│       ├── Dependencies-20251217-151349.yaml
│       ├── Dependencies-20251219-153804.yaml
│       ├── Dependencies-20260113-135442.yaml
│       ├── Dependencies-20260113-143057.yaml
│       ├── Dependencies-20260121-171712.yaml
│       ├── Dependencies-20260302-130425.yaml
│       ├── Docs-20240311-140344.yaml
│       ├── Docs-20240501-021050.yaml
│       ├── Docs-20240516-223036.yaml
│       ├── Docs-20240613-151048.yaml
│       ├── Docs-20250728-162542.yaml
│       ├── Docs-20260319-112630.yaml
│       ├── Features-20251006-140352.yaml
│       ├── Features-20251111-103504.yaml
│       ├── Features-20251117-141053.yaml
│       ├── Features-20251201-165209.yaml
│       ├── Features-20251203-122926.yaml
│       ├── Features-20251210-202001.yaml
│       ├── Features-20260115-131115.yaml
│       ├── Features-20260119-210143.yaml
│       ├── Features-20260123-173805.yaml
│       ├── Features-20260126-164458.yaml
│       ├── Features-20260127-114149.yaml
│       ├── Features-20260127-214617.yaml
│       ├── Features-20260128-125727.yaml
│       ├── Features-20260128-172052.yaml
│       ├── Features-20260129-110711.yaml
│       ├── Features-20260129-114832.yaml
│       ├── Features-20260129-175432.yaml
│       ├── Features-20260129-185659.yaml
│       ├── Features-20260205-105228.yaml
│       ├── Features-20260212-232728.yaml
│       ├── Features-20260219-133321.yaml
│       ├── Features-20260302-123311.yaml
│       ├── Features-20260303-214328.yaml
│       ├── Features-9041.yaml
│       ├── Fixes-20250922-151726.yaml
│       ├── Fixes-20251117-140649.yaml
│       ├── Fixes-20251117-185025.yaml
│       ├── Fixes-20251118-171106.yaml
│       ├── Fixes-20251119-195034.yaml
│       ├── Fixes-20251124-155629.yaml
│       ├── Fixes-20251124-155756.yaml
│       ├── Fixes-20251124-170855.yaml
│       ├── Fixes-20251125-120246.yaml
│       ├── Fixes-20251125-122020.yaml
│       ├── Fixes-20251127-141308.yaml
│       ├── Fixes-20251127-145929.yaml
│       ├── Fixes-20251127-170124.yaml
│       ├── Fixes-20251128-102129.yaml
│       ├── Fixes-20251128-122838.yaml
│       ├── Fixes-20251128-161937.yaml
│       ├── Fixes-20251128-163144.yaml
│       ├── Fixes-20251202-133705.yaml
│       ├── Fixes-20251204-094753.yaml
│       ├── Fixes-20251209-175031.yaml
│       ├── Fixes-20251210-143935.yaml
│       ├── Fixes-20251216-120727.yaml
│       ├── Fixes-20251217-002813.yaml
│       ├── Fixes-20251217-105918.yaml
│       ├── Fixes-20251219-184405.yaml
│       ├── Fixes-20260109-141332.yaml
│       ├── Fixes-20260113-161742.yaml
│       ├── Fixes-20260124-212300.yaml
│       ├── Fixes-20260125-113244.yaml
│       ├── Fixes-20260126-160659.yaml
│       ├── Fixes-20260202-123453.yaml
│       ├── Fixes-20260202-153835.yaml
│       ├── Fixes-20260204-184553.yaml
│       ├── Fixes-20260204-211128.yaml
│       ├── Fixes-20260205-120000.yaml
│       ├── Fixes-20260206-204257.yaml
│       ├── Fixes-20260210-154042.yaml
│       ├── Fixes-20260216-230817.yaml
│       ├── Fixes-20260219-012414.yaml
│       ├── Fixes-20260219-131833.yaml
│       ├── Fixes-20260219-170000.yaml
│       ├── Fixes-20260223-132342.yaml
│       ├── Fixes-20260223-161820.yaml
│       ├── Fixes-20260224-115546.yaml
│       ├── Fixes-20260224-180000.yaml
│       ├── Fixes-20260224-231047.yaml
│       ├── Fixes-20260225-203131.yaml
│       ├── Fixes-20260226-163836.yaml
│       ├── Fixes-20260227-133424.yaml
│       ├── Fixes-20260227-140009.yaml
│       ├── Fixes-20260302-000739.yaml
│       ├── Fixes-20260303-114528.yaml
│       ├── Fixes-20260305-133929.yaml
│       ├── Fixes-20260306-034008.yaml
│       ├── Fixes-20260306-071359.yaml
│       ├── Fixes-20260306-192013.yaml
│       ├── Fixes-20260310-120000.yaml
│       ├── Fixes-20260317-094953.yaml
│       ├── Fixes-20260318-000000.yaml
│       ├── Fixes-20260318-091800.yaml
│       ├── Fixes-20260318-173426.yaml
│       ├── Fixes-20260318-182358.yaml
│       ├── Fixes-20260318-191153.yaml
│       ├── Fixes-20260318-200626.yaml
│       ├── Under the Hood-20250929-151159.yaml
│       ├── Under the Hood-20251119-110110.yaml
│       ├── Under the Hood-20251121-140515.yaml
│       ├── Under the Hood-20251209-131857.yaml
│       ├── Under the Hood-20251215-155046.yaml
│       ├── Under the Hood-20260205-200835.yaml
│       ├── Under the Hood-20260210-151244.yaml
│       ├── Under the Hood-20260214-181659.yaml
│       ├── Under the Hood-20260220-170741.yaml
│       ├── Under the Hood-20260223-121653.yaml
│       ├── Under the Hood-20260225-092728.yaml
│       ├── Under the Hood-20260302-101022.yaml
│       ├── Under the Hood-20260306-182611.yaml
│       └── Under the Hood-20260318-120715.yaml
├── .changie.yaml
├── .dockerignore
├── .flake8
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── code-docs.yml
│   │   ├── config.yml
│   │   ├── feature-request.yml
│   │   ├── implementation-ticket.yml
│   │   └── regression-report.yml
│   ├── _README.md
│   ├── actions/
│   │   ├── latest-wrangler/
│   │   │   ├── Dockerfile
│   │   │   ├── README.md
│   │   │   ├── action.yml
│   │   │   ├── examples/
│   │   │   │   ├── example_workflow.yml
│   │   │   │   └── example_workflow_dispatch.json
│   │   │   └── main.py
│   │   └── setup-postgres-windows/
│   │       └── action.yml
│   ├── dbt-postgres-testing.yml
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── artifact-reviews.yml
│       ├── auto-respond-bug-reports.yml
│       ├── backport.yml
│       ├── bot-changelog.yml
│       ├── changelog-existence.yml
│       ├── check-artifact-changes.yml
│       ├── community-label.yml
│       ├── cut-release-branch.yml
│       ├── docs-issue.yml
│       ├── main.yml
│       ├── nightly-release.yml
│       ├── release-branch-tests.yml
│       ├── release.yml
│       ├── repository-cleanup.yml
│       ├── schema-check.yml
│       ├── stale.yml
│       ├── structured-logging-schema-check.yml
│       ├── test-repeater.yml
│       ├── triage-labels.yml
│       └── update-test-durations.yml
├── .gitignore
├── .pre-commit-config.yaml
├── AGENTS.md
├── ARCHITECTURE.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Dockerfile.test
├── Makefile
├── README.md
├── SECURITY.md
├── codecov.yml
├── core/
│   ├── .test_durations
│   ├── LICENSE
│   ├── README.md
│   ├── dbt/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── __version__.py
│   │   ├── _pydantic_shim.py
│   │   ├── artifacts/
│   │   │   ├── __init__.py
│   │   │   ├── exceptions/
│   │   │   │   ├── __init__.py
│   │   │   │   └── schemas.py
│   │   │   ├── resources/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   ├── types.py
│   │   │   │   └── v1/
│   │   │   │       ├── analysis.py
│   │   │   │       ├── catalog.py
│   │   │   │       ├── components.py
│   │   │   │       ├── config.py
│   │   │   │       ├── documentation.py
│   │   │   │       ├── exposure.py
│   │   │   │       ├── function.py
│   │   │   │       ├── generic_test.py
│   │   │   │       ├── group.py
│   │   │   │       ├── hook.py
│   │   │   │       ├── macro.py
│   │   │   │       ├── metric.py
│   │   │   │       ├── model.py
│   │   │   │       ├── owner.py
│   │   │   │       ├── saved_query.py
│   │   │   │       ├── seed.py
│   │   │   │       ├── semantic_layer_components.py
│   │   │   │       ├── semantic_model.py
│   │   │   │       ├── singular_test.py
│   │   │   │       ├── snapshot.py
│   │   │   │       ├── source_definition.py
│   │   │   │       ├── sql_operation.py
│   │   │   │       └── unit_test_definition.py
│   │   │   ├── schemas/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   ├── batch_results.py
│   │   │   │   ├── catalog/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── v1/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── catalog.py
│   │   │   │   ├── freshness/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── v3/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── freshness.py
│   │   │   │   ├── manifest/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── v12/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── manifest.py
│   │   │   │   ├── results.py
│   │   │   │   ├── run/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── v5/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── run.py
│   │   │   │   └── upgrades/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── upgrade_manifest.py
│   │   │   │       └── upgrade_manifest_dbt_version.py
│   │   │   └── utils/
│   │   │       └── validation.py
│   │   ├── cli/
│   │   │   ├── __init__.py
│   │   │   ├── context.py
│   │   │   ├── exceptions.py
│   │   │   ├── flags.py
│   │   │   ├── main.py
│   │   │   ├── option_types.py
│   │   │   ├── options.py
│   │   │   ├── params.py
│   │   │   ├── requires.py
│   │   │   ├── resolvers.py
│   │   │   └── types.py
│   │   ├── clients/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── checked_load.py
│   │   │   ├── git.py
│   │   │   ├── jinja.py
│   │   │   ├── jinja_static.py
│   │   │   ├── registry.py
│   │   │   └── yaml_helper.py
│   │   ├── compilation.py
│   │   ├── config/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── catalogs.py
│   │   │   ├── profile.py
│   │   │   ├── project.py
│   │   │   ├── renderer.py
│   │   │   ├── runtime.py
│   │   │   ├── selectors.py
│   │   │   └── utils.py
│   │   ├── constants.py
│   │   ├── context/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── base.py
│   │   │   ├── configured.py
│   │   │   ├── context_config.py
│   │   │   ├── docs.py
│   │   │   ├── exceptions_jinja.py
│   │   │   ├── macro_resolver.py
│   │   │   ├── macros.py
│   │   │   ├── manifest.py
│   │   │   ├── providers.py
│   │   │   ├── query_header.py
│   │   │   ├── secret.py
│   │   │   └── target.py
│   │   ├── contracts/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── files.py
│   │   │   ├── graph/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── manifest.py
│   │   │   │   ├── metrics.py
│   │   │   │   ├── model_config.py
│   │   │   │   ├── node_args.py
│   │   │   │   ├── nodes.py
│   │   │   │   ├── semantic_manifest.py
│   │   │   │   └── unparsed.py
│   │   │   ├── project.py
│   │   │   ├── results.py
│   │   │   ├── selection.py
│   │   │   ├── sql.py
│   │   │   ├── state.py
│   │   │   └── util.py
│   │   ├── deprecations.py
│   │   ├── deps/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── base.py
│   │   │   ├── git.py
│   │   │   ├── local.py
│   │   │   ├── registry.py
│   │   │   ├── resolver.py
│   │   │   └── tarball.py
│   │   ├── docs/
│   │   │   ├── Makefile
│   │   │   ├── build/
│   │   │   │   ├── doctrees/
│   │   │   │   │   ├── environment.pickle
│   │   │   │   │   └── index.doctree
│   │   │   │   └── html/
│   │   │   │       ├── .buildinfo
│   │   │   │       ├── _sources/
│   │   │   │       │   └── index.rst.txt
│   │   │   │       ├── _static/
│   │   │   │       │   ├── _sphinx_javascript_frameworks_compat.js
│   │   │   │       │   ├── alabaster.css
│   │   │   │       │   ├── basic.css
│   │   │   │       │   ├── custom.css
│   │   │   │       │   ├── doctools.js
│   │   │   │       │   ├── documentation_options.js
│   │   │   │       │   ├── jquery-3.6.0.js
│   │   │   │       │   ├── jquery.js
│   │   │   │       │   ├── language_data.js
│   │   │   │       │   ├── pygments.css
│   │   │   │       │   ├── searchtools.js
│   │   │   │       │   ├── sphinx_highlight.js
│   │   │   │       │   ├── underscore-1.13.1.js
│   │   │   │       │   └── underscore.js
│   │   │   │       ├── genindex.html
│   │   │   │       ├── objects.inv
│   │   │   │       ├── search.html
│   │   │   │       └── searchindex.js
│   │   │   ├── make.bat
│   │   │   └── source/
│   │   │       ├── _ext/
│   │   │       │   └── dbt_click.py
│   │   │       ├── conf.py
│   │   │       └── index.rst
│   │   ├── env_vars.py
│   │   ├── event_time/
│   │   │   ├── event_time.py
│   │   │   └── sample_window.py
│   │   ├── events/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── base_types.py
│   │   │   ├── core_types_pb2.py
│   │   │   ├── logging.py
│   │   │   └── types.py
│   │   ├── exceptions.py
│   │   ├── flags.py
│   │   ├── graph/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── cli.py
│   │   │   ├── graph.py
│   │   │   ├── queue.py
│   │   │   ├── selector.py
│   │   │   ├── selector_methods.py
│   │   │   ├── selector_spec.py
│   │   │   └── thread_pool.py
│   │   ├── hooks.py
│   │   ├── include/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   └── starter_project/
│   │   │       ├── .gitignore
│   │   │       ├── README.md
│   │   │       ├── __init__.py
│   │   │       ├── analyses/
│   │   │       │   └── .gitkeep
│   │   │       ├── dbt_project.yml
│   │   │       ├── macros/
│   │   │       │   └── .gitkeep
│   │   │       ├── models/
│   │   │       │   └── example/
│   │   │       │       ├── my_first_dbt_model.sql
│   │   │       │       ├── my_second_dbt_model.sql
│   │   │       │       └── schema.yml
│   │   │       ├── seeds/
│   │   │       │   └── .gitkeep
│   │   │       ├── snapshots/
│   │   │       │   └── .gitkeep
│   │   │       └── tests/
│   │   │           └── .gitkeep
│   │   ├── internal_deprecations.py
│   │   ├── jsonschemas/
│   │   │   ├── __init__.py
│   │   │   ├── jsonschemas.py
│   │   │   ├── project/
│   │   │   │   ├── 0.0.110.json
│   │   │   │   └── 0.0.85.json
│   │   │   └── resources/
│   │   │       ├── 0.0.110.json
│   │   │       ├── 0.0.85.json
│   │   │       └── latest.json
│   │   ├── links.py
│   │   ├── materializations/
│   │   │   ├── __init__.py
│   │   │   └── incremental/
│   │   │       ├── __init__.py
│   │   │       └── microbatch.py
│   │   ├── mp_context.py
│   │   ├── node_types.py
│   │   ├── parser/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── analysis.py
│   │   │   ├── base.py
│   │   │   ├── common.py
│   │   │   ├── docs.py
│   │   │   ├── fixtures.py
│   │   │   ├── functions.py
│   │   │   ├── generic_test.py
│   │   │   ├── generic_test_builders.py
│   │   │   ├── hooks.py
│   │   │   ├── macros.py
│   │   │   ├── manifest.py
│   │   │   ├── models.py
│   │   │   ├── partial.py
│   │   │   ├── read_files.py
│   │   │   ├── schema_generic_tests.py
│   │   │   ├── schema_renderer.py
│   │   │   ├── schema_yaml_readers.py
│   │   │   ├── schemas.py
│   │   │   ├── search.py
│   │   │   ├── seeds.py
│   │   │   ├── singular_test.py
│   │   │   ├── snapshots.py
│   │   │   ├── sources.py
│   │   │   ├── sql.py
│   │   │   └── unit_tests.py
│   │   ├── plugins/
│   │   │   ├── __init__.py
│   │   │   ├── contracts.py
│   │   │   ├── exceptions.py
│   │   │   ├── manager.py
│   │   │   └── manifest.py
│   │   ├── profiler.py
│   │   ├── py.typed
│   │   ├── runners/
│   │   │   ├── __init__.py
│   │   │   ├── exposure_runner.py
│   │   │   ├── no_op_runner.py
│   │   │   └── saved_query_runner.py
│   │   ├── selected_resources.py
│   │   ├── task/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── base.py
│   │   │   ├── build.py
│   │   │   ├── clean.py
│   │   │   ├── clone.py
│   │   │   ├── compile.py
│   │   │   ├── debug.py
│   │   │   ├── deps.py
│   │   │   ├── docs/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── generate.py
│   │   │   │   └── serve.py
│   │   │   ├── freshness.py
│   │   │   ├── function.py
│   │   │   ├── group_lookup.py
│   │   │   ├── init.py
│   │   │   ├── list.py
│   │   │   ├── printer.py
│   │   │   ├── retry.py
│   │   │   ├── run.py
│   │   │   ├── run_operation.py
│   │   │   ├── runnable.py
│   │   │   ├── seed.py
│   │   │   ├── show.py
│   │   │   ├── snapshot.py
│   │   │   ├── sql.py
│   │   │   └── test.py
│   │   ├── tests/
│   │   │   ├── fixtures/
│   │   │   │   ├── __init__.py
│   │   │   │   └── project.py
│   │   │   └── util.py
│   │   ├── tracking.py
│   │   ├── utils/
│   │   │   ├── __init__.py
│   │   │   ├── artifact_upload.py
│   │   │   └── utils.py
│   │   └── version.py
│   ├── hatch.toml
│   └── pyproject.toml
├── docker/
│   ├── Dockerfile
│   ├── README.md
│   └── test.sh
├── docker-compose.yml
├── docs/
│   ├── arch/
│   │   ├── 1_Overview.md
│   │   ├── 2_CLI.md
│   │   ├── 3.1_Partial_Parsing.md
│   │   ├── 3.2_Deferral.md
│   │   ├── 3_Parsing.md
│   │   ├── 4.1_Task_Framework.md
│   │   ├── 4.2_Graph_Compilation.md
│   │   ├── 4.3_Node_Selection.md
│   │   ├── 4.4_Node_Compilation.md
│   │   ├── 4.5_Node_Materialization.md
│   │   ├── 4_Execution.md
│   │   ├── 5_Adapter.md
│   │   ├── 6.10_dbt_compile.md
│   │   ├── 6.11_dbt_source.md
│   │   ├── 6.12_dbt_run-operation.md
│   │   ├── 6.13_dbt_init.md
│   │   ├── 6.14_dbt_list.md
│   │   ├── 6.15_dbt_retry.md
│   │   ├── 6.16_dbt_clone.md
│   │   ├── 6.17_dbt_debug.md
│   │   ├── 6.18_dbt_clean.md
│   │   ├── 6.1_dbt_parse.md
│   │   ├── 6.2_dbt_run.md
│   │   ├── 6.3_dbt_build.md
│   │   ├── 6.4_dbt_seed.md
│   │   ├── 6.5_dbt_snapshot.md
│   │   ├── 6.6_dbt_test.md
│   │   ├── 6.7_dbt_show.md
│   │   ├── 6.8_dbt_deps.md
│   │   ├── 6.9_dbt_docs.md
│   │   ├── 6_Commands.md
│   │   ├── 7_Artifacts.md
│   │   └── 8_Versioning_Branching_Strategy.md
│   ├── guides/
│   │   ├── behavior-change-flags.md
│   │   └── parsing-vs-compilation-vs-runtime.md
│   └── roadmap/
│       ├── 2022-05-dbt-a-core-story.md
│       ├── 2022-08-back-for-more.md
│       ├── 2023-02-back-to-basics.md
│       ├── 2023-11-dbt-tng.md
│       ├── 2024-12-play-on.md
│       ├── 2025-05-new-engine-same-language.md
│       └── 2025-12-magic-to-do.md
├── hatch.toml
├── pyproject.toml
├── pytest.ini
├── requirements.txt
├── schemas/
│   └── dbt/
│       ├── catalog/
│       │   └── v1.json
│       ├── manifest/
│       │   ├── v10.json
│       │   ├── v11.json
│       │   ├── v12.json
│       │   ├── v5.json
│       │   ├── v6.json
│       │   ├── v7.json
│       │   ├── v8.json
│       │   └── v9.json
│       ├── run-results/
│       │   ├── v4.json
│       │   ├── v5.json
│       │   └── v6.json
│       └── sources/
│           └── v3.json
├── scripts/
│   ├── check_libyaml.py
│   ├── collect-artifact-schema.py
│   ├── collect-dbt-contexts.py
│   ├── env-setup.sh
│   ├── migrate-adapters.py
│   ├── pre-commit-hooks/
│   │   └── no_versioned_artifact_resource_imports.py
│   ├── setup_db.sh
│   └── update_dev_packages.sh
├── tests/
│   ├── __init__.py
│   ├── conftest.py
│   ├── data/
│   │   └── __init__.py
│   ├── fixtures/
│   │   ├── __init__.py
│   │   ├── dbt_integration_project.py
│   │   ├── jaffle_shop.py
│   │   └── jaffle_shop_data/
│   │       ├── .gitkeep
│   │       ├── raw_customers.csv
│   │       ├── raw_orders.csv
│   │       └── raw_payments.csv
│   ├── functional/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── access/
│   │   │   └── test_access.py
│   │   ├── analysis/
│   │   │   └── test_analyses.py
│   │   ├── artifacts/
│   │   │   ├── data/
│   │   │   │   ├── results/
│   │   │   │   │   ├── v4/
│   │   │   │   │   │   └── run_results.json
│   │   │   │   │   ├── v5/
│   │   │   │   │   │   └── run_results.json
│   │   │   │   │   └── v6/
│   │   │   │   │       └── run_results.json
│   │   │   │   └── state/
│   │   │   │       ├── v1/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v10/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v11/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v12/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v2/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v3/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v4/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v5/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v6/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v7/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v8/
│   │   │   │       │   └── manifest.json
│   │   │   │       └── v9/
│   │   │   │           └── manifest.json
│   │   │   ├── expected_manifest.py
│   │   │   ├── expected_run_results.py
│   │   │   ├── test_artifact_fields.py
│   │   │   ├── test_artifacts.py
│   │   │   ├── test_docs_generate_defer.py
│   │   │   ├── test_override.py
│   │   │   ├── test_previous_version_state.py
│   │   │   ├── test_run_execution_result.py
│   │   │   └── test_run_results.py
│   │   ├── assertions/
│   │   │   └── test_runner.py
│   │   ├── basic/
│   │   │   ├── data/
│   │   │   │   ├── seed-initial.csv
│   │   │   │   ├── seed-update.csv
│   │   │   │   ├── summary_expected.csv
│   │   │   │   ├── summary_expected_update.csv
│   │   │   │   ├── varchar10_seed.sql
│   │   │   │   └── varchar300_seed.sql
│   │   │   ├── test_basic.py
│   │   │   ├── test_invalid_reference.py
│   │   │   ├── test_jaffle_shop.py
│   │   │   ├── test_mixed_case_db.py
│   │   │   ├── test_project.py
│   │   │   ├── test_simple_reference.py
│   │   │   └── test_varchar_widening.py
│   │   ├── build_command/
│   │   │   ├── fixtures.py
│   │   │   └── test_build.py
│   │   ├── catalogs/
│   │   │   └── test_catalogs_parsing.py
│   │   ├── clean/
│   │   │   └── test_clean.py
│   │   ├── cli/
│   │   │   ├── test_cli_exit_codes.py
│   │   │   ├── test_click_flags.py
│   │   │   ├── test_env_var_deprecations.py
│   │   │   ├── test_error_handling.py
│   │   │   ├── test_multioption.py
│   │   │   ├── test_option_interaction_validations.py
│   │   │   ├── test_requires.py
│   │   │   └── test_resolvers.py
│   │   ├── colors/
│   │   │   └── test_colors.py
│   │   ├── column_quoting/
│   │   │   └── test_column_quotes.py
│   │   ├── compile/
│   │   │   ├── fixtures.py
│   │   │   └── test_compile.py
│   │   ├── configs/
│   │   │   ├── fixtures.py
│   │   │   ├── test_configs.py
│   │   │   ├── test_configs_in_schema_files.py
│   │   │   ├── test_contract_configs.py
│   │   │   ├── test_custom_node_colors_configs.py
│   │   │   ├── test_disabled_configs.py
│   │   │   ├── test_disabled_model.py
│   │   │   ├── test_dupe_paths.py
│   │   │   ├── test_get_default.py
│   │   │   ├── test_grant_configs.py
│   │   │   ├── test_indiv_tests.py
│   │   │   ├── test_unused_configs.py
│   │   │   ├── test_vars_file.py
│   │   │   ├── test_versioned_model_constraint.py
│   │   │   └── test_warn_error_options.py
│   │   ├── conftest.py
│   │   ├── constraints/
│   │   │   ├── fixtures.py
│   │   │   └── test_foreign_key_constraints.py
│   │   ├── context_methods/
│   │   │   ├── first_dependency.py
│   │   │   ├── test_builtin_functions.py
│   │   │   ├── test_cli_var_override.py
│   │   │   ├── test_cli_vars.py
│   │   │   ├── test_custom_env_vars.py
│   │   │   ├── test_env_vars.py
│   │   │   ├── test_secret_env_vars.py
│   │   │   ├── test_var_dependency.py
│   │   │   ├── test_var_in_generate_name.py
│   │   │   └── test_yaml_functions.py
│   │   ├── contracts/
│   │   │   ├── test_contract_enforcement.py
│   │   │   ├── test_contract_precision.py
│   │   │   └── test_nonstandard_data_type.py
│   │   ├── custom_aliases/
│   │   │   ├── fixtures.py
│   │   │   └── test_custom_aliases.py
│   │   ├── custom_schemas/
│   │   │   └── test_custom_schemas.py
│   │   ├── custom_singular_tests/
│   │   │   ├── data/
│   │   │   │   └── seed_expected.sql
│   │   │   └── test_custom_singular_tests.py
│   │   ├── custom_target_path/
│   │   │   └── test_custom_target_path.py
│   │   ├── cycles/
│   │   │   └── test_cycles.py
│   │   ├── data_test_patch/
│   │   │   ├── fixtures.py
│   │   │   └── test_singular_test_patch.py
│   │   ├── data_tests/
│   │   │   └── test_hooks.py
│   │   ├── dbt_runner/
│   │   │   └── test_dbt_runner.py
│   │   ├── defer_state/
│   │   │   ├── data/
│   │   │   │   └── manifest.json
│   │   │   ├── fixtures.py
│   │   │   ├── test_defer_state.py
│   │   │   ├── test_group_updates.py
│   │   │   ├── test_modified_state.py
│   │   │   ├── test_modified_state_environment_vars.py
│   │   │   ├── test_modified_state_jinja.py
│   │   │   ├── test_modified_state_schema_evolution.py
│   │   │   ├── test_modified_state_sources_unrendered.py
│   │   │   ├── test_modified_state_vars.py
│   │   │   ├── test_removed_test_state.py
│   │   │   ├── test_run_results_state.py
│   │   │   └── test_unrendered_config.py
│   │   ├── dependencies/
│   │   │   ├── data/
│   │   │   │   ├── seed.sql
│   │   │   │   └── update.sql
│   │   │   ├── duplicate_dependency/
│   │   │   │   └── dbt_project.yml
│   │   │   ├── early_hook_dependency/
│   │   │   │   └── dbt_project.yml
│   │   │   ├── inverted_ref_dependency/
│   │   │   │   ├── dbt_project.yml
│   │   │   │   └── models/
│   │   │   │       ├── a.sql
│   │   │   │       ├── b.sql
│   │   │   │       └── b_root_package_in_ref.sql
│   │   │   ├── late_hook_dependency/
│   │   │   │   └── dbt_project.yml
│   │   │   ├── local_dependency/
│   │   │   │   ├── dbt_project.yml
│   │   │   │   ├── macros/
│   │   │   │   │   ├── dep_macro.sql
│   │   │   │   │   └── generate_schema_name.sql
│   │   │   │   ├── models/
│   │   │   │   │   ├── model_to_import.sql
│   │   │   │   │   └── schema.yml
│   │   │   │   └── seeds/
│   │   │   │       └── seed.csv
│   │   │   ├── models_local/
│   │   │   │   ├── dep_source_model.sql
│   │   │   │   ├── my_configured_model.sql
│   │   │   │   ├── my_model.sql
│   │   │   │   ├── schema.yml
│   │   │   │   └── source_override_model.sql
│   │   │   ├── nested_dependency/
│   │   │   │   ├── dbt_project.yml
│   │   │   │   ├── models/
│   │   │   │   │   └── model.sql
│   │   │   │   └── packages.yml
│   │   │   ├── test_add_package_edge_cases.py
│   │   │   ├── test_dependency_inverted_ref.py
│   │   │   ├── test_dependency_options.py
│   │   │   ├── test_dependency_secrets.py
│   │   │   ├── test_local_dependency.py
│   │   │   ├── test_simple_dependency.py
│   │   │   ├── test_simple_dependency_with_configs.py
│   │   │   └── test_uninstalled_package_found_error.py
│   │   ├── deprecations/
│   │   │   ├── fixtures.py
│   │   │   ├── test_config_deprecations.py
│   │   │   ├── test_deprecations.py
│   │   │   ├── test_missing_plus_in_config_deprecations.py
│   │   │   └── test_model_deprecations.py
│   │   ├── deps/
│   │   │   └── test_deps_with_vars.py
│   │   ├── docs/
│   │   │   ├── test_doc_blocks_backcompat.py
│   │   │   ├── test_doc_blocks_formatting.py
│   │   │   ├── test_doc_concat_arg.py
│   │   │   ├── test_doc_variable_arg.py
│   │   │   ├── test_duplicate_docs_block.py
│   │   │   ├── test_generate.py
│   │   │   ├── test_good_docs_blocks.py
│   │   │   ├── test_invalid_doc_ref.py
│   │   │   ├── test_missing_docs_blocks.py
│   │   │   ├── test_model_version_docs_blocks.py
│   │   │   └── test_static.py
│   │   ├── duplicates/
│   │   │   ├── test_duplicate_analysis.py
│   │   │   ├── test_duplicate_exposure.py
│   │   │   ├── test_duplicate_macro.py
│   │   │   ├── test_duplicate_metric.py
│   │   │   ├── test_duplicate_model.py
│   │   │   ├── test_duplicate_resource.py
│   │   │   ├── test_duplicate_resource_names.py
│   │   │   └── test_duplicate_source.py
│   │   ├── events/
│   │   │   └── events.py
│   │   ├── exit_codes/
│   │   │   ├── fixtures.py
│   │   │   └── test_exit_codes.py
│   │   ├── experimental_parser/
│   │   │   └── test_all_experimental_parser.py
│   │   ├── exposures/
│   │   │   ├── fixtures.py
│   │   │   ├── test_exposure_configs.py
│   │   │   └── test_exposures.py
│   │   ├── external_reference/
│   │   │   └── test_external_reference.py
│   │   ├── fail_fast/
│   │   │   └── test_fail_fast_run.py
│   │   ├── fixtures/
│   │   │   ├── __init__.py
│   │   │   ├── happy_path_fixture.py
│   │   │   └── happy_path_project/
│   │   │       ├── analyses/
│   │   │       │   ├── a.sql
│   │   │       │   └── a.yml
│   │   │       ├── dbt_project.yml
│   │   │       ├── functions/
│   │   │       │   ├── area_of_circle.sql
│   │   │       │   └── area_of_circle.yml
│   │   │       ├── macros/
│   │   │       │   ├── expression_is_true.sql
│   │   │       │   └── macro_stuff.sql
│   │   │       ├── models/
│   │   │       │   ├── docs.md
│   │   │       │   ├── e.yml
│   │   │       │   ├── ephemeral.sql
│   │   │       │   ├── g.yml
│   │   │       │   ├── incremental.sql
│   │   │       │   ├── m.yml
│   │   │       │   ├── macros.yml
│   │   │       │   ├── metricflow_time_spine.sql
│   │   │       │   ├── metricflow_time_spine_second.sql
│   │   │       │   ├── model_to_unit_test.sql
│   │   │       │   ├── model_with_lots_of_schema_configs.sql
│   │   │       │   ├── outer.sql
│   │   │       │   ├── schema.yml
│   │   │       │   ├── sm.yml
│   │   │       │   ├── snapshot_source.sql
│   │   │       │   ├── sq.yml
│   │   │       │   ├── sub/
│   │   │       │   │   └── inner.sql
│   │   │       │   └── unit_tests.yml
│   │   │       ├── seeds/
│   │   │       │   ├── s.yml
│   │   │       │   └── seed.csv
│   │   │       ├── snapshots/
│   │   │       │   ├── snapshot.sql
│   │   │       │   ├── snapshot_2.yml
│   │   │       │   └── snapshot_3.yml
│   │   │       └── tests/
│   │   │           ├── fixtures/
│   │   │           │   └── test_incremental_fixture.csv
│   │   │           ├── generic/
│   │   │           │   └── my_generic_test.sql
│   │   │           ├── schema.yml
│   │   │           └── t.sql
│   │   ├── fixtures.py
│   │   ├── functions/
│   │   │   ├── test_udafs.py
│   │   │   └── test_udfs.py
│   │   ├── generic_test_description/
│   │   │   ├── fixtures.py
│   │   │   └── test_generic_test_description.py
│   │   ├── graph_selection/
│   │   │   ├── data/
│   │   │   │   ├── seed.csv
│   │   │   │   └── summary_expected.csv
│   │   │   ├── fixtures.py
│   │   │   ├── test_graph_selection.py
│   │   │   ├── test_group_selection.py
│   │   │   ├── test_inline.py
│   │   │   ├── test_intersection_syntax.py
│   │   │   ├── test_schema_test_graph_selection.py
│   │   │   ├── test_tag_selection.py
│   │   │   └── test_version_selection.py
│   │   ├── incremental_schema_tests/
│   │   │   ├── fixtures.py
│   │   │   └── test_incremental_schema.py
│   │   ├── init/
│   │   │   └── test_init.py
│   │   ├── invalid_model_tests/
│   │   │   ├── test_invalid_models.py
│   │   │   └── test_model_logging.py
│   │   ├── list/
│   │   │   ├── fixtures.py
│   │   │   ├── test_commands.py
│   │   │   └── test_list.py
│   │   ├── logging/
│   │   │   ├── test_logging.py
│   │   │   └── test_meta_logging.py
│   │   ├── macros/
│   │   │   ├── data/
│   │   │   │   └── seed.sql
│   │   │   ├── fixtures.py
│   │   │   ├── package_macro_overrides/
│   │   │   │   ├── dbt_project.yml
│   │   │   │   └── macros/
│   │   │   │       └── macros.sql
│   │   │   ├── test_macro_annotations.py
│   │   │   └── test_macros.py
│   │   ├── manifest_validations/
│   │   │   └── test_check_for_spaces_in_model_names.py
│   │   ├── materializations/
│   │   │   ├── conftest.py
│   │   │   ├── fixtures.py
│   │   │   ├── test_custom_materialization.py
│   │   │   ├── test_ephemeral_compilation.py
│   │   │   ├── test_incremental.py
│   │   │   ├── test_incremental_with_contract.py
│   │   │   ├── test_runtime_materialization.py
│   │   │   └── test_supported_languages.py
│   │   ├── metrics/
│   │   │   ├── fixtures.py
│   │   │   ├── test_metric_configs.py
│   │   │   ├── test_metric_deferral.py
│   │   │   ├── test_metric_helper_functions.py
│   │   │   └── test_metrics.py
│   │   ├── microbatch/
│   │   │   ├── test_microbatch.py
│   │   │   └── test_microbatch_config_validation.py
│   │   ├── minimal_cli/
│   │   │   ├── fixtures.py
│   │   │   └── test_minimal_cli.py
│   │   ├── model_config/
│   │   │   └── test_freshness_config.py
│   │   ├── partial_parsing/
│   │   │   ├── fixtures.py
│   │   │   ├── test_file_diff.py
│   │   │   ├── test_partial_parsing.py
│   │   │   ├── test_pp_disabled_config.py
│   │   │   ├── test_pp_docs.py
│   │   │   ├── test_pp_functions.py
│   │   │   ├── test_pp_groups.py
│   │   │   ├── test_pp_metrics.py
│   │   │   ├── test_pp_schema_file_order.py
│   │   │   ├── test_pp_semantic_models.py
│   │   │   ├── test_pp_undefined_serialization.py
│   │   │   ├── test_pp_vars.py
│   │   │   └── test_versioned_models.py
│   │   ├── permission/
│   │   │   ├── data/
│   │   │   │   └── seed.sql
│   │   │   └── fixtures.py
│   │   ├── postgres/
│   │   │   ├── fixtures.py
│   │   │   ├── test_postgres_indexes.py
│   │   │   └── test_postgres_unlogged_table.py
│   │   ├── primary_keys/
│   │   │   ├── fixtures.py
│   │   │   └── test_primary_keys.py
│   │   ├── profiles/
│   │   │   ├── test_profile_dir.py
│   │   │   └── test_profiles_yml.py
│   │   ├── record/
│   │   │   └── test_record.py
│   │   ├── ref_override/
│   │   │   ├── test_custom_ref_kwargs.py
│   │   │   └── test_ref_override.py
│   │   ├── relation_names/
│   │   │   └── test_relation_name.py
│   │   ├── relation_quoting/
│   │   │   └── test_relation_quoting.py
│   │   ├── retry/
│   │   │   ├── fixtures.py
│   │   │   ├── test_retry.py
│   │   │   └── test_retry_threads.py
│   │   ├── run_operations/
│   │   │   ├── fixtures.py
│   │   │   └── test_run_operations.py
│   │   ├── run_query/
│   │   │   └── test_types.py
│   │   ├── sample_mode/
│   │   │   └── test_sample_mode.py
│   │   ├── saved_queries/
│   │   │   ├── __init__.py
│   │   │   ├── fixtures.py
│   │   │   ├── test_configs.py
│   │   │   ├── test_saved_query_build.py
│   │   │   └── test_saved_query_parsing.py
│   │   ├── schema/
│   │   │   ├── fixtures/
│   │   │   │   ├── macros.py
│   │   │   │   └── sql.py
│   │   │   └── test_custom_schema.py
│   │   ├── schema_tests/
│   │   │   ├── data/
│   │   │   │   ├── seed.sql
│   │   │   │   └── seed_failure.sql
│   │   │   ├── fixtures.py
│   │   │   ├── test_custom_test_config.py
│   │   │   ├── test_schema_v2_tests.py
│   │   │   └── test_sql_header_config.py
│   │   ├── seeds/
│   │   │   └── test_seed_column_type_validation.py
│   │   ├── selected_resources/
│   │   │   ├── fixtures.py
│   │   │   └── test_selected_resources.py
│   │   ├── selectors/
│   │   │   ├── test_default_selectors.py
│   │   │   └── test_selector_selector_method.py
│   │   ├── semantic_models/
│   │   │   ├── fixtures.py
│   │   │   ├── test_semantic_model_configs.py
│   │   │   ├── test_semantic_model_parsing.py
│   │   │   ├── test_semantic_model_v2_parsing.py
│   │   │   └── test_semantic_models.py
│   │   ├── severity/
│   │   │   └── test_severity.py
│   │   ├── show/
│   │   │   ├── fixtures.py
│   │   │   └── test_show.py
│   │   ├── snapshots/
│   │   │   ├── data/
│   │   │   │   ├── invalidate_postgres.sql
│   │   │   │   ├── seed_cn.sql
│   │   │   │   ├── seed_dbt_valid_to.sql
│   │   │   │   ├── seed_pg.sql
│   │   │   │   ├── shared_macros.sql
│   │   │   │   └── update.sql
│   │   │   ├── fixtures.py
│   │   │   ├── test_basic_snapshot.py
│   │   │   ├── test_changing_check_cols_snapshot.py
│   │   │   ├── test_changing_strategy_snapshot.py
│   │   │   ├── test_check_cols_snapshot.py
│   │   │   ├── test_check_cols_updated_at_snapshot.py
│   │   │   ├── test_comment_ending_snapshot.py
│   │   │   ├── test_cross_schema_snapshot.py
│   │   │   ├── test_hard_delete_snapshot.py
│   │   │   ├── test_invalid_namespace_snapshot.py
│   │   │   ├── test_long_text_snapshot.py
│   │   │   ├── test_missing_strategy_snapshot.py
│   │   │   ├── test_renamed_source_snapshot.py
│   │   │   ├── test_select_exclude_snapshot.py
│   │   │   ├── test_slow_query_snapshot.py
│   │   │   ├── test_snapshot_column_names.py
│   │   │   ├── test_snapshot_config.py
│   │   │   ├── test_snapshot_empty.py
│   │   │   └── test_snapshot_timestamps.py
│   │   ├── source_overrides/
│   │   │   ├── fixtures.py
│   │   │   ├── test_simple_source_override.py
│   │   │   └── test_source_overrides_duplicate_model.py
│   │   ├── sources/
│   │   │   ├── common_source_setup.py
│   │   │   ├── data/
│   │   │   │   └── seed.sql
│   │   │   ├── fixtures.py
│   │   │   ├── test_name_chars.py
│   │   │   ├── test_simple_source.py
│   │   │   ├── test_source_configs.py
│   │   │   ├── test_source_fresher_state.py
│   │   │   ├── test_source_freshness.py
│   │   │   └── test_source_loaded_at_field.py
│   │   ├── statements/
│   │   │   ├── fixtures.py
│   │   │   └── test_statements.py
│   │   ├── test_empty.py
│   │   ├── test_project.py
│   │   ├── test_selection/
│   │   │   ├── fixtures.py
│   │   │   └── test_selection_expansion.py
│   │   ├── test_singular_tests.py
│   │   ├── threading/
│   │   │   └── test_thread_count.py
│   │   ├── time_spines/
│   │   │   ├── fixtures.py
│   │   │   └── test_time_spines.py
│   │   ├── timezones/
│   │   │   └── test_timezones.py
│   │   ├── unit_testing/
│   │   │   ├── fixtures.py
│   │   │   ├── test_csv_fixtures.py
│   │   │   ├── test_sql_format.py
│   │   │   ├── test_state.py
│   │   │   ├── test_unit_testing.py
│   │   │   ├── test_ut_adapter_hooks.py
│   │   │   ├── test_ut_aliases.py
│   │   │   ├── test_ut_dependency.py
│   │   │   ├── test_ut_diffing.py
│   │   │   ├── test_ut_ephemeral.py
│   │   │   ├── test_ut_list.py
│   │   │   ├── test_ut_macros.py
│   │   │   ├── test_ut_names.py
│   │   │   ├── test_ut_overrides.py
│   │   │   ├── test_ut_resource_types.py
│   │   │   ├── test_ut_snapshot_dependency.py
│   │   │   ├── test_ut_sources.py
│   │   │   ├── test_ut_variables.py
│   │   │   └── test_ut_versions.py
│   │   └── utils.py
│   └── unit/
│       ├── README.md
│       ├── __init__.py
│       ├── artifacts/
│       │   ├── test_base_resource.py
│       │   └── test_run_execution_result.py
│       ├── cli/
│       │   ├── test_flags.py
│       │   ├── test_main.py
│       │   └── test_option_types.py
│       ├── clients/
│       │   ├── __init__.py
│       │   ├── test_jinja.py
│       │   ├── test_jinja_static.py
│       │   ├── test_registry.py
│       │   └── test_yaml_helper.py
│       ├── config/
│       │   ├── __init__.py
│       │   ├── test_profile.py
│       │   ├── test_project.py
│       │   ├── test_renderer_with_vars.py
│       │   ├── test_runtime.py
│       │   ├── test_selectors.py
│       │   ├── test_utils.py
│       │   └── test_vars_file.py
│       ├── conftest.py
│       ├── context/
│       │   ├── __init__.py
│       │   ├── test_base.py
│       │   ├── test_context.py
│       │   ├── test_macro_resolver.py
│       │   ├── test_providers.py
│       │   └── test_query_header.py
│       ├── contracts/
│       │   ├── __init__.py
│       │   ├── files/
│       │   │   └── test_schema_source_file.py
│       │   ├── graph/
│       │   │   ├── __init__.py
│       │   │   ├── test_manifest.py
│       │   │   ├── test_node_args.py
│       │   │   ├── test_nodes.py
│       │   │   ├── test_nodes_parsed.py
│       │   │   ├── test_semantic_manifest.py
│       │   │   ├── test_udfs.py
│       │   │   └── test_unparsed.py
│       │   └── test_project.py
│       ├── deps/
│       │   ├── __init__.py
│       │   └── test_deps.py
│       ├── event_time/
│       │   ├── test_event_time.py
│       │   └── test_sample_mode.py
│       ├── events/
│       │   ├── __init__.py
│       │   ├── test_logging.py
│       │   └── test_types.py
│       ├── fixtures.py
│       ├── graph/
│       │   ├── __init__.py
│       │   ├── test_cli.py
│       │   ├── test_graph.py
│       │   ├── test_nodes.py
│       │   ├── test_queue.py
│       │   ├── test_selector.py
│       │   ├── test_selector_methods.py
│       │   └── test_selector_spec.py
│       ├── materializations/
│       │   └── incremental/
│       │       └── test_microbatch.py
│       ├── mock_adapter.py
│       ├── parser/
│       │   ├── __init__.py
│       │   ├── test_docs.py
│       │   ├── test_get_doc_blocks.py
│       │   ├── test_manifest.py
│       │   ├── test_parser.py
│       │   ├── test_partial.py
│       │   ├── test_read_files.py
│       │   ├── test_schema_renderer.py
│       │   ├── test_sources.py
│       │   ├── test_unit_tests.py
│       │   └── test_v2_column_semantic_parsing.py
│       ├── plugins/
│       │   └── test_manager.py
│       ├── task/
│       │   ├── __init__.py
│       │   ├── docs/
│       │   │   ├── __init__.py
│       │   │   └── test_serve.py
│       │   ├── test_base.py
│       │   ├── test_build.py
│       │   ├── test_clone.py
│       │   ├── test_docs.py
│       │   ├── test_freshness.py
│       │   ├── test_list.py
│       │   ├── test_retry.py
│       │   ├── test_run.py
│       │   └── test_test.py
│       ├── test_artifact_upload.py
│       ├── test_behavior_flags.py
│       ├── test_compilation.py
│       ├── test_compilation_threading.py
│       ├── test_deprecations.py
│       ├── test_env_vars.py
│       ├── test_events.py
│       ├── test_functions.py
│       ├── test_graph_selection.py
│       ├── test_internal_deprecations.py
│       ├── test_invocation_id.py
│       ├── test_jsonschemas.py
│       ├── test_macro_types.py
│       ├── test_node_types.py
│       ├── test_semantic_layer_nodes_satisfy_protocols.py
│       ├── test_tracking.py
│       ├── test_utils.py
│       ├── test_version.py
│       └── utils/
│           ├── __init__.py
│           ├── adapter.py
│           ├── config.py
│           ├── event_manager.py
│           ├── flags.py
│           ├── manifest.py
│           └── project.py
└── third-party-stubs/
    ├── agate/
    │   ├── __init__.pyi
    │   └── data_types.pyi
    ├── cdecimal/
    │   └── __init__.pyi
    ├── daff/
    │   └── __init__.pyi
    ├── mashumaro/
    │   ├── __init__.pyi
    │   ├── config.pyi
    │   ├── core/
    │   │   ├── __init__.pyi
    │   │   ├── const.pyi
    │   │   ├── helpers.pyi
    │   │   └── meta/
    │   │       ├── __init__.pyi
    │   │       ├── code/
    │   │       │   ├── __init__.pyi
    │   │       │   ├── builder.pyi
    │   │       │   └── lines.pyi
    │   │       ├── helpers.pyi
    │   │       ├── mixin.pyi
    │   │       └── types/
    │   │           ├── __init__.pyi
    │   │           ├── common.pyi
    │   │           ├── pack.pyi
    │   │           └── unpack.pyi
    │   ├── dialect.pyi
    │   ├── exceptions.pyi
    │   ├── helper.pyi
    │   ├── jsonschema/
    │   │   ├── __init__.pyi
    │   │   ├── annotations.pyi
    │   │   ├── builder.pyi
    │   │   ├── dialects.pyi
    │   │   ├── models.pyi
    │   │   └── schema.pyi
    │   ├── mixins/
    │   │   ├── __init__.pyi
    │   │   ├── dict.pyi
    │   │   ├── json.pyi
    │   │   ├── msgpack.pyi
    │   │   ├── orjson.pyi
    │   │   ├── toml.pyi
    │   │   └── yaml.pyi
    │   └── types.pyi
    ├── msgpack/
    │   ├── __init__.pyi
    │   ├── _version.pyi
    │   ├── exceptions.pyi
    │   ├── ext.pyi
    │   └── fallback.pyi
    ├── snowplow_tracker/
    │   └── __init__.pyi
    └── sqlparse/
        ├── __init__.pyi
        ├── sql.pyi
        └── tokens.pyi

================================================
FILE CONTENTS
================================================

================================================
FILE: .changes/0.0.0.md
================================================
## Previous Releases

For information on prior major and minor releases, see their changelogs:


* [1.10](https://github.com/dbt-labs/dbt-core/blob/1.10.latest/CHANGELOG.md)
* [1.9](https://github.com/dbt-labs/dbt-core/blob/1.9.latest/CHANGELOG.md)
* [1.8](https://github.com/dbt-labs/dbt-core/blob/1.8.latest/CHANGELOG.md)
* [1.7](https://github.com/dbt-labs/dbt-core/blob/1.7.latest/CHANGELOG.md)
* [1.6](https://github.com/dbt-labs/dbt-core/blob/1.6.latest/CHANGELOG.md)
* [1.5](https://github.com/dbt-labs/dbt-core/blob/1.5.latest/CHANGELOG.md)
* [1.4](https://github.com/dbt-labs/dbt-core/blob/1.4.latest/CHANGELOG.md)
* [1.3](https://github.com/dbt-labs/dbt-core/blob/1.3.latest/CHANGELOG.md)
* [1.2](https://github.com/dbt-labs/dbt-core/blob/1.2.latest/CHANGELOG.md)
* [1.1](https://github.com/dbt-labs/dbt-core/blob/1.1.latest/CHANGELOG.md)
* [1.0](https://github.com/dbt-labs/dbt-core/blob/1.0.latest/CHANGELOG.md)
* [0.21](https://github.com/dbt-labs/dbt-core/blob/0.21.latest/CHANGELOG.md)
* [0.20](https://github.com/dbt-labs/dbt-core/blob/0.20.latest/CHANGELOG.md)
* [0.19](https://github.com/dbt-labs/dbt-core/blob/0.19.latest/CHANGELOG.md)
* [0.18](https://github.com/dbt-labs/dbt-core/blob/0.18.latest/CHANGELOG.md)
* [0.17](https://github.com/dbt-labs/dbt-core/blob/0.17.latest/CHANGELOG.md)
* [0.16](https://github.com/dbt-labs/dbt-core/blob/0.16.latest/CHANGELOG.md)
* [0.15](https://github.com/dbt-labs/dbt-core/blob/0.15.latest/CHANGELOG.md)
* [0.14](https://github.com/dbt-labs/dbt-core/blob/0.14.latest/CHANGELOG.md)
* [0.13](https://github.com/dbt-labs/dbt-core/blob/0.13.latest/CHANGELOG.md)
* [0.12](https://github.com/dbt-labs/dbt-core/blob/0.12.latest/CHANGELOG.md)
* [0.11 and earlier](https://github.com/dbt-labs/dbt-core/blob/0.11.latest/CHANGELOG.md)


================================================
FILE: .changes/README.md
================================================
# CHANGELOG Automation

We use [changie](https://changie.dev/) to automate `CHANGELOG` generation.  For installation and format/command specifics, see the documentation.

### Quick Tour

- All new change entries get generated under `/.changes/unreleased` as a yaml file
- `header.tpl.md` contains the contents of the entire CHANGELOG file
- `0.0.0.md` contains the contents of the footer for the entire CHANGELOG file.  changie looks to be in the process of supporting a footer file the same as it supports a header file.  Switch to that when available.  For now, the 0.0.0 in the file name forces it to the bottom of the changelog no matter what version we are releasing.
- `.changie.yaml` contains the fields in a change, the format of a single change, as well as the format of the Contributors section for each version.

### Workflow

#### Daily workflow
Almost every code change we make associated with an issue will require a `CHANGELOG` entry.  After you have created the PR in GitHub, run `changie new` and follow the command prompts to generate a yaml file with your change details.  This only needs to be done once per PR.

The `changie new` command will ensure correct file format and file name.  There is a one to one mapping of issues to changes.  Multiple issues cannot be lumped into a single entry. If you make a mistake, the yaml file may be directly modified and saved as long as the format is preserved.

Note: If your PR has been cleared by the Core Team as not needing a changelog entry, the `Skip Changelog` label may be put on the PR to bypass the GitHub action that blacks PRs from being merged when they are missing a `CHANGELOG` entry.

#### Prerelease Workflow
These commands batch up changes in `/.changes/unreleased` to be included in this prerelease and move those files to a directory named for the release version.  The `--move-dir` will be created if it does not exist and is created in `/.changes`.

```
changie batch <version>  --move-dir '<version>' --prerelease 'rc1'
changie merge
```

Example
```
changie batch 1.0.5  --move-dir '1.0.5' --prerelease 'rc1'
changie merge
```

#### Final Release Workflow
These commands batch up changes in `/.changes/unreleased` as well as `/.changes/<version>` to be included in this final release and delete all prereleases.  This rolls all prereleases up into a single final release.  All `yaml` files in `/unreleased` and `<version>` will be deleted at this point.

```
changie batch <version>  --include '<version>' --remove-prereleases
changie merge
```

Example
```
changie batch 1.0.5  --include '1.0.5' --remove-prereleases
changie merge
```

### A Note on Manual Edits & Gotchas
- Changie generates markdown files in the `.changes` directory that are parsed together with the `changie merge` command.  Every time `changie merge` is run, it regenerates the entire file.  For this reason, any changes made directly to `CHANGELOG.md` will be overwritten on the next run of `changie merge`.
- If changes need to be made to the `CHANGELOG.md`, make the changes to the relevant `<version>.md` file located in the `/.changes` directory.  You will then run `changie merge` to regenerate the `CHANGELOG.MD`.
- Do not run `changie batch` again on released versions.  Our final release workflow deletes all of the yaml files associated with individual changes.  If for some reason modifications to the `CHANGELOG.md` are required after we've generated the final release `CHANGELOG.md`, the modifications need to be done manually to the `<version>.md` file in the `/.changes` directory.
- changie can modify, create and delete files depending on the command you run.  This is expected.  Be sure to commit everything that has been modified and deleted.


================================================
FILE: .changes/header.tpl.md
================================================
# dbt Core Changelog

- This file provides a full account of all changes to `dbt-core`
- Changes are listed under the (pre)release in which they first appear. Subsequent releases include changes from previous releases.
- "Breaking changes" listed under a version may require action from end users or external maintainers when upgrading to that version.
- Do not edit this file directly. This file is auto-generated using [changie](https://github.com/miniscruff/changie). For details on how to document a change, see [the contributing guide](https://github.com/dbt-labs/dbt-core/blob/main/CONTRIBUTING.md#adding-changelog-entry)


================================================
FILE: .changes/unreleased/.gitkeep
================================================


================================================
FILE: .changes/unreleased/Dependencies-20251118-155354.yaml
================================================
kind: Dependencies
body: Use EventCatcher from dbt-common instead of maintaining a local copy
time: 2025-11-18T15:53:54.284561+05:30
custom:
    Author: 3loka
    Issue: "12124"


================================================
FILE: .changes/unreleased/Dependencies-20251217-151349.yaml
================================================
kind: Dependencies
body: Upgrading dbt-semantic-interfaces to 0.10.x
time: 2025-12-17T15:13:49.721737-05:00
custom:
    Author: WilliamDee
    Issue: None


================================================
FILE: .changes/unreleased/Dependencies-20251219-153804.yaml
================================================
kind: Dependencies
body: Bump minimum click to 8.2.0
time: 2025-12-19T15:38:04.785842-06:00
custom:
  Author: QMalcolm
  Issue: "12305"


================================================
FILE: .changes/unreleased/Dependencies-20260113-135442.yaml
================================================
kind: Dependencies
body: Bump DSI minimum to 0.10.2
time: 2026-01-13T13:54:42.340193-06:00
custom:
  Author: QMalcolm
  Issue: NA


================================================
FILE: .changes/unreleased/Dependencies-20260113-143057.yaml
================================================
kind: Dependencies
body: Bump dbt-protos minimum to 1.0.418
time: 2026-01-13T14:30:57.311017-06:00
custom:
  Author: QMalcolm
  Issue: NA


================================================
FILE: .changes/unreleased/Dependencies-20260121-171712.yaml
================================================
kind: Dependencies
body: Move `click` minimum to 8.3.0
time: 2026-01-21T17:17:12.251254-06:00
custom:
  Author: QMalcolm
  Issue: "12378"


================================================
FILE: .changes/unreleased/Dependencies-20260302-130425.yaml
================================================
kind: Dependencies
body: Bump minimum version of dbt-common to 1.37.3
time: 2026-03-02T13:04:25.495699-05:00
custom:
  Author: emmyoop
  Issue: "12575"


================================================
FILE: .changes/unreleased/Docs-20240311-140344.yaml
================================================
kind: Docs
body: Enable display of unit tests
time: 2024-03-11T14:03:44.490834-04:00
custom:
  Author: gshank
  Issue: "501"


================================================
FILE: .changes/unreleased/Docs-20240501-021050.yaml
================================================
kind: Docs
body: Unit tests not rendering
time: 2024-05-01T02:10:50.987412+02:00
custom:
  Author: aranke
  Issue: "506"


================================================
FILE: .changes/unreleased/Docs-20240516-223036.yaml
================================================
kind: Docs
body: Add support for Saved Query node
time: 2024-05-16T22:30:36.206492-07:00
custom:
  Author: ChenyuLInx
  Issue: "486"


================================================
FILE: .changes/unreleased/Docs-20240613-151048.yaml
================================================
kind: Docs
body: Fix npm security vulnerabilities as of June 2024
time: 2024-06-13T15:10:48.301989+01:00
custom:
    Author: aranke
    Issue: "513"


================================================
FILE: .changes/unreleased/Docs-20250728-162542.yaml
================================================
kind: Docs
body: Bump form-data from 3.0.1 to 3.0.4
time: 2025-07-28T16:25:42.452808-04:00
custom:
    Author: michelleark
    Issue: "554"


================================================
FILE: .changes/unreleased/Docs-20260319-112630.yaml
================================================
kind: Docs
body: Add support for UDF (function) resource type in lineage graph
time: 2026-03-19T11:26:30.338385+05:30
custom:
    Author: aahel
    Issue: "574"


================================================
FILE: .changes/unreleased/Features-20251006-140352.yaml
================================================
kind: Features
body: Support partial parsing for function nodes
time: 2025-10-06T14:03:52.258104-05:00
custom:
  Author: QMalcolm
  Issue: "12072"


================================================
FILE: .changes/unreleased/Features-20251111-103504.yaml
================================================
kind: Features
body: Add UnparsedMetricV2 to read in new-style YAML Semantic Layer Metrics.
time: 2025-11-11T10:35:04.123144-08:00
custom:
    Author: theyostalservice
    Issue: "12157"


================================================
FILE: .changes/unreleased/Features-20251117-141053.yaml
================================================
kind: Features
body: Allow for defining funciton arguments with default values
time: 2025-11-17T14:10:53.860178-06:00
custom:
  Author: QMalcolm
  Issue: "12044"


================================================
FILE: .changes/unreleased/Features-20251201-165209.yaml
================================================
kind: Features
body: Raise jsonschema-based deprecation warnings by default
time: 2025-12-01T16:52:09.354436-05:00
custom:
    Author: michelleark
    Issue: 12240


================================================
FILE: .changes/unreleased/Features-20251203-122926.yaml
================================================
kind: Features
body: ':bug: :snowman: Disable unit tests whose model is disabled'
time: 2025-12-03T12:29:26.209248-05:00
custom:
    Author: michelleark
    Issue: "10540"


================================================
FILE: .changes/unreleased/Features-20251210-202001.yaml
================================================
kind: Features
body: Implement config.meta_get and config.meta_require
time: 2025-12-10T20:20:01.354288-05:00
custom:
    Author: gshank
    Issue: "12012"


================================================
FILE: .changes/unreleased/Features-20260115-131115.yaml
================================================
kind: Features
body: Deprecate null return values from generate_schema_name macro, behind require_valid_schema_from_generate_schema_name flag
time: 2026-01-15T13:11:15.787477-05:00
custom:
    Author: michelleark
    Issue: "12347"


================================================
FILE: .changes/unreleased/Features-20260119-210143.yaml
================================================
kind: Features
body: Add ability to indicate dbt Model also represents a Semantic Model. (Not fully supported yet.)
time: 2026-01-19T21:01:43.917805-08:00
custom:
    Author: theyostalservice
    Issue: .


================================================
FILE: .changes/unreleased/Features-20260123-173805.yaml
================================================
kind: Features
body: Added ability to parse semantic layer dimensions added to columns as part of new YAML. (Not ready for use until more of the new yaml is implemented.)
time: 2026-01-23T17:38:05.847998-08:00
custom:
    Author: theyostalservice
    Issue: .


================================================
FILE: .changes/unreleased/Features-20260126-164458.yaml
================================================
kind: Features
body: Add parsing for new YAML for semantic layer entities attached to dbt models.
time: 2026-01-26T16:44:58.041234-08:00
custom:
    Author: theyostalservice
    Issue: "12395"


================================================
FILE: .changes/unreleased/Features-20260127-114149.yaml
================================================
kind: Features
body: Process semantic metrics in v2 YAML if they are not merged into a model.
time: 2026-01-27T11:41:49.912438-08:00
custom:
    Author: theyostalservice
    Issue: "12161"


================================================
FILE: .changes/unreleased/Features-20260127-214617.yaml
================================================
kind: Features
body: Add parsing for v2 metrics on models and finish implementing their dependency behaviors.
time: 2026-01-27T21:46:17.985044-08:00
custom:
    Author: theyostalservice
    Issue: "12397"


================================================
FILE: .changes/unreleased/Features-20260128-125727.yaml
================================================
kind: Features
body: Add the ability to process derived semantic entities to dbt models, as required by new YAML schema.
time: 2026-01-28T12:57:27.576354-08:00
custom:
    Author: theyostalservice
    Issue: "12401"


================================================
FILE: .changes/unreleased/Features-20260128-172052.yaml
================================================
kind: Features
body: Enable parsing derived dimensions for v2 semantic layer YAML.
time: 2026-01-28T17:20:52.400188-08:00
custom:
    Author: theyostalservice
    Issue: "12404"


================================================
FILE: .changes/unreleased/Features-20260129-110711.yaml
================================================
kind: Features
body: Add unit tests to the Jinja `graph` object, enabling tools like dbt-project-evaluator to run checks on unit tests.
time: 2026-01-29T11:00:00.000000-08:00
custom:
    Author: b-per
    Issue: "12033"


================================================
FILE: .changes/unreleased/Features-20260129-114832.yaml
================================================
kind: Features
body: Implement agg_time_dimension for new semantic YAML.
time: 2026-01-29T11:48:32.100015-08:00
custom:
    Author: theyostalservice
    Issue: "12410"


================================================
FILE: .changes/unreleased/Features-20260129-175432.yaml
================================================
kind: Features
body: Implement parsing of semantic model object-style configuration in v2 semantic YAML.
time: 2026-01-29T17:54:32.188082-08:00
custom:
    Author: theyostalservice
    Issue: "12413"


================================================
FILE: .changes/unreleased/Features-20260129-185659.yaml
================================================
kind: Features
body: Implement primary_entity field for semantic models in semantic YAML v2.
time: 2026-01-29T18:56:59.184109-08:00
custom:
    Author: theyostalservice
    Issue: "12414"


================================================
FILE: .changes/unreleased/Features-20260205-105228.yaml
================================================
kind: Features
body: add config.meta_get to python model parsing
time: 2026-02-05T10:52:28.269954-08:00
custom:
    Author: venkaa28
    Issue: "12458"


================================================
FILE: .changes/unreleased/Features-20260212-232728.yaml
================================================
kind: Features
body: Added support for vars.yml to declare project variables
time: 2026-02-12T23:27:28.294557+05:30
custom:
    Author: sriramr98
    Issue: 11144 2955


================================================
FILE: .changes/unreleased/Features-20260219-133321.yaml
================================================
kind: Features
body: execute dbt debug logic after creating a new project in dbt init
time: 2026-02-19T13:33:21.891997+05:30
custom:
    Author: sriramr98
    Issue: "12510"


================================================
FILE: .changes/unreleased/Features-20260302-123311.yaml
================================================
kind: Features
body: Write compiled SQL for snapshots to target/compiled/ during dbt compile
time: 2026-03-02T12:33:11.456829+05:30
custom:
    Author: aahel
    Issue: "7867"


================================================
FILE: .changes/unreleased/Features-20260303-214328.yaml
================================================
kind: Features
body: Add "selector" selector method
time: 2026-03-03T21:43:28.02659+05:30
custom:
    Author: ash2shukla
    Issue: "5009"


================================================
FILE: .changes/unreleased/Features-9041.yaml
================================================
kind: Features
body: Add directory change instruction after dbt init
time: 2025-11-20T00:00:00Z
custom:
  Author: kalluripradeep
  Issue: "9041"


================================================
FILE: .changes/unreleased/Fixes-20250922-151726.yaml
================================================
kind: Fixes
body: Address Click 8.2+ deprecation warning
time: 2025-09-22T15:17:26.983151-06:00
custom:
    Author: edgarrmondragon
    Issue: "12038"


================================================
FILE: .changes/unreleased/Fixes-20251117-140649.yaml
================================================
kind: Fixes
body: Include macros in unit test parsing
time: 2025-11-17T14:06:49.518566-05:00
custom:
    Author: michelleark nathanskone
    Issue: "10157"


================================================
FILE: .changes/unreleased/Fixes-20251117-185025.yaml
================================================
kind: Fixes
body: Allow dbt deps to run when vars lack defaults in dbt_project.yml
time: 2025-11-17T18:50:25.759091+05:30
custom:
    Author: 3loka
    Issue: "8913"


================================================
FILE: .changes/unreleased/Fixes-20251118-171106.yaml
================================================
kind: Fixes
body: Restore DuplicateResourceNameError for intra-project node name duplication, behind behavior flag `require_unique_project_resource_names`
time: 2025-11-18T17:11:06.454784-05:00
custom:
    Author: michelleark
    Issue: "12152"


================================================
FILE: .changes/unreleased/Fixes-20251119-195034.yaml
================================================
kind: Fixes
body: Allow the usage of `function` with `--exclude-resource-type` flag
time: 2025-11-19T19:50:34.703236-06:00
custom:
  Author: QMalcolm
  Issue: "12143"


================================================
FILE: .changes/unreleased/Fixes-20251124-155629.yaml
================================================
kind: Fixes
body: Fix bug where schemas of functions weren't guaranteed to exist
time: 2025-11-24T15:56:29.467004-06:00
custom:
  Author: QMalcolm
  Issue: "12142"


================================================
FILE: .changes/unreleased/Fixes-20251124-155756.yaml
================================================
kind: Fixes
body: Fix generation of deprecations summary
time: 2025-11-24T15:57:56.544123-08:00
custom:
    Author: asiunov
    Issue: "12146"


================================================
FILE: .changes/unreleased/Fixes-20251124-170855.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Correctly reference foreign key references when --defer and --state provided'
time: 2025-11-24T17:08:55.387946-05:00
custom:
    Author: michellark
    Issue: "11885"


================================================
FILE: .changes/unreleased/Fixes-20251125-120246.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Add exception when using --state and referring to a removed
  test'
time: 2025-11-25T12:02:46.635026-05:00
custom:
  Author: emmyoop
  Issue: "10630"


================================================
FILE: .changes/unreleased/Fixes-20251125-122020.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Stop emitting `NoNodesForSelectionCriteria` three times during `build` command'
time: 2025-11-25T12:20:20.132379-06:00
custom:
  Author: QMalcolm
  Issue: "11627"


================================================
FILE: .changes/unreleased/Fixes-20251127-141308.yaml
================================================
kind: Fixes
body: ":bug: :snowman: Fix long Python stack traces appearing when package dependencies have incompatible version requirements"
time: 2025-11-27T14:13:08.082542-05:00
custom:
  Author: emmyoop
  Issue: "12049"


================================================
FILE: .changes/unreleased/Fixes-20251127-145929.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Fixed issue where changing data type size/precision/scale (e.g.,
  varchar(3) to varchar(10)) incorrectly triggered a breaking change error fo'
time: 2025-11-27T14:59:29.256274-05:00
custom:
  Author: emmyoop
  Issue: "11186"


================================================
FILE: .changes/unreleased/Fixes-20251127-170124.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Support unit testing models that depend on sources with the same name'
time: 2025-11-27T17:01:24.193516-05:00
custom:
    Author: michelleark
    Issue: 11975 10433


================================================
FILE: .changes/unreleased/Fixes-20251128-102129.yaml
================================================
kind: Fixes
body: Fix bug in partial parsing when updating a model with a schema file that is referenced by a singular test
time: 2025-11-28T10:21:29.911147Z
custom:
    Author: mattogburke
    Issue: "12223"


================================================
FILE: .changes/unreleased/Fixes-20251128-122838.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Avoid retrying successful run-operation commands'
time: 2025-11-28T12:28:38.546261-05:00
custom:
    Author: michelleark
    Issue: "11850"


================================================
FILE: .changes/unreleased/Fixes-20251128-161937.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Fix `dbt deps --add-package` crash when packages.yml contains `warn-unpinned:
  false`'
time: 2025-11-28T16:19:37.608722-05:00
custom:
  Author: emmyoop
  Issue: "9104"


================================================
FILE: .changes/unreleased/Fixes-20251128-163144.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Improve `dbt deps --add-package` duplicate detection with better
  cross-source matching and word boundaries'
time: 2025-11-28T16:31:44.344099-05:00
custom:
  Author: emmyoop
  Issue: "12239"


================================================
FILE: .changes/unreleased/Fixes-20251202-133705.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Fix false positive deprecation warning of pre/post-hook SQL configs'
time: 2025-12-02T13:37:05.012112-05:00
custom:
    Author: michelleark
    Issue: "12244"


================================================
FILE: .changes/unreleased/Fixes-20251204-094753.yaml
================================================
kind: Fixes
body: ':bug: :snowman: Fix ref resolution within package when duplicate nodes exist, behind require_ref_searches_node_package_before_root behavior change flag'
time: 2025-12-04T09:47:53.349428-08:00
custom:
    Author: michelleark
    Issue: "11351"


================================================
FILE: .changes/unreleased/Fixes-20251209-175031.yaml
================================================
kind: Fixes
body: Ensure recent deprecation warnings include event name in message
time: 2025-12-09T17:50:31.334618-06:00
custom:
  Author: QMalcolm
  Issue: "12264"


================================================
FILE: .changes/unreleased/Fixes-20251210-143935.yaml
================================================
kind: Fixes
body: Improve error message clarity when detecting nodes with space in name
time: 2025-12-10T14:39:35.107841-08:00
custom:
    Author: michelleark
    Issue: "11835"


================================================
FILE: .changes/unreleased/Fixes-20251216-120727.yaml
================================================
kind: Fixes
body: ':bug: :snowman:Propagate exceptions for NodeFinished callbacks in dbtRunner'
time: 2025-12-16T12:07:27.576087-05:00
custom:
    Author: michelleark
    Issue: "11612"


================================================
FILE: .changes/unreleased/Fixes-20251217-002813.yaml
================================================
kind: Fixes
body: Adds omitted return statement to RuntimeConfigObject.meta_require method
time: 2025-12-17T00:28:13.015416197Z
custom:
    Author: mjsqu
    Issue: "12288"


================================================
FILE: .changes/unreleased/Fixes-20251217-105918.yaml
================================================
kind: Fixes
body: Do not raise deprecation warning when encountering dataset or project configs for bigquery
time: 2025-12-17T10:59:18.372968-05:00
custom:
    Author: michelleark
    Issue: "12285"


================================================
FILE: .changes/unreleased/Fixes-20251219-184405.yaml
================================================
kind: Fixes
body: Pin sqlparse <0.5.5 to avoid max tokens issue
time: 2025-12-19T18:44:05.216329-05:00
custom:
    Author: michelleark
    Issue: "12303"


================================================
FILE: .changes/unreleased/Fixes-20260109-141332.yaml
================================================
kind: Fixes
body: Avoid deadlock edgecases of concurret microbatch/batch execution
time: 2026-01-09T14:13:32.777942-06:00
custom:
  Author: QMalcolm
  Issue: "11420"


================================================
FILE: .changes/unreleased/Fixes-20260113-161742.yaml
================================================
kind: Fixes
body: Begin emitting deprecation warnings for DSI produced ValidationFutureError issues
time: 2026-01-13T16:17:42.988355-06:00
custom:
  Author: QMalcolm
  Issue: NA


================================================
FILE: .changes/unreleased/Fixes-20260124-212300.yaml
================================================
kind: Fixes
body: Add @requires.catalogs decorator to compile command to fix REST Catalog-Linked database compilation
time: 2026-01-24T21:23:00.00000Z
custom:
  Author: kalluripradeep
  Issue: "12353"


================================================
FILE: .changes/unreleased/Fixes-20260125-113244.yaml
================================================
kind: Fixes
body: Validate and filter out non-existent columns from seed column types
time: 2026-01-25T11:32:44.5200661+05:30
custom:
    Author: abhishek09827
    Issue: 12379


================================================
FILE: .changes/unreleased/Fixes-20260126-160659.yaml
================================================
kind: Fixes
body: 'Fix false deprecation warning '
time: 2026-01-26T16:06:59.0157-05:00
custom:
    Author: alexaustin007
    Issue: "12327"


================================================
FILE: .changes/unreleased/Fixes-20260202-123453.yaml
================================================
kind: Fixes
body: Return correctly resolved project path when changing dirs
time: 2026-02-02T12:34:53.454501+05:30
custom:
    Author: ash2shukla
    Issue: "9138"


================================================
FILE: .changes/unreleased/Fixes-20260202-153835.yaml
================================================
kind: Fixes
body: Normalize whitespace prior to computing partial parsing checksum when loading model files
time: 2026-02-02T15:38:35.220621-05:00
custom:
    Author: michelleark
    Issue: "12432"


================================================
FILE: .changes/unreleased/Fixes-20260204-184553.yaml
================================================
kind: Fixes
body: Stop raising deprecation warnings for internal python model configs
time: 2026-02-04T18:45:53.094578-06:00
custom:
  Author: QMalcolm
  Issue: "12314"


================================================
FILE: .changes/unreleased/Fixes-20260204-211128.yaml
================================================
kind: Fixes
body: Dont fire config problem event if loaded_at_query is defined for adapters that dont support metadata-based freshness
time: 2026-02-04T21:11:28.218659+05:30
custom:
    Author: ash2shukla
    Issue: "12451"


================================================
FILE: .changes/unreleased/Fixes-20260205-120000.yaml
================================================
kind: Fixes
body: Fix foreign key constraint ref() resolving to deferred relation even when target model is selected for build
time: 2026-02-05T12:00:00.00000Z
custom:
  Author: b-per
  Issue: "12455"


================================================
FILE: .changes/unreleased/Fixes-20260206-204257.yaml
================================================
kind: Fixes
body: Skip raising `CustomKeyInConfigDeprecation` for config key alias in sql
time: 2026-02-06T20:42:57.134627+05:30
custom:
    Author: ash2shukla
    Issue: "12396"


================================================
FILE: .changes/unreleased/Fixes-20260210-154042.yaml
================================================
kind: Fixes
body: Provide user-friendly validations that dimensions with 'validity_params' also have granularities.
time: 2026-02-10T15:40:42.808774-08:00
custom:
    Author: theyostalservice
    Issue: "12473"


================================================
FILE: .changes/unreleased/Fixes-20260216-230817.yaml
================================================
kind: Fixes
body: Use resolved profile and target names to allow partial parsing for default profile and target
time: 2026-02-16T23:08:17.820862+05:30
custom:
    Author: akshatha-code71 ash2shukla
    Issue: "7612"


================================================
FILE: .changes/unreleased/Fixes-20260219-012414.yaml
================================================
kind: Fixes
body: Ensure that all locked packages are installed in packages directory
time: 2026-02-19T01:24:14.439093+05:30
custom:
    Author: ash2shukla
    Issue: 12509


================================================
FILE: .changes/unreleased/Fixes-20260219-131833.yaml
================================================
kind: Fixes
body: Correctly map 'hidden' field of metrics to 'is_private' field in manifests.
time: 2026-02-19T13:18:33.912843-08:00
custom:
    Author: theyostalservice
    Issue: "12518"


================================================
FILE: .changes/unreleased/Fixes-20260219-170000.yaml
================================================
kind: Fixes
body: Set expr to column name for column-based dimensions and entities when the semantic layer name differs from the column name, so MetricFlow queries the correct warehouse column
time: 2026-02-19T17:00:00.000000+00:00
custom:
    Author: b-per
    Issue: "12512"


================================================
FILE: .changes/unreleased/Fixes-20260223-132342.yaml
================================================
kind: Fixes
body: Fix Dimension() jinja in nested metric filters (input_metrics, numerator, denominator) being incorrectly rendered during YAML parsing for v2 semantic layer schema
time: 2026-02-23T13:23:42.353928-08:00
custom:
    Author: theyostalservice
    Issue: 12529


================================================
FILE: .changes/unreleased/Fixes-20260223-161820.yaml
================================================
kind: Fixes
body: Fix dbt retry for microbatch models to use the original invocation time instead of the current time when recomputing batches
time: 2026-02-23T16:18:20.714612+05:30
custom:
    Author: aahel
    Issue: "11423"


================================================
FILE: .changes/unreleased/Fixes-20260224-115546.yaml
================================================
kind: Fixes
body: Fix v2 metric parsing using model name instead of custom semantic_model.name for generated_from, causing conversion metric validation to fail
time: 2026-02-24T11:55:46.515181-08:00
custom:
    Author: theyostalservice
    Issue: "12532"


================================================
FILE: .changes/unreleased/Fixes-20260224-180000.yaml
================================================
kind: Fixes
body: Fix doc() Jinja in derived_semantics dimension and entity descriptions being incorrectly rendered during v2 YAML parsing
time: 2026-02-24T18:00:00.000000-08:00
custom:
    Author: theyostalservice
    Issue: 12535


================================================
FILE: .changes/unreleased/Fixes-20260224-231047.yaml
================================================
kind: Fixes
body: Improve logic for detecting config with missing plus prefix in dbt_project.yml
time: 2026-02-24T23:10:47.240471+05:30
custom:
    Author: ash2shukla
    Issue: "12371"


================================================
FILE: .changes/unreleased/Fixes-20260225-203131.yaml
================================================
kind: Fixes
body: Enable sql_header config for data tests gated behind require_sql_header_in_test_configs behavior change flag.
time: 2026-02-25T20:31:31.854988+05:30
custom:
    Author: aahel
    Issue: "9775"


================================================
FILE: .changes/unreleased/Fixes-20260226-163836.yaml
================================================
kind: Fixes
body: Better error formatting for semantic manifest validation errors
time: 2026-02-26T16:38:36.858458+05:30
custom:
    Author: sriramr98
    Issue: "9849"


================================================
FILE: .changes/unreleased/Fixes-20260227-133424.yaml
================================================
kind: Fixes
body: Allow macros invoked via run-operation to ref() private and protected models
time: 2026-02-27T13:34:24.449177+05:30
custom:
    Author: aahel
    Issue: 8248


================================================
FILE: .changes/unreleased/Fixes-20260227-140009.yaml
================================================
kind: Fixes
body: Better error and warnings logs with [WARNING] / [ERROR] messages prepended to the logs
time: 2026-02-27T14:00:09.850547+05:30
custom:
    Author: sriramr98
    Issue: "9849"


================================================
FILE: .changes/unreleased/Fixes-20260302-000739.yaml
================================================
kind: Fixes
body: Add config and allow meta and docs to exist under it for macros
time: 2026-03-02T00:07:39.088118+05:30
custom:
    Author: ash2shukla
    Issue: 12383 9447


================================================
FILE: .changes/unreleased/Fixes-20260303-114528.yaml
================================================
kind: Fixes
body: '`DBT_ENGINE` prefixed env vars picked up by CLI'
time: 2026-03-03T11:45:28.403687-06:00
custom:
  Author: QMalcolm
  Issue: "12583"


================================================
FILE: .changes/unreleased/Fixes-20260305-133929.yaml
================================================
kind: Fixes
body: Fix duplicate CTE race condition in ephemeral model compilation
time: 2026-03-05T13:39:29.780057-08:00
custom:
  Author: colin-rogers-dbt
  Issue: "12602"


================================================
FILE: .changes/unreleased/Fixes-20260306-034008.yaml
================================================
kind: Fixes
body: Allow deferral for UDFs
time: 2026-03-06T03:40:08.773781+05:30
custom:
    Author: ash2shukla
    Issue: "12080"


================================================
FILE: .changes/unreleased/Fixes-20260306-071359.yaml
================================================
kind: Fixes
body: Update URL and name of behavior change flag for `require_ref_searches_node_package_before_root`
time: 2026-03-06T07:13:59.659401-07:00
custom:
    Author: dbeatty10
    Issue: "12324"


================================================
FILE: .changes/unreleased/Fixes-20260306-192013.yaml
================================================
kind: Fixes
body: Resolve full node description while running udfs for better logging
time: 2026-03-06T19:20:13.395048+05:30
custom:
    Author: ash2shukla
    Issue: "12600"


================================================
FILE: .changes/unreleased/Fixes-20260310-120000.yaml
================================================
kind: Fixes
body: Fix list-type metric filters under models key being incorrectly rendered at parse time, causing 'Dimension is undefined' errors
time: 2026-03-10T12:00:00.000000-08:00
custom:
    Author: theyostalservice
    Issue: "12618"


================================================
FILE: .changes/unreleased/Fixes-20260317-094953.yaml
================================================
kind: Fixes
body: Add @requires.catalogs decorator to test command to fix custom catalog integration support
time: 2026-03-17T09:49:53.183758+01:00
custom:
    Author: rrittsteiger
    Issue: "12662"


================================================
FILE: .changes/unreleased/Fixes-20260318-000000.yaml
================================================
kind: Fixes
body: Fix IndexError when parsing semantic model that references a disabled or missing model
time: 2026-03-18T00:00:00.000000-04:00
custom:
    Author: MichelleArk
    Issue: 12671


================================================
FILE: .changes/unreleased/Fixes-20260318-091800.yaml
================================================
kind: Fixes
body: Support custom ref kwargs in unit tests and generic data tests, behind behavior flag `support_custom_ref_kwargs`
time: 2026-03-18T09:18:00.000000-05:00
custom:
    Author: aahel
    Issue: 12148


================================================
FILE: .changes/unreleased/Fixes-20260318-173426.yaml
================================================
kind: Fixes
body: Fix AttributeError when docs block argument is non-constant
time: 2026-03-18T17:34:26.771797-04:00
custom:
    Author: michelleark
    Issue: "12673"


================================================
FILE: .changes/unreleased/Fixes-20260318-182358.yaml
================================================
kind: Fixes
body: Fix AttributeError when generic test config is non-dictionary
time: 2026-03-18T18:23:58.393692-04:00
custom:
    Author: michelleark
    Issue: "12674"


================================================
FILE: .changes/unreleased/Fixes-20260318-191153.yaml
================================================
kind: Fixes
body: handle jinja2.Undefined in msgpack_encoder
time: 2026-03-18T19:11:53.734654-04:00
custom:
    Author: michelleark
    Issue: "12677"


================================================
FILE: .changes/unreleased/Fixes-20260318-200626.yaml
================================================
kind: Fixes
body: Fix inheritance for defaults.agg_time_dimension in semantic models.
time: 2026-03-18T20:06:26.155408-07:00
custom:
    Author: theyostalservice
    Issue: "12678"


================================================
FILE: .changes/unreleased/Under the Hood-20250929-151159.yaml
================================================
kind: Under the Hood
body: Update schema file order test
time: 2025-09-29T15:11:59.611595-04:00
custom:
    Author: gshank
    Issue: "11869"


================================================
FILE: .changes/unreleased/Under the Hood-20251119-110110.yaml
================================================
kind: Under the Hood
body: Update jsonschemas for schema.yml and dbt_project.yml deprecations
time: 2025-11-19T11:01:10.616676-05:00
custom:
    Author: michelleark
    Issue: "12180"


================================================
FILE: .changes/unreleased/Under the Hood-20251121-140515.yaml
================================================
kind: Under the Hood
body: Replace setuptools and tox with hatch for build, test, and environment management.
time: 2025-11-21T14:05:15.838252-05:00
custom:
  Author: emmyoop
  Issue: "12151"


================================================
FILE: .changes/unreleased/Under the Hood-20251209-131857.yaml
================================================
kind: Under the Hood
body: Add add_catalog_integration call even if we have a pre-existing manifest
time: 2025-12-09T13:18:57.043254-08:00
custom:
  Author: colin-rogers-dbt
  Issue: "12262"


================================================
FILE: .changes/unreleased/Under the Hood-20251215-155046.yaml
================================================
kind: Under the Hood
body: Bump lower bound for dbt-common to 1.37.2
time: 2025-12-15T15:50:46.857793-05:00
custom:
    Author: michelleark
    Issue: "12284"


================================================
FILE: .changes/unreleased/Under the Hood-20260205-200835.yaml
================================================
kind: Under the Hood
body: sync JSON schemas from dbt-fusion
time: 2026-02-05T20:08:35.515361881Z
custom:
    Author: fa-assistant
    Issue: N/A


================================================
FILE: .changes/unreleased/Under the Hood-20260210-151244.yaml
================================================
kind: Under the Hood
body: Handle missing column time granularities during parsing.
time: 2026-02-10T15:12:44.460381-08:00
custom:
    Author: theyostalservice
    Issue: "12472"


================================================
FILE: .changes/unreleased/Under the Hood-20260214-181659.yaml
================================================
kind: Under the Hood
body: sync JSON schemas from dbt-fusion
time: 2026-02-14T18:16:59.71097177Z
custom:
    Author: fa-assistant
    Issue: N/A


================================================
FILE: .changes/unreleased/Under the Hood-20260220-170741.yaml
================================================
kind: Under the Hood
body: sync JSON schemas from dbt-fusion
time: 2026-02-20T17:07:41.802981778Z
custom:
    Author: fa-assistant
    Issue: N/A


================================================
FILE: .changes/unreleased/Under the Hood-20260223-121653.yaml
================================================
kind: Under the Hood
body: Make test case for parsing metric filters slightly more robust.
time: 2026-02-23T12:16:53.395517-08:00
custom:
    Author: theyostalservice
    Issue: "12528"


================================================
FILE: .changes/unreleased/Under the Hood-20260225-092728.yaml
================================================
kind: Under the Hood
body: sync JSON schemas from dbt-fusion
time: 2026-02-25T09:27:28.498892233Z
custom:
    Author: fa-assistant
    Issue: N/A


================================================
FILE: .changes/unreleased/Under the Hood-20260302-101022.yaml
================================================
kind: Under the Hood
body: Unpin sqlparse dependency, and introduce --sqlparse CLI option for configuring sqlparse limits
time: 2026-03-02T10:10:22.254214-05:00
custom:
    Author: michelleark
    Issue: "12329"


================================================
FILE: .changes/unreleased/Under the Hood-20260306-182611.yaml
================================================
kind: Under the Hood
body: sync JSON schemas from dbt-fusion
time: 2026-03-06T18:26:11.89001132Z
custom:
    Author: fa-assistant
    Issue: N/A


================================================
FILE: .changes/unreleased/Under the Hood-20260318-120715.yaml
================================================
kind: Under the Hood
body: 'Update jsonschemas for more accurate deprecation warnings: macro.config should not warn'
time: 2026-03-18T12:07:15.833316-04:00
custom:
    Author: michelleark
    Issue: "12670"


================================================
FILE: .changie.yaml
================================================
changesDir: .changes
unreleasedDir: unreleased
headerPath: header.tpl.md
versionHeaderPath: ""
changelogPath: CHANGELOG.md
versionExt: md
envPrefix: "CHANGIE_"
versionFormat: '## dbt-core {{.Version}} - {{.Time.Format "January 02, 2006"}}'
kindFormat: '### {{.Kind}}'
changeFormat: |-
  {{- $IssueList := list }}
  {{- $changes := splitList " " $.Custom.Issue }}
  {{- range $issueNbr := $changes }}
    {{- $changeLink := "[#nbr](https://github.com/dbt-labs/dbt-core/issues/nbr)" | replace "nbr" $issueNbr }}
    {{- $IssueList = append $IssueList $changeLink  }}
  {{- end -}}
  - {{.Body}} ({{ range $index, $element := $IssueList }}{{if $index}}, {{end}}{{$element}}{{end}})

kinds:
  - label: Breaking Changes
  - label: Features
  - label: Fixes
  - label: Docs
    changeFormat: |-
      {{- $IssueList := list }}
      {{- $changes := splitList " " $.Custom.Issue }}
      {{- range $issueNbr := $changes }}
        {{- $changeLink := "[dbt-docs/#nbr](https://github.com/dbt-labs/dbt-docs/issues/nbr)" | replace "nbr" $issueNbr }}
        {{- $IssueList = append $IssueList $changeLink }}
      {{- end -}}
      - {{.Body}} ({{ range $index, $element := $IssueList }}{{if $index}}, {{end}}{{$element}}{{end}})
  - label: Under the Hood
  - label: Dependencies
  - label: Security

newlines:
  afterChangelogHeader: 1
  afterKind: 1
  afterChangelogVersion: 1
  beforeKind: 1
  endOfVersion: 1

custom:
  - key: Author
    label: GitHub Username(s) (separated by a single space if multiple)
    type: string
    minLength: 3
  - key: Issue
    label: GitHub Issue Number (separated by a single space if multiple)
    type: string
    minLength: 1

footerFormat: |
  {{- $contributorDict := dict }}
  {{- /* ensure we always skip snyk and dependabot */}}
  {{- $bots := list "dependabot[bot]" "snyk-bot"}}
  {{- range $change := .Changes }}
    {{- $authorList := splitList " " $change.Custom.Author }}
    {{- /* loop through all authors for a single changelog */}}
    {{- range $author := $authorList }}
      {{- $authorLower := lower $author }}
      {{- /* we only want to include non-bot contributors */}}
      {{- if not (has $authorLower $bots)}}
        {{- $changeList := splitList " " $change.Custom.Author }}
          {{- $IssueList := list }}
          {{- $changeLink := $change.Kind }}
          {{- $changes := splitList " " $change.Custom.Issue }}
          {{- range $issueNbr := $changes }}
            {{- $changeLink := "[#nbr](https://github.com/dbt-labs/dbt-core/issues/nbr)" | replace "nbr" $issueNbr }}
            {{- $IssueList = append $IssueList $changeLink  }}
          {{- end }}
          {{- /* check if this contributor has other changes associated with them already */}}
          {{- if hasKey $contributorDict $author }}
            {{- $contributionList := get $contributorDict $author }}
            {{- $contributionList = concat $contributionList $IssueList  }}
            {{- $contributorDict := set $contributorDict $author $contributionList }}
          {{- else }}
            {{- $contributionList := $IssueList }}
            {{- $contributorDict := set $contributorDict $author $contributionList }}
          {{- end }}
        {{- end}}
    {{- end}}
  {{- end }}
  {{- /* no indentation here for formatting so the final markdown doesn't have unneeded indentations */}}
  {{- if $contributorDict}}
  ### Contributors
  {{- range $k,$v := $contributorDict }}
  - [@{{$k}}](https://github.com/{{$k}}) ({{ range $index, $element := $v }}{{if $index}}, {{end}}{{$element}}{{end}})
  {{- end }}
  {{- end }}


================================================
FILE: .dockerignore
================================================
*
!docker/requirements/*.txt
!dist


================================================
FILE: .flake8
================================================
[flake8]
select =
    E
    W
    F
ignore =
    W503 # makes Flake8 work like black
    W504
    E203 # makes Flake8 work like black
    E704 # makes Flake8 work like black
    E741
    E501 # long line checking is done in black
per-file-ignores =
    */__init__.py: F401


================================================
FILE: .git-blame-ignore-revs
================================================
# Reformatting dbt-core via black, flake8, mypy, and assorted pre-commit hooks.
43e3fc22c4eae4d3d901faba05e33c40f1f1dc5a


================================================
FILE: .gitattributes
================================================
core/dbt/task/docs/index.html binary
tests/functional/artifacts/data/state/*/manifest.json binary
core/dbt/docs/build/html/searchindex.js binary
core/dbt/docs/build/html/index.html binary
performance/runner/Cargo.lock binary
core/dbt/events/types_pb2.py binary


================================================
FILE: .github/CODEOWNERS
================================================
# This file contains the code owners for the dbt-core repo.
# PRs will be automatically assigned for review to the associated
# team(s) or person(s) that touches any files that are mapped to them.
#
# A statement takes precedence over the statements above it so more general
# assignments are found at the top with specific assignments being lower in
# the ordering (i.e. catch all assignment should be the first item)
#
# Consult GitHub documentation for formatting guidelines:
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#example-of-a-codeowners-file

# As a default for areas with no assignment,
# the core team as a whole will be assigned
*       @dbt-labs/core-team

### ARTIFACTS

/schemas/dbt                    @dbt-labs/cloud-artifacts


================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: 🐞 Bug
description: Report a bug or an issue you've found with dbt
title: "[Bug] <title>"
labels: ["bug", "triage"]
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!
  - type: checkboxes
    attributes:
      label: Is this a new bug in dbt-core?
      description: >
        In other words, is this an error, flaw, failure or fault in our software?

        If this is a bug that broke existing functionality that used to work, please open a regression issue.
        If this is a bug in an adapter plugin, please open an issue in the adapter's repository.
        If this is a bug experienced while using dbt Cloud, please report to [support](mailto:support@getdbt.com).
        If this is a request for help or troubleshooting code in your own dbt project, please join our [dbt Community Slack](https://www.getdbt.com/community/join-the-community/) or open a [Discussion question](https://github.com/dbt-labs/docs.getdbt.com/discussions).

        Please search to see if an issue already exists for the bug you encountered.
      options:
        - label: I believe this is a new bug in dbt-core
          required: true
        - label: I have searched the existing issues, and I could not find an existing issue for this bug
          required: true
  - type: textarea
    attributes:
      label: Current Behavior
      description: A concise description of what you're experiencing.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Expected Behavior
      description: A concise description of what you expected to happen.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Steps To Reproduce
      description: Steps to reproduce the behavior.
      placeholder: |
        1. In this environment...
        2. With this config...
        3. Run '...'
        4. See error...
    validations:
      required: true
  - type: textarea
    id: logs
    attributes:
      label: Relevant log output
      description: |
        If applicable, log output to help explain your problem.
      render: shell
    validations:
      required: false
  - type: textarea
    attributes:
      label: Environment
      description: |
        examples:
          - **OS**: Ubuntu 24.04
          - **Python**: 3.10.12 (`python3 --version`)
          - **dbt-core**: 1.1.1 (`dbt --version`)
      value: |
        - OS:
        - Python:
        - dbt:
      render: markdown
    validations:
      required: false
  - type: dropdown
    id: database
    attributes:
      label: Which database adapter are you using with dbt?
      description: If the bug is specific to the database or adapter, please open the issue in that adapter's repository instead
      multiple: true
      options:
        - postgres
        - redshift
        - snowflake
        - bigquery
        - spark
        - other (mention it in "Additional Context")
    validations:
      required: false
  - type: textarea
    attributes:
      label: Additional Context
      description: |
        Links? References? Anything that will give us more context about the issue you are encountering!

        Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/code-docs.yml
================================================
name: 📄 Code docs
description: Report an issue for markdown files within this repo, such as README, ARCHITECTURE, etc.
title: "[Code docs] <title>"
labels: ["triage"]
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this code docs issue!
  - type: textarea
    attributes:
      label: Please describe the issue and your proposals.
      description: |
        Links? References? Anything that will give us more context about the issue you are encountering!

        Tip: You can attach images by clicking this area to highlight it and then dragging files in.
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Documentation
    url: https://github.com/dbt-labs/docs.getdbt.com/issues/new/choose
    about: Problems and issues with dbt product documentation hosted on docs.getdbt.com. Issues for markdown files within this repo, such as README, should be opened using the "Code docs" template.
  - name: Ask the community for help
    url: https://github.com/dbt-labs/docs.getdbt.com/discussions
    about: Need help troubleshooting? Check out our guide on how to ask
  - name: Contact dbt Cloud support
    url: mailto:support@getdbt.com
    about: Are you using dbt Cloud? Contact our support team for help!
  - name: Participate in Discussions
    url: https://github.com/dbt-labs/dbt-core/discussions
    about: Do you have a Big Idea for dbt? Read open discussions, or start a new one
  - name: Create an issue for adapters
    url: https://github.com/dbt-labs/dbt-adapters/issues/new/choose
    about: Report a bug or request a feature for an adapter


================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: ✨ Feature
description: Propose a straightforward extension of dbt functionality
title: "[Feature] <title>"
labels: ["enhancement", "triage"]
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this feature request!
  - type: checkboxes
    attributes:
      label: Is this your first time submitting a feature request?
      description: >
        We want to make sure that features are distinct and discoverable,
        so that other members of the community can find them and offer their thoughts.

        Issues are the right place to request straightforward extensions of existing dbt functionality.
        For "big ideas" about future capabilities of dbt, we ask that you open a
        [discussion](https://github.com/dbt-labs/dbt-core/discussions) in the "Ideas" category instead.
      options:
        - label: I have read the [expectations for open source contributors](https://docs.getdbt.com/docs/contributing/oss-expectations)
          required: true
        - label: I have searched the existing issues, and I could not find an existing issue for this feature
          required: true
        - label: I am requesting a straightforward extension of existing dbt functionality, rather than a Big Idea better suited to a discussion
          required: true
  - type: textarea
    attributes:
      label: Describe the feature
      description: A clear and concise description of what you want to happen.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Describe alternatives you've considered
      description: |
        A clear and concise description of any alternative solutions or features you've considered.
    validations:
      required: false
  - type: textarea
    attributes:
      label: Who will this benefit?
      description: |
        What kind of use case will this feature be useful for? Please be specific and provide examples, this will help us prioritize properly.
    validations:
      required: false
  - type: input
    attributes:
      label: Are you interested in contributing this feature?
      description: Let us know if you want to write some code, and how we can help.
    validations:
      required: false
  - type: textarea
    attributes:
      label: Anything else?
      description: |
        Links? References? Anything that will give us more context about the feature you are suggesting!
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/implementation-ticket.yml
================================================
name: 🛠️ Implementation
description: This is an implementation ticket intended for use by the maintainers of dbt-core
title: "[<project>] <title>"
labels: ["user docs"]
body:
  - type: markdown
    attributes:
      value: This is an implementation ticket intended for use by the maintainers of dbt-core
  - type: checkboxes
    attributes:
      label: Housekeeping
      description: >
        A couple friendly reminders:
          1. Remove the `user docs` label if the scope of this work does not require changes to https://docs.getdbt.com/docs: no end-user interface (e.g. yml spec, CLI, error messages, etc) or functional changes
          2. Link any blocking issues in the "Blocked on" field under the "Core devs & maintainers" project.
      options:
        - label: I am a maintainer of dbt-core
          required: true
  - type: textarea
    attributes:
      label: Short description
      description: |
        Describe the scope of the ticket, a high-level implementation approach and any tradeoffs to consider
    validations:
      required: true
  - type: textarea
    attributes:
      label: Acceptance criteria
      description: |
        What is the definition of done for this ticket? Include any relevant edge cases and/or test cases
    validations:
      required: true
  - type: textarea
    attributes:
      label: Suggested Tests
      description: |
        Provide scenarios to test.  Link to existing similar tests if appropriate.
      placeholder: |
         1. Test with no version specified in the schema file and use selection logic on a versioned model for a specific version.  Expect pass.
         2. Test with a version specified in the schema file that is no valid.  Expect ParsingError.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Impact to Other Teams
      description: |
        Will this change impact other teams?  Include details of the kinds of changes required (new tests, code changes, related tickets) and _add the relevant `Impact:[team]` label_.
      placeholder: |
        Example: This change impacts `dbt-redshift` because the tests will need to be modified.  The `Impact:[Adapter]` label has been added.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Will backports be required?
      description: |
        Will this change need to be backported to previous versions?  Add details, possible blockers to backporting and _add the relevant backport labels `backport 1.x.latest`_
      placeholder: |
        Example: Backport to 1.6.latest, 1.5.latest and 1.4.latest.  Since 1.4 isn't using click, the backport may be complicated. The `backport 1.6.latest`, `backport 1.5.latest` and `backport 1.4.latest` labels have been added.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Context
      description: |
        Provide the "why", motivation, and alternative approaches considered -- linking to previous refinement issues, spikes and documentation as appropriate
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/regression-report.yml
================================================
name: ☣️ Regression
description: Report a regression you've observed in a newer version of dbt
title: "[Regression] <title>"
labels: ["bug", "regression", "triage"]
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this regression report!
  - type: checkboxes
    attributes:
      label: Is this a regression in a recent version of dbt-core?
      description: >
        A regression is when documented functionality works as expected in an older version of dbt-core,
        and no longer works after upgrading to a newer version of dbt-core
      options:
        - label: I believe this is a regression in dbt-core functionality
          required: true
        - label: I have searched the existing issues, and I could not find an existing issue for this regression
          required: true
  - type: textarea
    attributes:
      label: Current Behavior
      description: A concise description of what you're experiencing.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Expected/Previous Behavior
      description: A concise description of what you expected to happen.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Steps To Reproduce
      description: Steps to reproduce the behavior.
      placeholder: |
        1. In this environment...
        2. With this config...
        3. Run '...'
        4. See error...
    validations:
      required: true
  - type: textarea
    id: logs
    attributes:
      label: Relevant log output
      description: |
        If applicable, log output to help explain your problem.
      render: shell
    validations:
      required: false
  - type: textarea
    attributes:
      label: Environment
      description: |
        examples:
          - **OS**: Ubuntu 24.04
          - **Python**: 3.10.12 (`python3 --version`)
          - **dbt-core (working version)**: 1.1.1 (`dbt --version`)
          - **dbt-core (regression version)**: 1.2.0 (`dbt --version`)
      value: |
        - OS:
        - Python:
        - dbt (working version):
        - dbt (regression version):
      render: markdown
    validations:
      required: true
  - type: dropdown
    id: database
    attributes:
      label: Which database adapter are you using with dbt?
      description: If the regression is specific to the database or adapter, please open the issue in that adapter's repository instead
      multiple: true
      options:
        - postgres
        - redshift
        - snowflake
        - bigquery
        - spark
        - other (mention it in "Additional Context")
    validations:
      required: false
  - type: textarea
    attributes:
      label: Additional Context
      description: |
        Links? References? Anything that will give us more context about the issue you are encountering!

        Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
    validations:
      required: false


================================================
FILE: .github/_README.md
================================================
<!-- GitHub will publish this readme on the main repo page if the name is `README.md` so we've added the leading underscore to prevent this -->
<!-- Do not rename this file `README.md` -->
<!-- See https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes -->

## What are GitHub Actions?

GitHub Actions are used for many different purposes.  We use them to run tests in CI, validate PRs are in an expected state, and automate processes.

- [Overview of GitHub Actions](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions)
- [What's a workflow?](https://docs.github.com/en/actions/using-workflows/about-workflows)
- [GitHub Actions guides](https://docs.github.com/en/actions/guides)

___

## Where do actions and workflows live

We try to maintain actions that are shared across repositories in a single place so that necesary changes can be made in a single place.

[dbt-labs/actions](https://github.com/dbt-labs/actions/) is the central repository of actions and workflows we use across repositories.

GitHub Actions also live locally within a repository.  The workflows can be found at `.github/workflows` from the root of the repository.  These should be specific to that code base.

Note: We are actively moving actions into the central Action repository so there is currently some duplication across repositories.

___

## Basics of Using Actions

### Viewing Output

- View the detailed action output for your PR in the **Checks** tab of the PR.  This only shows the most recent run.  You can also view high level **Checks** output at the bottom on the PR.

- View _all_ action output for a repository from the [**Actions**](https://github.com/dbt-labs/dbt-core/actions) tab.  Workflow results last 1 year.  Artifacts last 90 days, unless specified otherwise in individual workflows.

  This view often shows what seem like duplicates of the same workflow.  This occurs when files are renamed but the workflow name has not changed.  These are in fact _not_ duplicates.

  You can see the branch the workflow runs from in this view.  It is listed in the table between the workflow name and the time/duration of the run.  When blank, the workflow is running in the context of the  `main` branch.

### How to view what workflow file is being referenced from a run

- When viewing the output of a specific workflow run, click the 3 dots at the top right of the display.  There will be an option to `View workflow file`.

### How to manually run a workflow

- If a workflow has the `on: workflow_dispatch` trigger, it can be manually triggered
- From the [**Actions**](https://github.com/dbt-labs/dbt-core/actions) tab, find the workflow you want to run, select it and fill in any inputs requied.  That's it!

### How to re-run jobs

- From the UI you can rerun from failure
- You can retrigger the cla check by commenting on the PR with `@cla-bot check`

___

## General Standards

### Permissions
- By default, workflows have read permissions in the repository for the contents scope only when no permissions are explicitly set.
- It is best practice to always define the permissions explicitly.  This will allow actions to continue to work when the default permissions on the repository are changed.  It also allows explicit grants of the least permissions possible.
- There are a lot of permissions available.  [Read up on them](https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs) if you're unsure what to use.

```yaml
permissions:
  contents: read
  pull-requests: write
```

### Secrets
- When to use a [Personal Access Token (PAT)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) vs the [GITHUB_TOKEN](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) generated for the action?

    The `GITHUB_TOKEN` is used by default.  In most cases it is sufficient for what you need.

    If you expect the workflow to result in a commit to that should retrigger workflows, you will need to use a Personal Access Token for the bot to commit the file. When using the GITHUB_TOKEN, the resulting commit will not trigger another GitHub Actions Workflow run. This is due to limitations set by GitHub. See [the docs](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow) for a more detailed explanation.

    For example, we must use a PAT in our workflow to commit a new changelog yaml file for bot PRs.  Once the file has been committed to the branch, it should retrigger the check to validate that a changelog exists on the PR.  Otherwise, it would stay in a failed state since the check would never retrigger.

### Triggers
You can configure your workflows to run when specific activity on GitHub happens, at a scheduled time, or when an event outside of GitHub occurs.  Read more details in the [GitHub docs](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows).

These triggers are under the `on` key of the workflow and more than one can be listed.

```yaml
on:
  push:
    branches:
      - "main"
      - "*.latest"
      - "releases/*"
  pull_request:
    # catch when the PR is opened with the label or when the label is added
    types: [opened, labeled]
  workflow_dispatch:
```

Some triggers of note that we use:

- `push` - Runs your workflow when you push a commit or tag.
- `pull_request` - Runs your workflow when activity on a pull request in the workflow's repository occurs.  Takes in a list of activity types (opened, labeled, etc) if appropriate.
- `pull_request_target` - Same as `pull_request` but runs in the context of the PR target branch.
- `workflow_call` - used with reusable workflows.  Triggered by another workflow calling it.
- `workflow_dispatch` - Gives the ability to manually trigger a workflow from the GitHub API, GitHub CLI, or GitHub browser interface.


### Basic Formatting
- Add a description of what your workflow does at the top in this format

  ```
  # **what?**
  # Describe what the action does.

  # **why?**
  # Why does this action exist?

  # **when?**
  # How/when will it be triggered?
  ```

- Leave blank lines between steps and jobs

  ```yaml
  jobs:
    dependency_changelog:
      runs-on: ${{ vars.UBUNTU_LATEST }}

      steps:
      - name: Get File Name Timestamp
        id: filename_time
        uses: nanzm/get-time-action@v1.1
        with:
          format: 'YYYYMMDD-HHmmss'

      - name: Get File Content Timestamp
        id: file_content_time
        uses: nanzm/get-time-action@v1.1
        with:
          format: 'YYYY-MM-DDTHH:mm:ss.000000-05:00'

      - name: Generate Filepath
        id: fp
        run: |
          FILEPATH=.changes/unreleased/Dependencies-${{ steps.filename_time.outputs.time }}.yaml
          echo "FILEPATH=$FILEPATH" >> $GITHUB_OUTPUT
  ```

- Print out all variables you will reference as the first step of a job.  This allows for easier debugging.  The first job should log all inputs.  Subsequent jobs should reference outputs of other jobs, if present.

  When possible, generate variables at the top of your workflow in a single place to reference later.  This is not always strictly possible since you may generate a value to be used later mid-workflow.

  Be sure to use quotes around these logs so special characters are not interpreted.

  ```yaml
  job1:
    - name: "[DEBUG] Print Variables"
      run: |
        echo "all variables defined as inputs"
        echo "The last commit sha in the release: ${{ inputs.sha }}"
        echo "The release version number:         ${{ inputs.version_number }}"
        echo "The changelog_path:                 ${{ inputs.changelog_path }}"
        echo "The build_script_path:              ${{ inputs.build_script_path }}"
        echo "The s3_bucket_name:                 ${{ inputs.s3_bucket_name }}"
        echo "The package_test_command:           ${{ inputs.package_test_command }}"

    # collect all the variables that need to be used in subsequent jobs
    - name: Set Variables
      id: variables
      run: |
        echo "important_path='performance/runner/Cargo.toml'" >> $GITHUB_OUTPUT
        echo "release_id=${{github.event.inputs.release_id}}" >> $GITHUB_OUTPUT
        echo "open_prs=${{github.event.inputs.open_prs}}" >> $GITHUB_OUTPUT

  job2:
    needs: [job1]
      - name: "[DEBUG] Print Variables"
      run: |
        echo "all variables defined in job1 > Set Variables > outputs"
        echo "important_path: ${{ needs.job1.outputs.important_path }}"
        echo "release_id:     ${{ needs.job1.outputs.release_id }}"
        echo "open_prs:       ${{ needs.job1.outputs.open_prs }}"
  ```

- When it's not obvious what something does, add a comment!

___

## Tips

### Context
- The [GitHub CLI](https://cli.github.com/) is available in the default runners
- Actions run in your context.  ie, using an action from the marketplace that uses the GITHUB_TOKEN uses the GITHUB_TOKEN generated by your workflow run.

### Runners
- We dynamically set runners based on repository vars.  Admins can view repository vars and reset them.  Current values are the following but are subject to change:
  - `vars.UBUNTU_LATEST` -> `ubuntu-latest`
  - `vars.WINDOWS_LATEST` -> `windows-latest`
  - `vars.MACOS_LATEST` -> `macos-14`

### Actions from the Marketplace
- Don’t use external actions for things that can easily be accomplished manually.
- Always read through what an external action does before using it!  Often an action in the GitHub Actions Marketplace can be replaced with a few lines in bash.  This is much more maintainable (and won’t change under us) and clear as to what’s actually happening.  It also prevents any
- Pin actions _we don't control_ to tags.

### Connecting to AWS
- Authenticate with the aws managed workflow

  ```yaml
  - name: Configure AWS credentials from Test account
    uses: aws-actions/configure-aws-credentials@v2
    with:
      aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
      aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      aws-region: us-east-1
  ```

- Then access with the aws command that comes installed on the action runner machines

  ```yaml
  - name: Copy Artifacts from S3 via CLI
    run: aws s3 cp ${{ env.s3_bucket }} . --recursive
  ```

### Testing

- Depending on what your action does, you may be able to use [`act`](https://github.com/nektos/act) to test the action locally.  Some features of GitHub Actions do not work with `act`, among those are reusable workflows.  If you can't use `act`, you'll have to push your changes up before being able to test.  This can be slow.


================================================
FILE: .github/actions/latest-wrangler/Dockerfile
================================================
FROM python:3-slim AS builder
ADD . /app
WORKDIR /app

# We are installing a dependency here directly into our app source dir
RUN pip install --target=/app requests packaging

# A distroless container image with Python and some basics like SSL certificates
# https://github.com/GoogleContainerTools/distroless
FROM gcr.io/distroless/python3-debian10
COPY --from=builder /app /app
WORKDIR /app
ENV PYTHONPATH /app
CMD ["/app/main.py"]


================================================
FILE: .github/actions/latest-wrangler/README.md
================================================
# Github package 'latest' tag wrangler for containers
## Usage

Plug in the necessary inputs to determine if the container being built should be tagged 'latest; at the package level, for example `dbt-redshift:latest`.

## Inputs
| Input | Description |
| - | - |
| `package` | Name of the GH package to check against |
| `new_version` | Semver of new container |
| `gh_token` | GH token with package read scope|
| `halt_on_missing` | Return non-zero exit code if requested package does not exist. (defaults to false)|


## Outputs
| Output | Description |
| - | - |
| `latest` | Wether or not the new container should be tagged 'latest'|
| `minor_latest` | Wether or not the new container should be tagged major.minor.latest |

## Example workflow
```yaml
name: Ship it!
on:
  workflow_dispatch:
    inputs:
      package:
       description: The package to publish
       required: true
      version_number:
       description: The version number
       required: true

jobs:
  build:
    runs-on: ${{ vars.UBUNTU_LATEST }}
    steps:
    - uses: actions/checkout@v3
    - name: Wrangle latest tag
      id: is_latest
      uses: ./.github/actions/latest-wrangler
      with:
        package: ${{ github.event.inputs.package }}
        new_version: ${{ github.event.inputs.new_version }}
        gh_token: ${{ secrets.GITHUB_TOKEN }}
    - name: Print the results
      run: |
        echo "Is it latest?  Survey says: ${{ steps.is_latest.outputs.latest }} !"
        echo "Is it minor.latest?  Survey says: ${{ steps.is_latest.outputs.minor_latest }} !"
```


================================================
FILE: .github/actions/latest-wrangler/action.yml
================================================
name: "GitHub package `latest` tag wrangler for containers"
description: "Determines if the published image should include `latest` tags"

inputs:
  package_name:
    description: "Package being published (i.e. `dbt-core`, `dbt-redshift`, etc.)"
    required: true
  new_version:
    description: "SemVer of the package being published (i.e. 1.7.2, 1.8.0a1, etc.)"
    required: true
  github_token:
    description: "Auth token for GitHub (must have view packages scope)"
    required: true

outputs:
  tags:
    description: "A list of tags to associate with this version"

runs:
  using: "docker"
  image: "Dockerfile"


================================================
FILE: .github/actions/latest-wrangler/examples/example_workflow.yml
================================================
name: Ship it!
on:
  workflow_dispatch:
    inputs:
      package:
        description: The package to publish
        required: true
      version_number:
        description: The version number
        required: true

jobs:
  build:
    runs-on: ${{ vars.UBUNTU_LATEST }}
    steps:
      - uses: actions/checkout@v3
      - name: Wrangle latest tag
        id: is_latest
        uses: ./.github/actions/latest-wrangler
        with:
          package: ${{ github.event.inputs.package }}
          new_version: ${{ github.event.inputs.new_version }}
          gh_token: ${{ secrets.GITHUB_TOKEN }}
      - name: Print the results
        run: |
          echo "Is it latest?  Survey says: ${{ steps.is_latest.outputs.latest }} !"


================================================
FILE: .github/actions/latest-wrangler/examples/example_workflow_dispatch.json
================================================
{
    "inputs": {
      "version_number": "1.0.1",
      "package": "dbt-redshift"
    }
}


================================================
FILE: .github/actions/latest-wrangler/main.py
================================================
import os
import sys
from typing import List

import requests
from packaging.version import Version, parse


def main():
    package_name: str = os.environ["INPUT_PACKAGE_NAME"]
    new_version: Version = parse(os.environ["INPUT_NEW_VERSION"])
    github_token: str = os.environ["INPUT_GITHUB_TOKEN"]

    response = _package_metadata(package_name, github_token)
    published_versions = _published_versions(response)
    new_version_tags = _new_version_tags(new_version, published_versions)
    _register_tags(new_version_tags, package_name)


def _package_metadata(package_name: str, github_token: str) -> requests.Response:
    url = f"https://api.github.com/orgs/dbt-labs/packages/container/{package_name}/versions"
    return requests.get(url, auth=("", github_token))


def _published_versions(response: requests.Response) -> List[Version]:
    package_metadata = response.json()
    return [
        parse(tag)
        for version in package_metadata
        for tag in version["metadata"]["container"]["tags"]
        if "latest" not in tag
    ]


def _new_version_tags(new_version: Version, published_versions: List[Version]) -> List[str]:
    # the package version is always a tag
    tags = [str(new_version)]

    # pre-releases don't get tagged with `latest`
    if new_version.is_prerelease:
        return tags

    if new_version > max(published_versions):
        tags.append("latest")

    published_patches = [
        version
        for version in published_versions
        if version.major == new_version.major and version.minor == new_version.minor
    ]
    if new_version > max(published_patches):
        tags.append(f"{new_version.major}.{new_version.minor}.latest")

    return tags


def _register_tags(tags: List[str], package_name: str) -> None:
    fully_qualified_tags = ",".join([f"ghcr.io/dbt-labs/{package_name}:{tag}" for tag in tags])
    github_output = os.environ.get("GITHUB_OUTPUT")
    with open(github_output, "at", encoding="utf-8") as gh_output:
        gh_output.write(f"fully_qualified_tags={fully_qualified_tags}")


def _validate_response(response: requests.Response) -> None:
    message = response["message"]
    if response.status_code != 200:
        print(f"Call to GitHub API failed: {response.status_code} - {message}")
        sys.exit(1)


if __name__ == "__main__":
    main()


================================================
FILE: .github/actions/setup-postgres-windows/action.yml
================================================
name: "Set up postgres (windows)"
description: "Set up postgres service on windows vm for dbt integration tests"
runs:
  using: "composite"
  steps:
    - shell: pwsh
      run: |
        Write-Host -Object "Installing PostgreSQL 16 as windows service..."
        $installerArgs = @("--install_runtimes 0", "--superpassword root", "--enable_acledit 1", "--unattendedmodeui none", "--mode unattended")
        $filePath = Invoke-DownloadWithRetry -Url "https://get.enterprisedb.com/postgresql/postgresql-16.1-1-windows-x64.exe" -Path "$env:PGROOT/postgresql-16.1-1-windows-x64.exe"
        Start-Process -FilePath $filePath -ArgumentList $installerArgs -Wait -PassThru

        Write-Host -Object "Validating PostgreSQL 16 Install..."
        Get-Service -Name postgresql*
        $pgReady = Start-Process -FilePath "$env:PGBIN\pg_isready" -Wait -PassThru
        $exitCode = $pgReady.ExitCode
        if ($exitCode -ne 0) {
            Write-Host -Object "PostgreSQL is not ready. Exitcode: $exitCode"
            exit $exitCode
        }

        Write-Host -Object "Starting PostgreSQL 16 Service..."
        $pgService = Get-Service -Name postgresql-x64-16
        Set-Service -InputObject $pgService -Status running -StartupType automatic
        $env:Path += ";$env:PGBIN"
        bash ${{ github.action_path }}/setup_db.sh


================================================
FILE: .github/dbt-postgres-testing.yml
================================================
# **what?**
# Runs all tests in dbt-postgres with this branch of dbt-core to ensure nothing is broken

# **why?**
# Ensure dbt-core changes do not break dbt-postgres, as a basic proxy for other adapters

# **when?**
# This will run when trying to merge a PR into main.
# It can also be manually triggered.

# This workflow can be skipped by adding the "Skip Postgres Testing" label to the PR.  This is
# useful when making a change in both `dbt-postgres` and `dbt-core` where the changes are dependant
# and cause the other repository to break.

name: "dbt-postgres Tests"
run-name: >-
  ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call')
  && format('dbt-postgres@{0} with dbt-core@{1}', inputs.dbt-postgres-ref, inputs.dbt-core-ref)
  || 'dbt-postgres@main with dbt-core branch' }}

on:
  push:
    branches:
      - "main"
      - "*.latest"
      - "releases/*"
  pull_request:
  merge_group:
    types: [checks_requested]
  workflow_dispatch:
    inputs:
      dbt-postgres-ref:
        description: "The branch of dbt-postgres to test against"
        default: "main"
      dbt-core-ref:
        description: "The branch of dbt-core to test against"
        default: "main"
  workflow_call:
    inputs:
      dbt-postgres-ref:
        description: "The branch of dbt-postgres to test against"
        type: string
        required: true
        default: "main"
      dbt-core-ref:
        description: "The branch of dbt-core to test against"
        type: string
        required: true
        default: "main"

permissions: read-all

# will cancel previous workflows triggered by the same event
# and for the same ref for PRs/merges or same SHA otherwise
# and for the same inputs on workflow_dispatch or workflow_call
concurrency:
  group: ${{ github.workflow }}-${{ github.event_name }}-${{ contains(fromJson('["pull_request", "merge_group"]'), github.event_name) && github.event.pull_request.head.ref || github.sha }}-${{ contains(fromJson('["workflow_call", "workflow_dispatch"]'), github.event_name) && github.event.inputs.dbt-postgres-ref && github.event.inputs.dbt-core-ref || github.sha }}
  cancel-in-progress: true

defaults:
  run:
    shell: bash

jobs:
  job-prep:
    # This allow us to run the workflow on pull_requests as well so we can always run unit tests
    # and only run integration tests on merge for time purposes
    name: Setup Repo Refs
    runs-on: ubuntu-latest
    outputs:
      dbt-postgres-ref: ${{ steps.core-ref.outputs.ref }}
      dbt-core-ref: ${{ steps.common-ref.outputs.ref }}

    steps:
      - name: "Input Refs"
        id: job-inputs
        run: |
          echo "inputs.dbt-postgres-ref=${{ inputs.dbt-postgres-ref }}"
          echo "inputs.dbt-core-ref=${{ inputs.dbt-core-ref }}"

      - name: "Determine dbt-postgres ref"
        id: core-ref
        run: |
          if [[ -z "${{ inputs.dbt-postgres-ref }}" ]]; then
            REF="main"
          else
            REF=${{ inputs.dbt-postgres-ref }}
          fi
          echo "ref=$REF" >> $GITHUB_OUTPUT

      - name: "Determine dbt-core ref"
        id: common-ref
        run: |
          if [[ -z "${{ inputs.dbt-core-ref }}" ]]; then
            # these will be commits instead of branches
            if [[ "${{ github.event_name }}" == "merge_group" ]]; then
              REF=${{ github.event.merge_group.head_sha }}
            else
              REF=${{ github.event.pull_request.base.sha }}
            fi
          else
            REF=${{ inputs.dbt-core-ref }}
          fi
          echo "ref=$REF" >> $GITHUB_OUTPUT

      - name: "Final Refs"
        run: |
          echo "dbt-postgres-ref=${{ steps.core-ref.outputs.ref }}"
          echo "dbt-core-ref=${{ steps.common-ref.outputs.ref }}"

  # integration-tests-postgres:
  #   name: "dbt-postgres integration tests"
  #   needs: [job-prep]
  #   runs-on: ubuntu-latest
  #   defaults:
  #     run:
  #       working-directory: "./dbt-postgres"
  #   environment:
  #     name: "dbt-postgres"
  #   env:
  #     POSTGRES_TEST_HOST: ${{ vars.POSTGRES_TEST_HOST }}
  #     POSTGRES_TEST_PORT: ${{ vars.POSTGRES_TEST_PORT }}
  #     POSTGRES_TEST_USER: ${{ vars.POSTGRES_TEST_USER }}
  #     POSTGRES_TEST_PASS: ${{ secrets.POSTGRES_TEST_PASS }}
  #     POSTGRES_TEST_DATABASE: ${{ vars.POSTGRES_TEST_DATABASE }}
  #     POSTGRES_TEST_THREADS: ${{ vars.POSTGRES_TEST_THREADS }}
  #   services:
  #     postgres:
  #         image: postgres
  #         env:
  #           POSTGRES_PASSWORD: postgres
  #         options: >-
  #             --health-cmd pg_isready
  #             --health-interval 10s
  #             --health-timeout 5s
  #             --health-retries 5
  #         ports:
  #           - ${{ vars.POSTGRES_TEST_PORT }}:5432
  #   steps:
  #     - name: "Check out dbt-adapters@${{ needs.job-prep.outputs.dbt-postgres-ref }}"
  #       uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
  #       with:
  #         repository: dbt-labs/dbt-adapters
  #         ref: ${{ needs.job-prep.outputs.dbt-postgres-ref }}

  #     - name: "Set up Python"
  #       uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # actions/setup-python@v5
  #       with:
  #           python-version: ${{ inputs.python-version }}

  #     - name: "Set environment variables"
  #       run: |
  #           echo "HATCH_PYTHON=${{ inputs.python-version }}" >> $GITHUB_ENV
  #           echo "PIP_ONLY_BINARY=psycopg2-binary" >> $GITHUB_ENV

  #     - name: "Setup test database"
  #       run: psql -f ./scripts/setup_test_database.sql
  #       env:
  #           PGHOST: ${{ vars.POSTGRES_TEST_HOST }}
  #           PGPORT: ${{ vars.POSTGRES_TEST_PORT }}
  #           PGUSER: postgres
  #           PGPASSWORD: postgres
  #           PGDATABASE: postgres

  #     - name: "Install hatch"
  #       uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

  #     - name: "Run integration tests"
  #       run: hatch run ${{ inputs.hatch-env }}:integration-tests


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  # python dependencies
  - package-ecosystem: "pip"
    directory: "/"
    schedule:
      interval: "daily"
    rebase-strategy: "disabled"
  - package-ecosystem: "pip"
    directory: "/core"
    schedule:
      interval: "daily"
    rebase-strategy: "disabled"

  # docker dependencies
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "weekly"
    rebase-strategy: "disabled"
  - package-ecosystem: "docker"
    directory: "/docker"
    schedule:
      interval: "weekly"
    rebase-strategy: "disabled"

  # github dependencies
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    rebase-strategy: "disabled"


================================================
FILE: .github/pull_request_template.md
================================================
Resolves #

<!---
  Include the number of the issue addressed by this PR above, if applicable.
  PRs for code changes without an associated issue *will not be merged*.
  See CONTRIBUTING.md for more information.

  Add the `user docs` label to this PR if it will need docs changes.  An 
  issue will get opened in docs.getdbt.com upon successful merge of this PR.
-->

### Problem

<!---
  Describe the problem this PR is solving. What is the application state
  before this PR is merged?
-->

### Solution

<!---
  Describe the way this PR solves the above problem. Add as much detail as you
  can to help reviewers understand your changes. Include any alternatives and
  tradeoffs you considered.
-->

### Checklist

- [ ] I have read [the contributing guide](https://github.com/dbt-labs/dbt-core/blob/main/CONTRIBUTING.md) and understand what's expected of me.
- [ ] I have run this code in development, and it appears to resolve the stated issue.
- [ ] This PR includes tests, or tests are not required or relevant for this PR.
- [ ] This PR has no interface changes (e.g., macros, CLI, logs, JSON artifacts, config files, adapter interface, etc.) or this PR has already received feedback and approval from Product or DX.
- [ ] This PR includes [type annotations](https://docs.python.org/3/library/typing.html) for new and modified functions.


================================================
FILE: .github/workflows/artifact-reviews.yml
================================================
# **what?**
# Enforces 2 reviews when artifact or validation files are modified.

# **why?**
# Ensure artifact changes receive proper review from designated team members.  GitHub doesn't support
# multiple reviews on a single PR based on files changed, so we need to enforce this manually.

# **when?**
# This will run when reviews are submitted and dismissed.

name: "Enforce Additional Reviews on Artifact and Validations Changes"

permissions:
  checks: write
  pull-requests: write
  contents: read

on:
  # trigger check on review events.  use pull_request_target for forks.
  pull_request_target:
    types: [opened, reopened, ready_for_review, synchronize, review_requested]
  pull_request_review:
    types: [submitted, edited, dismissed]

# only run this once per PR at a time
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
  cancel-in-progress: true

env:
    required_approvals: 2
    team: "core-group"

jobs:
  check-reviews:
    name: "Validate Additional Reviews"
    runs-on: ubuntu-latest
    steps:
      - name: "Get list of changed files"
        id: changed_files
        run: |
          # Fetch files as JSON and process with jq to sanitize output
          gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files \
            | jq -r '.[].filename' \
            | while IFS= read -r file; do
              # Sanitize the filename by removing any special characters and command injection attempts
              clean_file=$(echo "$file" | sed 's/[^a-zA-Z0-9\.\/\-_]//g')
              echo "$clean_file"
            done > changed_files.txt
          echo "CHANGED_FILES<<EOF" >> $GITHUB_OUTPUT
          cat changed_files.txt >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: "Check if any artifact files changed"
        id: artifact_files_changed
        run: |
          artifact_changes=false
          while IFS= read -r file; do
            # Only process if file path looks legitimate
            if [[ "$file" =~ ^[a-zA-Z0-9\.\/\-_]+$ ]]; then
              if [[ "$file" == "core/dbt/artifacts/"* ]] ; then
                artifact_changes=true
                break
              fi
            fi
          done < changed_files.txt
          echo "artifact_changes=$artifact_changes" >> $GITHUB_OUTPUT

      - name: "Get Core Team Members"
        if: steps.artifact_files_changed.outputs.artifact_changes == 'true'
        id: core_members
        run: |
          gh api -H "Accept: application/vnd.github+json" \
          /orgs/dbt-labs/teams/${{ env.team }}/members > core_members.json

          # Extract usernames and set as multiline output
          echo "membership<<EOF" >> $GITHUB_OUTPUT
          jq -r '.[].login' core_members.json >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT
        env:
          GH_TOKEN: ${{ secrets.IT_TEAM_MEMBERSHIP }}

      - name: "Verify ${{ env.required_approvals }} core team approvals"
        if: steps.artifact_files_changed.outputs.artifact_changes == 'true'
        id: check_approvals
        run: |

            # Get all reviews
            REVIEWS=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews)
            echo "All reviews:"
            echo "$REVIEWS"
            # Count approved reviews from core team members (only most recent review per user)
            CORE_APPROVALS=0
            while IFS= read -r member; do
              echo "Checking member: $member"
              APPROVED=$(echo "$REVIEWS" | jq --arg user "$member" '
                group_by(.user.login) |
                map(select(.[0].user.login == $user) |
                    sort_by(.submitted_at) |
                    last) |
                map(select(.state == "APPROVED" and (.state != "DISMISSED"))) |
                length')
              echo "Latest review state for $member: $APPROVED"
              CORE_APPROVALS=$((CORE_APPROVALS + APPROVED))
              echo "Running total: $CORE_APPROVALS"
            done <<< "${{ steps.core_members.outputs.membership }}"

            echo "CORE_APPROVALS=$CORE_APPROVALS" >> $GITHUB_OUTPUT
            echo "CORE_APPROVALS=$CORE_APPROVALS"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: "Find Comment"
        if: steps.artifact_files_changed.outputs.artifact_changes == 'true' && steps.check_approvals.outputs.CORE_APPROVALS < env.required_approvals
        uses: peter-evans/find-comment@a54c31d7fa095754bfef525c0c8e5e5674c4b4b1 # peter-evans/find-comment@v2
        id: find-comment
        with:
          issue-number: ${{ github.event.pull_request.number }}
          comment-author: 'github-actions[bot]'
          body-includes: "### Additional Artifact Review Required"

      - name: "Create Comment"
        if: steps.artifact_files_changed.outputs.artifact_changes == 'true' && steps.find-comment.outputs.comment-id == '' && steps.check_approvals.outputs.CORE_APPROVALS < env.required_approvals
        uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # peter-evans/create-or-update-comment@v3
        with:
          issue-number: ${{ github.event.pull_request.number }}
          body: |
            ### Additional Artifact Review Required

            Changes to artifact directory files requires at least ${{ env.required_approvals }} approvals from core team members.

      - name: "Notify if not enough approvals"
        if: steps.artifact_files_changed.outputs.artifact_changes == 'true'
        run: |
          if [[ "${{ steps.check_approvals.outputs.CORE_APPROVALS }}" -ge "${{ env.required_approvals }}" ]]; then
            title="Extra requirements met"
            message="Changes to artifact directory files requires at least ${{ env.required_approvals }} approvals from core team members. Current number of core team approvals: ${{ steps.check_approvals.outputs.CORE_APPROVALS }} "
            echo "::notice title=$title::$message"
            echo "REVIEW_STATUS=success" >> $GITHUB_OUTPUT
          else
            title="PR Approval Requirements Not Met"
            message="Changes to artifact directory files requires at least ${{ env.required_approvals }} approvals from core team members. Current number of core team approvals: ${{ steps.check_approvals.outputs.CORE_APPROVALS }} "
            echo "::notice title=$title::$message"
            echo "REVIEW_STATUS=neutral" >> $GITHUB_OUTPUT
          fi
        id: review_check

      - name: "Set check status"
        id: status_check
        run: |
          if [[ "${{ steps.artifact_files_changed.outputs.artifact_changes }}" == 'false' ]]; then
            # no extra review required
            echo "current_status=success" >> $GITHUB_OUTPUT
          elif [[ "${{ steps.review_check.outputs.REVIEW_STATUS }}" == "success" ]]; then
            # we have all the required reviews
            echo "current_status=success" >> $GITHUB_OUTPUT
          else
            # neutral exit - neither success nor failure
            # we can't fail here because we use multiple triggers for this workflow and they won't reset the check
            # workaround is to use a neutral exit to skip the check run until it's actually successful
            echo "current_status=neutral" >> $GITHUB_OUTPUT
          fi

      - name: "Post Event"
        # This step posts the status of the check because the workflow is triggered by multiple events
        # and we need to ensure the check is always updated.  Otherwise we would end up with duplicate
        # checks in the GitHub UI.
        run: |
          if [[ "${{ steps.status_check.outputs.current_status }}" == "success" ]]; then
            state="success"
          else
            state="failure"
          fi

          gh api \
            --method POST \
            -H "Accept: application/vnd.github+json" \
            /repos/${{ github.repository }}/statuses/${{ github.event.pull_request.base.sha }} \
            -f state="$state" \
            -f description="Artifact Review Check" \
            -f context="Artifact Review Check" \
            -f target_url="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
        env:
          GH_TOKEN: ${{ secrets.FISHTOWN_BOT_PAT }}


================================================
FILE: .github/workflows/auto-respond-bug-reports.yml
================================================
# **what?**
# Check if the an issue is opened near or during an extended holiday period.
# If so, post an automatically-generated comment about the holiday for bug reports.
# Also provide specific information to customers of dbt Cloud.

# **why?**
# Explain why responses will be delayed during our holiday period.

# **when?**
# This will run when new issues are opened.

name: Auto-Respond to Bug Reports During Holiday Period

on:
  issues:
    types:
      - opened

permissions:
  contents: read
  issues: write

jobs:
  auto-response:
    runs-on: ${{ vars.UBUNTU_LATEST }}
    steps:
      - name: Check if current date is within holiday period
        id: date-check
        run: |
          current_date=$(date -u +"%Y-%m-%d")
          start_date="2024-12-23"
          end_date="2025-01-05"

          if [[ "$current_date" < "$start_date" || "$current_date" > "$end_date" ]]; then
            echo "outside_holiday=true" >> $GITHUB_ENV
          else
            echo "outside_holiday=false" >> $GITHUB_ENV
          fi

      - name: Post comment
        if: ${{ env.outside_holiday == 'false' && contains(github.event.issue.labels.*.name, 'bug') }}
        run: |
          gh issue comment ${{ github.event.issue.number }} --repo ${{ github.repository }} --body "Thank you for your bug report! Our team is will be out of the office for [Christmas and our Global Week of Rest](https://handbook.getdbt.com/docs/time_off#2024-us-holidays), from December 25, 2024, through January 3, 2025.

          We will review your issue as soon as possible after returning.
          Thank you for your understanding, and happy holidays! 🎄🎉

          If you are a customer of dbt Cloud, please contact our Customer Support team via the dbt Cloud web interface or email **support@dbtlabs.com**."
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/backport.yml
================================================
# **what?**
# When a PR is merged, if it has the backport label, it will create
# a new PR to backport those changes to the given branch. If it can't
# cleanly do a backport, it will comment on the merged PR of the failure.
#
# Label naming convention: "backport <branch name to backport to>"
# Example: backport 1.0.latest
#
# You MUST "Squash and merge" the original PR or this won't work.

# **why?**
# Changes sometimes need to be backported to release branches.
# This automates the backporting process

# **when?**
# Once a PR is "Squash and merge"'d, by adding a backport label, this is triggered

name: Backport
on:
  pull_request:
    types:
      - labeled

permissions:
  contents: write
  pull-requests: write

jobs:
  backport:
    name: Backport
    runs-on: ${{ vars.UBUNTU_LATEST }}
    # Only react to merged PRs for security reasons.
    # See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target.
    if: >
      github.event.pull_request.merged
      && contains(github.event.label.name, 'backport')
    steps:
      - uses: tibdex/backport@9565281eda0731b1d20c4025c43339fb0a23812e # tibdex/backport@v2.0.4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/bot-changelog.yml
================================================
# **what?**
# When bots create a PR, this action will add a corresponding changie yaml file to that
# PR when a specific label is added.
#
# The file is created off a template:
#
# kind: <per action matrix>
# body: <PR title>
# time: <current timestamp>
# custom:
#   Author: <PR User Login (generally the bot)>
#   Issue: 4904
#   PR: <PR number>
#
# **why?**
# Automate changelog generation for more visability with automated bot PRs.
#
# **when?**
# Once a PR is created, label should be added to PR before or after creation. You can also
#  manually trigger this by adding the appropriate label at any time.
#
# **how to add another bot?**
# Add the label and changie kind to the include matrix.  That's it!
#

name: Bot Changelog

on:
  pull_request:
    # catch when the PR is opened with the label or when the label is added
    types: [labeled]

permissions:
  contents: write
  pull-requests: read

jobs:
  generate_changelog:
    strategy:
      matrix:
        include:
          - label: "dependencies"
            changie_kind: "Dependencies"
    runs-on: ${{ vars.UBUNTU_LATEST }}

    steps:

    - name: Create and commit changelog on bot PR
      if: ${{ contains(github.event.pull_request.labels.*.name, matrix.label) }}
      id: bot_changelog
      uses: emmyoop/changie_bot@22b70618b13d0d1c64ea95212bafca2d2bf6b764 # emmyoop/changie_bot@v1.1.0
      with:
        GITHUB_TOKEN: ${{ secrets.FISHTOWN_BOT_PAT }}
        commit_author_name: "Github Build Bot"
        commit_author_email: "<buildbot@fishtownanalytics.com>"
        commit_message: "Add automated changelog yaml from template for bot PR"
        changie_kind: ${{ matrix.changie_kind }}
        label: ${{ matrix.label }}
        custom_changelog_string: "custom:\n  Author: ${{ github.event.pull_request.user.login }}\n  Issue: ${{ github.event.pull_request.number }}"


================================================
FILE: .github/workflows/changelog-existence.yml
================================================
# **what?**
# Checks that a file has been committed under the /.changes directory
# as a new CHANGELOG entry.  Cannot check for a specific filename as
# it is dynamically generated by change type and timestamp.
# This workflow runs on pull_request_target because it requires
# secrets to post comments.

# **why?**
# Ensure code change gets reflected in the CHANGELOG.

# **when?**
# This will run for all PRs going into main and *.latest.  It will
# run when they are opened, reopened, when any label is added or removed
# and when new code is pushed to the branch.  The action will then get
# skipped if the 'Skip Changelog' label is present is any of the labels.

name: Check Changelog Entry

on:
  pull_request_target:
    types: [opened, reopened, labeled, unlabeled, synchronize]
    paths-ignore: ['.changes/**', '.github/**', 'tests/**', '**.md', '**.yml']

  workflow_dispatch:

defaults:
  run:
    shell: bash

permissions:
  contents: read
  pull-requests: write

jobs:
  changelog:
    uses: dbt-labs/actions/.github/workflows/changelog-existence.yml@main
    with:
      changelog_comment: 'Thank you for your pull request! We could not find a changelog entry for this change. For details on how to document a change, see [the contributing guide](https://github.com/dbt-labs/dbt-core/blob/main/CONTRIBUTING.md#adding-changelog-entry).'
      skip_label: 'Skip Changelog'
    secrets: inherit


================================================
FILE: .github/workflows/check-artifact-changes.yml
================================================
name: Check Artifact Changes

on:
  pull_request:
    types: [ opened, reopened, labeled, unlabeled, synchronize ]
    paths-ignore: [ '.changes/**', '.github/**', 'tests/**', '**.md', '**.yml' ]
  merge_group:
    types: [checks_requested]
  workflow_dispatch:

permissions:
  contents: read

jobs:
  check-artifact-changes:
    runs-on: ${{ vars.UBUNTU_LATEST }}
    if: ${{ !contains(github.event.pull_request.labels.*.name, 'artifact_minor_upgrade') }}
    steps:
      - name: Checkout code
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Check for changes in core/dbt/artifacts
        # https://github.com/marketplace/actions/paths-changes-filter
        uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # dorny/paths-filter@v3
        id: check_artifact_changes
        with:
          filters: |
            artifacts_changed:
              - 'core/dbt/artifacts/**'
          list-files: shell

      - name: Fail CI if artifacts have changed
        if: steps.check_artifact_changes.outputs.artifacts_changed == 'true'
        run: |
          echo "CI failure: Artifact changes checked in core/dbt/artifacts directory."
          echo "Files changed: ${{ steps.check_artifact_changes.outputs.artifacts_changed_files }}"
          echo "To bypass this check, confirm that the change is not breaking (https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/artifacts/README.md#breaking-changes) and add the 'artifact_minor_upgrade' label to the PR. Modifications and additions to all fields require updates to https://github.com/dbt-labs/dbt-jsonschema."
          exit 1

      - name: CI check passed
        if: steps.check_artifact_changes.outputs.artifacts_changed == 'false'
        run: |
          echo "No prohibited artifact changes found in core/dbt/artifacts. CI check passed."


================================================
FILE: .github/workflows/community-label.yml
================================================
# **what?**
# Label a PR with a `community` label when a PR is opened by a user outside core/adapters

# **why?**
# To streamline triage and ensure that community contributions are recognized and prioritized

# **when?**
# When a PR is opened, not in draft or moved from draft to ready for review

name: Label community PRs

on:
  # have to use pull_request_target since community PRs come from forks
  pull_request_target:
    types: [opened, ready_for_review]

defaults:
  run:
    shell: bash

permissions:
    pull-requests: write # labels PRs
    contents: read # reads team membership

jobs:
  open_issues:
    # If this PR already has the community label, no need to relabel it
    # If this PR is opened and not draft, determine if it needs to be labeled
    # if the PR is converted out of draft, determine if it needs to be labeled
    if: |
      (
        !contains(github.event.pull_request.labels.*.name, 'community')
        && (
          (github.event.action == 'opened' && github.event.pull_request.draft == false)
          || github.event.action == 'ready_for_review'
        )
        && github.event.pull_request.user.type != 'Bot'
        && github.event.pull_request.user.login != 'dependabot[bot]'
      )
    uses: dbt-labs/actions/.github/workflows/label-community.yml@main
    with:
        github_team: 'core-group'
        label: 'community'
    secrets: inherit


================================================
FILE: .github/workflows/cut-release-branch.yml
================================================
# **what?**
# Cuts the `*.latest` branch, bumps dependencies on it, cleans up all files in `.changes/unreleased`
# and `.changes/previous verion on main and bumps main to the input version.

# **why?**
# Clean up the main branch after a release branch is cut and automate cutting the release branch.
# Generally reduces the workload of engineers and reducing error.

# **when?**
# This will run when called manually or when triggered in another workflow.

# Example Usage including required permissions:  TODO: update once finalized

# permissions:
#   contents: read
#   pull-requests: write
#
# name: Cut Release Branch
# jobs:
#   changelog:
#     uses: dbt-labs/actions/.github/workflows/cut-release-branch.yml@main
#     with:
#       new_branch_name: 1.7.latest
#       PR_title: "Cleanup main after cutting new 1.7.latest branch"
#       PR_body: "All adapter PRs will fail CI until the dbt-core PR has been merged due to release version conflicts."
#     secrets:
#       FISHTOWN_BOT_PAT: ${{ secrets.FISHTOWN_BOT_PAT }}

# TODOs
# add note to eventually commit changes directly and bypass checks - same as release - when we move to this model run test action after merge

name: Cut new release branch
run-name: "Cutting New Branch:  ${{ inputs.new_branch_name }}"

on:
  workflow_dispatch:
    inputs:
      new_branch_name:
        description: "The full name of the new branch (ex. 1.5.latest)"
        required: true
        type: string

defaults:
  run:
    shell: bash

permissions:
  contents: write
  pull-requests: write

env:
  PYTHON_TARGET_VERSION: "3.10"
  PR_TITLE: "Cleanup main after cutting new ${{ inputs.new_branch_name }} branch"
  PR_BODY: "All adapter PRs will fail CI until the dbt-core PR has been merged due to release version conflicts."

jobs:
  prep_work:
    name: "Prep Work"
    runs-on: ubuntu-latest
    steps:
      - name: "[DEBUG] Print Inputs"
        run: |
          echo "new_branch_name:        ${{ inputs.new_branch_name }}"
          echo "PR_title:               ${{ env.PR_TITLE }}"
          echo "PR_body:                ${{ env.PR_BODY }}"

  create_temp_branch:
    name: "Create Temp branch off main"
    runs-on: ubuntu-latest
    outputs:
      temp_branch_name: ${{ steps.variables.outputs.BRANCH_NAME }}

    steps:
      - name: "Set Branch Value"
        id: variables
        run: |
          echo "BRANCH_NAME=cutting_release_branch/main_cleanup_$GITHUB_RUN_ID" >> $GITHUB_OUTPUT

      - name: "Checkout ${{ github.repository }}"
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          ref: "main"
          token: ${{ secrets.FISHTOWN_BOT_PAT }}

      - name: "Create PR Branch"
        run: |
          user="Github Build Bot"
          email="buildbot@fishtownanalytics.com"
          git config user.name "$user"
          git config user.email "$email"
          git checkout -b ${{ steps.variables.outputs.BRANCH_NAME }}
          git push --set-upstream origin ${{ steps.variables.outputs.BRANCH_NAME }}

      - name: "[Notification] Temp branch created"
        run: |
          message="Temp branch ${{ steps.variables.outputs.BRANCH_NAME }} created"
          echo "::notice title="Temporary branch created": $title::$message"

  cleanup_changelog:
    name: "Clean Up Changelog"
    needs: ["create_temp_branch"]
    runs-on: ubuntu-latest
    outputs:
      next-version: ${{ steps.semver-current.outputs.next-minor-alpha-version }}

    steps:
      - name: "Checkout ${{ github.repository }}"
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          ref: ${{ needs.create_temp_branch.outputs.temp_branch_name }}
          token: ${{ secrets.FISHTOWN_BOT_PAT }}

      - name: "Add Homebrew To PATH"
        run: |
          echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH

      - name: "Install Homebrew Packages"
        run: |
          brew install pre-commit
          brew tap miniscruff/changie https://github.com/miniscruff/changie
          brew install changie

      - name: "Check Current Version In Code"
        id: determine_version
        run: |
          current_version=$(grep '^version = ' core/pyproject.toml | sed 's/version = "\(.*\)"/\1/')
          echo "current_version=$current_version" >> $GITHUB_OUTPUT

      - name: "[Notification] Check Current Version In Code"
        run: |
          message="The current version is ${{ steps.determine_version.outputs.current_version }}"
          echo "::notice title="Version Bump Check": $title::$message"

      - name: "Parse Current Version Into Parts for Changelog Directories"
        id: semver-current
        uses: dbt-labs/actions/parse-semver@v1
        with:
          version: ${{ steps.determine_version.outputs.current_version }}

      - name: "[Notification] Next Alpha Version"
        run: |
          message="The next alpha version is ${{ steps.semver-current.outputs.next-minor-alpha-version }}"
          echo "::notice title="Version Bump Check": $title::$message"

      - name: "Delete Unreleased Changelog YAMLs"
        # removal fails if no files exist. OK to continue since we're just cleaning up the files.
        continue-on-error: true
        run: |
          rm .changes/unreleased/*.yaml || true

      - name: "Delete Pre Release Changelogs and YAMLs"
        # removal fails if no files exist. OK to continue since we're just cleaning up the files.
        continue-on-error: true
        run: |
          rm .changes/${{ steps.semver-current.outputs.base-version }}/*.yaml || true
          rm .changes/${{ steps.semver-current.outputs.major }}.${{ steps.semver-current.outputs.minor }}.*.md || true

      - name: "Cleanup CHANGELOG.md"
        run: |
          changie merge

      - name: "Commit Changelog Cleanup to Branch"
        run: |
          user="Github Build Bot"
          email="buildbot@fishtownanalytics.com"
          git config user.name "$user"
          git config user.email "$email"
          git status
          git add .
          git commit -m "Clean up changelog on main"
          git push

      - name: "[Notification] Changelog cleaned up"
        run: |
          message="Changelog on ${{ needs.create_temp_branch.outputs.temp_branch_name }} cleaned up"
          echo "::notice title="Changelog cleaned up": $title::$message"

  bump_version:
    name: "Bump to next minor version"
    needs: ["cleanup_changelog", "create_temp_branch"]
    runs-on: ubuntu-latest

    steps:
      - name: "Checkout ${{ github.repository }}"
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          ref: ${{ needs.create_temp_branch.outputs.temp_branch_name }}
          token: ${{ secrets.FISHTOWN_BOT_PAT }}

      - name: "Set up Python - ${{ env.PYTHON_TARGET_VERSION }}"
        uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # actions/setup-python@v5
        with:
          python-version: "${{ env.PYTHON_TARGET_VERSION }}"

      - name: "Install Spark Dependencies"
        if: ${{ contains(github.repository, 'dbt-labs/dbt-spark') }}
        run: |
          sudo apt-get update
          sudo apt-get install libsasl2-dev

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: "Bump Version To ${{ needs.cleanup_changelog.outputs.next-version }}"
        run: |
          cd core
          hatch version ${{ needs.cleanup_changelog.outputs.next-version }}
          hatch run dev-req
          dbt --version

      - name: "Commit Version Bump to Branch"
        run: |
          user="Github Build Bot"
          email="buildbot@fishtownanalytics.com"
          git config user.name "$user"
          git config user.email "$email"
          git status
          git add .
          git commit -m "Bumping version to ${{ needs.cleanup_changelog.outputs.next-version }}"
          git push

      - name: "[Notification] Version Bump completed"
        run: |
          message="Version on ${{ needs.create_temp_branch.outputs.temp_branch_name }} bumped to ${{ needs.cleanup_changelog.outputs.next-version }}"
          echo "::notice title="Version Bump Completed": $title::$message"

  cleanup:
    name: "Cleanup Code Quality"
    needs: ["create_temp_branch", "bump_version"]
    runs-on: ubuntu-latest
    steps:
      - name: "Checkout ${{ github.repository }}"
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          ref: ${{ needs.create_temp_branch.outputs.temp_branch_name }}
          token: ${{ secrets.FISHTOWN_BOT_PAT }}

      - name: "Add Homebrew To PATH"
        run: |
          echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH

      - name: "brew install pre-commit"
        run: |
          brew install pre-commit

      # this step will fail on whitespace errors but also correct them
      - name: "Cleanup - Remove Trailing Whitespace Via Pre-commit"
        continue-on-error: true
        run: |
          pre-commit run trailing-whitespace --files CHANGELOG.md .changes/* || true

      # this step will fail on newline errors but also correct them
      - name: "Cleanup - Remove Extra Newlines Via Pre-commit"
        continue-on-error: true
        run: |
          pre-commit run end-of-file-fixer --files CHANGELOG.md .changes/* || true

      - name: "Commit Version Bump to Branch"
        run: |
          user="Github Build Bot"
          email="buildbot@fishtownanalytics.com"
          git config user.name "$user"
          git config user.email "$email"
          git status
          git add .
          git commit -m "Code quality cleanup"
          git push

  open_pr:
    name: "Open PR Against main"
    needs: ["cleanup_changelog", "create_temp_branch", "cleanup"]
    runs-on: ubuntu-latest
    outputs:
      pr_number: ${{ steps.create_pr.outputs.pull-request-number }}

    steps:
      - name: "Checkout ${{ github.repository }}"
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          ref: ${{ needs.create_temp_branch.outputs.temp_branch_name }}
          token: ${{ secrets.FISHTOWN_BOT_PAT }}

      - name: "Determine PR Title"
        id: pr_title
        run: |
          echo "pr_title=${{ env.PR_TITLE }}" >> $GITHUB_OUTPUT
          if [${{ env.PR_TITLE }} == ""]; then
            echo "pr_title='Clean up changelogs and bump to version ${{ needs.cleanup_changelog.outputs.next-version }}'" >> $GITHUB_OUTPUT
          fi

      - name: "Determine PR Body"
        id: pr_body
        run: |
          echo "pr_body=${{ env.PR_BODY }}" >> $GITHUB_OUTPUT
          if [${{ env.PR_BODY }} == ""]; then
            echo "pr_body='Clean up changelogs and bump to version ${{ needs.cleanup_changelog.outputs.next-version }}'" >> $GITHUB_OUTPUT
          fi

      - name: "Add Branch Details"
        id: pr_body_branch
        run: |
          branch_details="The workflow that generated this PR also created a new branch: ${{ inputs.new_branch_name }}"
          full_body="${{ steps.pr_body.outputs.pr_body }} $branch_details"
          echo "pr_full_body=$full_body" >> $GITHUB_OUTPUT

      - name: "Open Pull Request"
        id: create_pr
        run: |
          pr_url=$(gh pr create -B main -H ${{ needs.create_temp_branch.outputs.temp_branch_name }} -l "Skip Changelog" -t "${{ steps.pr_title.outputs.pr_title }}" -b "${{ steps.pr_body_branch.outputs.pr_full_body }}")
          echo "pr_url=$pr_url" >> $GITHUB_OUTPUT
        env:
          GH_TOKEN: ${{ secrets.FISHTOWN_BOT_PAT }}

      - name: "[Notification] Pull Request Opened"
        run: |
          message="PR opened at ${{ steps.create_pr.outputs.pr_url }}"
          echo "::notice title="Pull Request Opened": $title::$message"

  cut_new_branch:
    # don't cut the new branch until we're done opening the PR against main
    name: "Cut New Branch ${{ inputs.new_branch_name }}"
    needs: [open_pr]
    runs-on: ubuntu-latest

    steps:
      - name: "Checkout ${{ github.repository }}"
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          token: ${{ secrets.FISHTOWN_BOT_PAT }}
          fetch-depth: 0

      - name: "Ensure New Branch Does Not Exist"
        id: check_new_branch
        run: |
          title="Check New Branch Existence"
          if git show-ref --quiet ${{ inputs.new_branch_name }}; then
            message="Branch ${{ inputs.new_branch_name }} already exists.  Exiting."
            echo "::error $title::$message"
            exit 1
          fi

      - name: "Create New Release Branch"
        run: |
          git checkout -b ${{ inputs.new_branch_name }}

      - name: "Push up New Branch"
        run: |
          #Data for commit
          user="Github Build Bot"
          email="buildbot@fishtownanalytics.com"
          git config user.name "$user"
          git config user.email "$email"
          git push --set-upstream origin ${{ inputs.new_branch_name }}

      - name: "[Notification] New branch created"
        run: |
          message="New branch ${{ inputs.new_branch_name }} created"
          echo "::notice title="New branch created": $title::$message"

      - name: "Bump dependencies via script"
        # This bumps the dependency on dbt-core in the adapters
        if: ${{ !contains(github.repository, 'dbt-core') }}
        run: |
          echo ${{ github.repository }}
          echo "running update_dependencies script"
          bash ${GITHUB_WORKSPACE}/.github/scripts/update_dependencies.sh ${{ inputs.new_branch_name }}
          commit_message="bumping .latest branch variable in update_dependencies.sh to ${{ inputs.new_branch_name }}"
          git status
          git add .
          git commit -m "$commit_message"
          git push

      - name: "Bump env variable via script"
        # bumps the RELEASE_BRANCH variable in nightly-release.yml in adapters
        if: ${{ !contains(github.repository, 'dbt-core') }}
        run: |
          file="./.github/scripts/update_release_branch.sh"
          if test -f "$file"; then
            echo ${{ github.repository }}
            echo "running some script yet to be written now"
            bash $file ${{ inputs.new_branch_name }}
            commit_message="updating env variable to ${{ inputs.new_branch_name }} in nightly-release.yml"
            git status
            git add .
            git commit -m "$commit_message"
            git push
          else
            echo "no $file seen skipping step"
          fi


================================================
FILE: .github/workflows/docs-issue.yml
================================================
# **what?**
# Open an issue in docs.getdbt.com when an issue is labeled `user docs` and closed as completed

# **why?**
# To reduce barriers for keeping docs up to date

# **when?**
# When an issue is labeled `user docs` and is closed as completed.  Can be labeled before or after the issue is closed.


name: Open issues in docs.getdbt.com repo when an issue is labeled
run-name: "Open an issue in docs.getdbt.com for issue #${{ github.event.issue.number }}"

on:
  issues:
    types: [labeled, closed]

defaults:
  run:
    shell: bash

permissions:
    issues: write # comments on issues

jobs:
  get_pr_info:
    # we only want to run this when the issue is closed as completed and the label `user docs` has been assigned.
    # If this logic does not exist in this workflow, it runs the
    # risk of duplicaton of issues being created due to merge and label both triggering this workflow to run and neither having
    # generating the comment before the other runs.  This lives here instead of the shared workflow because this is where we
    # decide if it should run or not.
    if: |
      (github.event.issue.state == 'closed' &&
       github.event.issue.state_reason == 'completed' &&
       contains( github.event.issue.labels.*.name, 'user docs'))
    runs-on: ubuntu-latest
    outputs:
      pr_url: ${{ steps.find_pr.outputs.pr_url }}
      pr_title: ${{ steps.find_pr.outputs.pr_title }}
    steps:
      - name: Find closing PR via timeline
        id: find_pr
        uses: actions/github-script@v7
        with:
          script: |
            const result = await github.graphql(`
              query($owner: String!, $repo: String!, $number: Int!) {
                repository(owner: $owner, name: $repo) {
                  issue(number: $number) {
                    timelineItems(itemTypes: [CLOSED_EVENT], last: 1) {
                      nodes {
                        ... on ClosedEvent {
                          closer {
                            ... on PullRequest {
                              title
                              url
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }`, {
              owner: context.repo.owner,
              repo: context.repo.repo,
              number: context.issue.number,
            });
            const closer = result.repository.issue.timelineItems.nodes[0]?.closer;
            core.setOutput('pr_url', closer?.url || 'No linked PR found');
            core.setOutput('pr_title', closer?.title || 'N/A');

  open_issues:
    needs: get_pr_info
    uses: dbt-labs/actions/.github/workflows/open-issue-in-repo.yml@main
    with:
        issue_repository: "dbt-labs/docs.getdbt.com"
        issue_title: "[Core] Docs Changes Needed from ${{ github.event.repository.name }} Issue #${{ github.event.issue.number }}"
        issue_body: "Originating from this issue: https://github.com/dbt-labs/dbt-core/issues/${{ github.event.issue.number }}\nRelated PR: ${{ needs.get_pr_info.outputs.pr_url }}\nPR title: ${{ needs.get_pr_info.outputs.pr_title }}\n\nAt a minimum, update body to include a link to the page on docs.getdbt.com requiring updates and what part(s) of the page you would like to see updated."
    secrets: inherit


================================================
FILE: .github/workflows/main.yml
================================================
# **what?**
# Runs code quality checks, unit tests, integration tests and
# verifies python build on all code commited to the repository. This workflow
# should not require any secrets since it runs for PRs from forked repos. By
# default, secrets are not passed to workflows running from a forked repos.

# **why?**
# Ensure code for dbt meets a certain quality standard.

# **when?**
# This will run for all PRs, when code is pushed to a release
# branch, and when manually triggered.

name: Tests and Code Checks

on:
  push:
    branches:
      - "main"
      - "*.latest"
      - "releases/*"
  pull_request:
  merge_group:
    types: [checks_requested]
  workflow_dispatch:

permissions: read-all

# will cancel previous workflows triggered by the same event and for the same ref for PRs or same SHA otherwise
concurrency:
  group: ${{ github.workflow }}-${{ github.event_name }}-${{ contains(github.event_name, 'pull_request') && github.event.pull_request.head.ref || github.sha }}
  cancel-in-progress: true

defaults:
  run:
    shell: bash

# top-level adjustments can be made here
env:
  # number of parallel processes to spawn for python integration testing
  PYTHON_INTEGRATION_TEST_WORKERS: 15

jobs:
  code-quality:
    name: code-quality

    runs-on: ubuntu-latest
    timeout-minutes: 10

    steps:
      - name: Check out the repository
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: "3.10"

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: Install python dependencies
        run: |
          cd core
          hatch -v run setup

      - name: Verify dbt installation
        run: |
          cd core
          hatch run dbt --version

      - name: Run pre-commit hooks
        run: |
          cd core
          hatch run code-quality

  unit:
    name: "unit test / python ${{ matrix.python-version }}"

    runs-on: ubuntu-latest
    timeout-minutes: 10

    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13"]

    steps:
      - name: Check out the repository
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: Run unit tests
        uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # nick-fields/retry@v3
        with:
          timeout_minutes: 10
          max_attempts: 3
          command: cd core && hatch -v run ci:unit-tests

      - name: Get current date
        if: always()
        id: date
        run: |
          CURRENT_DATE=$(date +'%Y-%m-%dT%H_%M_%S') # no colons allowed for artifacts
          echo "date=$CURRENT_DATE" >> $GITHUB_OUTPUT

      - name: Upload Unit Test Coverage to Codecov
        if: ${{ matrix.python-version == '3.11' }}
        uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # codecov/codecov-action@v5
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          flags: unit
          fail_ci_if_error: false

  integration-metadata:
    name: integration test metadata generation
    runs-on: ubuntu-latest
    outputs:
      split-groups: ${{ steps.generate-split-groups.outputs.split-groups }}
      include: ${{ steps.generate-include.outputs.include }}

    steps:
      - name: generate split-groups
        id: generate-split-groups
        run: |
          MATRIX_JSON="["
          for B in $(seq 1 ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }}); do
              MATRIX_JSON+=$(sed 's/^/"/;s/$/"/' <<< "${B}")
          done
          MATRIX_JSON="${MATRIX_JSON//\"\"/\", \"}"
          MATRIX_JSON+="]"
          echo "split-groups=${MATRIX_JSON}"
          echo "split-groups=${MATRIX_JSON}" >> $GITHUB_OUTPUT

      - name: generate include
        id: generate-include
        run: |
          INCLUDE=('"python-version":"3.10","os":"windows-latest"' '"python-version":"3.10","os":"macos-14"' )
          INCLUDE_GROUPS="["
          for include in ${INCLUDE[@]}; do
              for group in $(seq 1 ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }}); do
                  INCLUDE_GROUPS+=$(sed 's/$/, /' <<< "{\"split-group\":\"${group}\",${include}}")
              done
          done
          INCLUDE_GROUPS=$(echo $INCLUDE_GROUPS | sed 's/,*$//g')
          INCLUDE_GROUPS+="]"
          echo "include=${INCLUDE_GROUPS}"
          echo "include=${INCLUDE_GROUPS}" >> $GITHUB_OUTPUT

  integration-postgres:
    name: "(${{ matrix.split-group }}) integration test / python ${{ matrix.python-version }} / ${{ matrix.os }}"

    runs-on: ${{ matrix.os }}
    timeout-minutes: 45
    needs:
      - integration-metadata
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13"]
        os: ["ubuntu-latest"]
        split-group: ${{ fromJson(needs.integration-metadata.outputs.split-groups) }}
    env:
      DBT_INVOCATION_ENV: github-actions
      DBT_TEST_USER_1: dbt_test_user_1
      DBT_TEST_USER_2: dbt_test_user_2
      DBT_TEST_USER_3: dbt_test_user_3
      DD_CIVISIBILITY_AGENTLESS_ENABLED: true
      DD_API_KEY: ${{ secrets.DATADOG_API_KEY }}
      DD_SITE: datadoghq.com
      DD_ENV: ci
      DD_SERVICE: ${{ github.event.repository.name }}

    services:
      # Label used to access the service container
      postgres:
        # Docker Hub image
        image: postgres
        # Provide the password for postgres
        env:
          POSTGRES_PASSWORD: password
          POSTGRES_USER: postgres
        # Set health checks to wait until postgres has started
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432

    steps:
      - name: Check out the repository
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}

      - name: Run postgres setup script
        run: |
          ./scripts/setup_db.sh
        env:
          PGHOST: localhost
          PGPORT: 5432
          PGPASSWORD: password

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: Run integration tests
        uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # nick-fields/retry@v3
        with:
          timeout_minutes: 30
          max_attempts: 3
          shell: bash
          command: cd core && hatch -v run ci:integration-tests -- --ddtrace --splits ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }} --group ${{ matrix.split-group }}

      - name: Get current date
        if: always()
        id: date
        run: |
          CURRENT_DATE=$(date +'%Y-%m-%dT%H_%M_%S') # no colons allowed for artifacts
          echo "date=$CURRENT_DATE" >> $GITHUB_OUTPUT

      - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # actions/upload-artifact@v4
        if: always()
        with:
          name: logs_${{ matrix.python-version }}_${{ matrix.os }}_${{ matrix.split-group }}_${{ steps.date.outputs.date }}
          path: ./logs

      - name: Upload Integration Test Coverage to Codecov
        if: ${{ matrix.python-version == '3.11' }}
        uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # codecov/codecov-action@v5
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          flags: integration
          fail_ci_if_error: false

  integration-mac-windows:
    name: (${{ matrix.split-group }}) integration test / python ${{ matrix.python-version }} / ${{ matrix.os }}

    runs-on: ${{ matrix.os }}
    timeout-minutes: 45
    needs:
      - integration-metadata
    strategy:
      fail-fast: false
      matrix:
        # already includes split group and runs mac + windows
        include: ${{ fromJson(needs.integration-metadata.outputs.include) }}
    env:
      DBT_INVOCATION_ENV: github-actions
      DBT_TEST_USER_1: dbt_test_user_1
      DBT_TEST_USER_2: dbt_test_user_2
      DBT_TEST_USER_3: dbt_test_user_3
      DD_CIVISIBILITY_AGENTLESS_ENABLED: true
      DD_API_KEY: ${{ secrets.DATADOG_API_KEY }}
      DD_SITE: datadoghq.com
      DD_ENV: ci
      DD_SERVICE: ${{ github.event.repository.name }}

    steps:
      - name: Check out the repository
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}

      - name: Set up postgres (macos)
        if: runner.os == 'macOS'

        uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # nick-fields/retry@v3
        with:
          timeout_minutes: 10
          max_attempts: 3
          command: ./scripts/setup_db.sh

      - name: Set up postgres (windows)
        if: runner.os == 'Windows'
        uses: ./.github/actions/setup-postgres-windows

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: Run integration tests
        uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # nick-fields/retry@v3
        with:
          timeout_minutes: 30
          max_attempts: 3
          shell: bash
          command: cd core && hatch -v run ci:integration-tests -- --ddtrace --splits ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }} --group ${{ matrix.split-group }}

      - name: Get current date
        if: always()
        id: date
        run: |
          CURRENT_DATE=$(date +'%Y-%m-%dT%H_%M_%S') # no colons allowed for artifacts
          echo "date=$CURRENT_DATE" >> $GITHUB_OUTPUT

      - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # actions/upload-artifact@v4
        if: always()
        with:
          name: logs_${{ matrix.python-version }}_${{ matrix.os }}_${{ matrix.split-group }}_${{ steps.date.outputs.date }}
          path: ./logs

      - name: Upload Integration Test Coverage
        if: ${{ matrix.python-version == '3.11' }}
        uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # codecov/codecov-action@v5
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          flags: integration
          fail_ci_if_error: false

  integration-report:
    if: ${{ always() }}
    name: Integration Test Suite
    runs-on: ubuntu-latest
    needs: [integration-mac-windows, integration-postgres]
    steps:
      - name: "Integration Tests Failed"
        if: ${{ contains(needs.integration-mac-windows.result, 'failure') || contains(needs.integration-mac-windows.result, 'cancelled') || contains(needs.integration-postgres.result, 'failure') || contains(needs.integration-postgres.result, 'cancelled') }}
        # when this is true the next step won't execute
        run: |
          echo "::notice title='Integration test suite failed'"
          exit 1

      - name: "Integration Tests Passed"
        run: |
          echo "::notice title='Integration test suite passed'"

  build:
    name: build packages

    runs-on: ubuntu-latest

    steps:
      - name: Check out the repository
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: "3.10"

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: Install python dependencies
        run: |
          python -m pip install --user --upgrade pip
          python -m pip install --upgrade twine check-wheel-contents
          python -m pip --version

      - name: "Build Distributions"
        working-directory: core
        run: hatch build

      - name: "Show Distributions"
        working-directory: core
        run: ls -lh dist/

      - name: "Check and Verify Distributions"
        working-directory: core
        run: hatch -v run build:check-all


================================================
FILE: .github/workflows/nightly-release.yml
================================================
# **what?**
# Nightly releases to GitHub and PyPI. This workflow produces the following outcome:
# - generate and validate data for night release (commit SHA, version number, release branch);
# - pass data to release workflow;
# - night release will be pushed to GitHub as a draft release;
# - night build will be pushed to test PyPI;
#
# **why?**
# Ensure an automated and tested release process for nightly builds
#
# **when?**
# This workflow runs on schedule or can be run manually on demand.

name: Nightly Test Release to GitHub and PyPI

on:
  workflow_dispatch: # for manual triggering
  schedule:
    - cron: 0 9 * * *

permissions:
  contents: write # this is the permission that allows creating a new release
  packages: write # this is the permission that allows Docker release

defaults:
  run:
    shell: bash

env:
  RELEASE_BRANCH: "main"

jobs:
  aggregate-release-data:
    runs-on: ${{ vars.UBUNTU_LATEST }}

    outputs:
      version_number: ${{ steps.nightly-release-version.outputs.number }}
      release_branch: ${{ steps.release-branch.outputs.name }}

    steps:
      - name: "Checkout ${{ github.repository }} Branch ${{ env.RELEASE_BRANCH }}"
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          ref: ${{ env.RELEASE_BRANCH }}

      - name: "Get Current Version Number"
        id: version-number-sources
        run: |
          current_version=$(grep '^version = ' core/dbt/__version__.py | sed 's/version = "\(.*\)"/\1/')
          echo "current_version=$current_version" >> $GITHUB_OUTPUT

      - name: "Audit Version And Parse Into Parts"
        id: semver
        uses: dbt-labs/actions/parse-semver@v1
        with:
          version: ${{ steps.version-number-sources.outputs.current_version }}

      - name: "Get Current Date"
        id: current-date
        run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT

      - name: "Generate Nightly Release Version Number"
        id: nightly-release-version
        run: |
          number="${{ steps.semver.outputs.version }}.post${{ steps.current-date.outputs.date }}"
          echo "number=$number" >> $GITHUB_OUTPUT

      - name: "Audit Nightly Release Version And Parse Into Parts"
        uses: dbt-labs/actions/parse-semver@v1
        with:
          version: ${{ steps.nightly-release-version.outputs.number }}

      - name: "Set Release Branch"
        id: release-branch
        run: |
          echo "name=${{ env.RELEASE_BRANCH }}" >> $GITHUB_OUTPUT

  log-outputs-aggregate-release-data:
    runs-on: ${{ vars.UBUNTU_LATEST }}
    needs: [aggregate-release-data]

    steps:
      - name: "[DEBUG] Log Outputs"
        run: |
          echo version_number: ${{ needs.aggregate-release-data.outputs.version_number }}
          echo release_branch: ${{ needs.aggregate-release-data.outputs.release_branch }}

  release-github-pypi:
    needs: [aggregate-release-data]

    uses: ./.github/workflows/release.yml
    with:
      target_branch: ${{ needs.aggregate-release-data.outputs.release_branch }}
      version_number: ${{ needs.aggregate-release-data.outputs.version_number }}
      test_run: true
      nightly_release: true
    secrets: inherit


================================================
FILE: .github/workflows/release-branch-tests.yml
================================================
# **what?**
# The purpose of this workflow is to trigger CI to run for each
# release branch and main branch on a regular cadence. If the CI workflow
# fails for a branch, it will post to #dev-core-alerts to raise awareness.

# **why?**
# Ensures release branches and main are always shippable and not broken.
# Also, can catch any dependencies shifting beneath us that might
# introduce breaking changes (could also impact Cloud).

# **when?**
# Mainly on a schedule of 9:00, 13:00, 18:00 UTC everyday.
# Manual trigger can also test on demand

name: Release branch scheduled testing

on:
  schedule:
    - cron: '0 9,13,18 * * *' # 9:00, 13:00, 18:00 UTC

  workflow_dispatch: # for manual triggering

# no special access is needed
permissions: read-all

jobs:
  run_tests:
    uses: dbt-labs/actions/.github/workflows/release-branch-tests.yml@main
    with:
      workflows_to_run: '["main.yml"]'
    secrets: inherit


================================================
FILE: .github/workflows/release.yml
================================================
# **what?**
# Release workflow provides the following steps:
# - checkout the given commit;
# - validate version in sources and changelog file for given version;
# - bump the version and generate a changelog if needed;
# - merge all changes to the target branch if needed;
# - run unit and integration tests against given commit;
# - build and package that SHA;
# - release it to GitHub and PyPI with that specific build;
# - release it to Docker
#
# **why?**
# Ensure an automated and tested release process
#
# **when?**
# This workflow can be run manually on demand or can be called by other workflows

name: "Release to GitHub, PyPI & Docker"
run-name: "Release ${{ inputs.version_number }} to GitHub, PyPI & Docker"

on:
  workflow_dispatch:
    inputs:
      target_branch:
        description: "The branch to release from"
        type: string
        required: true
      version_number:
        description: "The release version number (i.e. 1.0.0b1)"
        type: string
        required: true
      test_run:
        description: "Test run (Publish release as draft)"
        type: boolean
        default: true
        required: false
      nightly_release:
        description: "Nightly release to dev environment"
        type: boolean
        default: false
        required: false
      only_docker:
        description: "Only release Docker image, skip GitHub & PyPI"
        type: boolean
        default: false
        required: false
  workflow_call:
    inputs:
      target_branch:
        description: "The branch to release from"
        type: string
        required: true
      version_number:
        description: "The release version number (i.e. 1.0.0b1)"
        type: string
        required: true
      test_run:
        description: "Test run (Publish release as draft)"
        type: boolean
        default: true
        required: false
      nightly_release:
        description: "Nightly release to dev environment"
        type: boolean
        default: false
        required: false

permissions:
  contents: write # this is the permission that allows creating a new release

defaults:
  run:
    shell: bash

env:
  MIN_HATCH_VERSION: "1.11.0"

jobs:
  job-setup:
    name: Log Inputs
    runs-on: ${{ vars.UBUNTU_LATEST }}
    outputs:
      use_hatch: ${{ steps.use_hatch.outputs.use_hatch }}
    steps:
      - name: "[DEBUG] Print Variables"
        run: |
          echo Inputs
          echo The branch to release from:         ${{ inputs.target_branch }}
          echo The release version number:         ${{ inputs.version_number }}
          echo Test run:                           ${{ inputs.test_run }}
          echo Nightly release:                    ${{ inputs.nightly_release }}
          echo Only Docker:                        ${{ inputs.only_docker }}

      # In version env.HATCH_VERSION we started to use hatch for build tooling.  Before that we used setuptools.
      # This needs to check if we're using hatch or setuptools based on the version being released.  We should
      # check if the version is greater than or equal to env.HATCH_VERSION.  If it is, we use hatch, otherwise we use setuptools.
      - name: "Check if using hatch"
        id: use_hatch
        run: |
          # Extract major.minor from versions like 1.11.0a1 -> 1.11
          INPUT_MAJ_MIN=$(echo "${{ inputs.version_number }}" | sed -E 's/^([0-9]+\.[0-9]+).*/\1/')
          HATCH_MAJ_MIN=$(echo "${{ env.MIN_HATCH_VERSION }}" | sed -E 's/^([0-9]+\.[0-9]+).*/\1/')

          if [ $(echo "$INPUT_MAJ_MIN >= $HATCH_MAJ_MIN" | bc) -eq 1 ]; then
            echo "use_hatch=true" >> $GITHUB_OUTPUT
          else
            echo "use_hatch=false" >> $GITHUB_OUTPUT
          fi

      - name: "Notify if using hatch"
        run: |
          if [ ${{ steps.use_hatch.outputs.use_hatch }} = "true" ]; then
            echo "::notice title="Using Hatch": $title::Using Hatch for release"
          else
            echo "::notice title="Using Setuptools": $title::Using Setuptools for release"
          fi

  bump-version-generate-changelog:
    name: Bump package version, Generate changelog
    needs: [job-setup]
    if: ${{ !inputs.only_docker }}

    uses: dbt-labs/dbt-release/.github/workflows/release-prep.yml@main

    with:
      version_number: ${{ inputs.version_number }}
      hatch_directory: "core"
      target_branch: ${{ inputs.target_branch }}
      env_setup_script_path: "scripts/env-setup.sh"
      test_run: ${{ inputs.test_run }}
      nightly_release: ${{ inputs.nightly_release }}
      use_hatch: ${{ needs.job-setup.outputs.use_hatch == 'true' }} # workflow outputs are strings...

    secrets: inherit

  log-outputs-bump-version-generate-changelog:
    name: "[Log output] Bump package version, Generate changelog"
    if: ${{ !failure() && !cancelled() && !inputs.only_docker }}

    needs: [bump-version-generate-changelog]

    runs-on: ${{ vars.UBUNTU_LATEST }}

    steps:
      - name: Print variables
        run: |
          echo Final SHA     : ${{ needs.bump-version-generate-changelog.outputs.final_sha }}
          echo Changelog path: ${{ needs.bump-version-generate-changelog.outputs.changelog_path }}

  build-test-package:
    name: Build, Test, Package
    if: ${{ !failure() && !cancelled() && !inputs.only_docker }}
    needs: [job-setup, bump-version-generate-changelog]

    uses: dbt-labs/dbt-release/.github/workflows/build.yml@main

    with:
      sha: ${{ needs.bump-version-generate-changelog.outputs.final_sha }}
      version_number: ${{ inputs.version_number }}
      hatch_directory: "core"
      changelog_path: ${{ needs.bump-version-generate-changelog.outputs.changelog_path }}
      build_script_path: "scripts/build-dist.sh"
      package_test_command: "dbt --version"
      test_run: ${{ inputs.test_run }}
      nightly_release: ${{ inputs.nightly_release }}
      use_hatch: ${{ needs.job-setup.outputs.use_hatch == 'true' }} # workflow outputs are strings...

  github-release:
    name: GitHub Release
    if: ${{ !failure() && !cancelled() && !inputs.only_docker }}

    needs: [job-setup, bump-version-generate-changelog, build-test-package]

    uses: dbt-labs/dbt-release/.github/workflows/github-release.yml@main

    with:
      sha: ${{ needs.bump-version-generate-changelog.outputs.final_sha }}
      version_number: ${{ inputs.version_number }}
      changelog_path: ${{ needs.bump-version-generate-changelog.outputs.changelog_path }}
      test_run: ${{ inputs.test_run }}
      use_hatch: ${{ needs.job-setup.outputs.use_hatch == 'true' }} # workflow outputs are strings...

  pypi-release:
    name: PyPI Release

    needs: [job-setup, github-release]

    uses: dbt-labs/dbt-release/.github/workflows/pypi-release.yml@main

    with:
      version_number: ${{ inputs.version_number }}
      test_run: ${{ inputs.test_run }}
      use_hatch: ${{ needs.job-setup.outputs.use_hatch == 'true' }} # workflow outputs are strings...

    secrets:
      PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
      TEST_PYPI_API_TOKEN: ${{ secrets.TEST_PYPI_API_TOKEN }}

  determine-docker-package:
    # dbt-postgres exists within dbt-core for versions 1.7 and earlier but is a separate package for 1.8 and later.
    # determine if we need to release dbt-core or both dbt-core and dbt-postgres
    name: Determine Docker Package
    if: ${{ !failure() && !cancelled() }}
    runs-on: ${{ vars.UBUNTU_LATEST }}
    needs: [pypi-release]
    outputs:
      matrix: ${{ steps.determine-docker-package.outputs.matrix }}
    steps:
      - name: "Audit Version And Parse Into Parts"
        id: semver
        uses: dbt-labs/actions/parse-semver@v1
        with:
          version: ${{ inputs.version_number }}

      - name: "Determine Packages to Release"
        id: determine-docker-package
        run: |
          if [ ${{ steps.semver.outputs.minor }} -ge 8 ]; then
            json_output={\"package\":[\"dbt-core\"]}
          else
            json_output={\"package\":[\"dbt-core\",\"dbt-postgres\"]}
          fi
          echo "matrix=$json_output" >> $GITHUB_OUTPUT

  docker-release:
    name: "Docker Release for ${{ matrix.package }}"
    needs: [determine-docker-package]
    # We cannot release to docker on a test run because it uses the tag in GitHub as
    # what we need to release but draft releases don't actually tag the commit so it
    # finds nothing to release
    if: ${{ !failure() && !cancelled() && (!inputs.test_run || inputs.only_docker) }}
    strategy:
      matrix: ${{fromJson(needs.determine-docker-package.outputs.matrix)}}

    permissions:
      packages: write

    uses: dbt-labs/dbt-release/.github/workflows/release-docker.yml@main
    with:
      package: ${{ matrix.package }}
      version_number: ${{ inputs.version_number }}
      test_run: ${{ inputs.test_run }}

  slack-notification:
    name: Slack Notification
    if: ${{ failure() && (!inputs.test_run || inputs.nightly_release) }}

    needs:
      [
        bump-version-generate-changelog,
        build-test-package,
        github-release,
        pypi-release,
        docker-release,
      ]

    uses: dbt-labs/dbt-release/.github/workflows/slack-post-notification.yml@main
    with:
      status: "failure"

    secrets:
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_DEV_CORE_ALERTS }}

  testing-slack-notification:
    # sends notifications to #slackbot-test
    name: Testing - Slack Notification
    if: ${{ failure() && inputs.test_run && !inputs.nightly_release }}

    needs:
      [
        bump-version-generate-changelog,
        build-test-package,
        github-release,
        pypi-release,
        docker-release,
      ]

    uses: dbt-labs/dbt-release/.github/workflows/slack-post-notification.yml@main
    with:
      status: "failure"

    secrets:
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_TESTING_WEBHOOK_URL }}


================================================
FILE: .github/workflows/repository-cleanup.yml
================================================
# **what?**
# Cleanup branches left over from automation and testing.  Also cleanup
# draft releases from release testing.

# **why?**
# The automations are leaving behind branches and releases that clutter
# the repository.  Sometimes we need them to debug processes so we don't
# want them immediately deleted.  Running on Saturday to avoid running
# at the same time as an actual release to prevent breaking a release
# mid-release.

# **when?**
# Mainly on a schedule of 12:00 Saturday.
# Manual trigger can also run on demand

name: Repository Cleanup

on:
  schedule:
    - cron: '0 12 * * SAT' # At 12:00 on Saturday - details in `why` above

  workflow_dispatch: # for manual triggering

permissions:
  contents: write

jobs:
  cleanup-repo:
    uses: dbt-labs/actions/.github/workflows/repository-cleanup.yml@main
    secrets: inherit


================================================
FILE: .github/workflows/schema-check.yml
================================================
# **what?**
# Compares the schema of the dbt version of the given ref vs
# the latest official schema releases found in schemas.getdbt.com.
# If there are differences, the workflow will fail and upload the
# diff as an artifact. The metadata team should be alerted to the change.
#
# **why?**
# Reaction work may need to be done if artifact schema changes
# occur so we want to proactively alert to it.
#
# **when?**
# Only can be run manually
name: Artifact Schema Check

on:
  #  pull_request:
  #    types: [ opened, reopened, labeled, unlabeled, synchronize ]
  #    paths-ignore: [ '.changes/**', '.github/**', 'tests/**', '**.md', '**.yml' ]

  workflow_dispatch:
    inputs:
      target_branch:
        description: "The branch to check against"
        type: string
        default: "main"
        required: true

# no special access is needed
permissions: read-all

env:
  LATEST_SCHEMA_PATH: ${{ github.workspace }}/new_schemas
  SCHEMA_DIFF_ARTIFACT: ${{ github.workspace }}/schema_changes.txt
  DBT_REPO_DIRECTORY: ${{ github.workspace }}/dbt
  SCHEMA_REPO_DIRECTORY: ${{ github.workspace }}/schemas.getdbt.com

jobs:
  checking-schemas:
    name: "Post-merge schema changes required"
    runs-on: ${{ vars.UBUNTU_LATEST }}

    steps:
      - name: Set up Python
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: "3.10"

      - name: Checkout dbt repo
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          path: ${{ env.DBT_REPO_DIRECTORY }}
          ref: ${{ inputs.target_branch }}

      - name: Check for changes in core/dbt/artifacts
        # https://github.com/marketplace/actions/paths-changes-filter
        uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # dorny/paths-filter@v3
        id: check_artifact_changes
        with:
          filters: |
            artifacts_changed:
              - 'core/dbt/artifacts/**'
          list-files: shell
          working-directory: ${{ env.DBT_REPO_DIRECTORY }}

      - name: Succeed if no artifacts have changed
        if: steps.check_artifact_changes.outputs.artifacts_changed == 'false'
        run: |
          echo "No artifact changes found in core/dbt/artifacts. CI check passed."

      - name: Checkout schemas.getdbt.com repo
        if: steps.check_artifact_changes.outputs.artifacts_changed == 'true'
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          repository: dbt-labs/schemas.getdbt.com
          ref: "main"
          path: ${{ env.SCHEMA_REPO_DIRECTORY }}

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: Generate current schema
        if: steps.check_artifact_changes.outputs.artifacts_changed == 'true'
        run: |
          cd ${{ env.DBT_REPO_DIRECTORY }}/core
          hatch run setup
          hatch run json-schema -- --path ${{ env.LATEST_SCHEMA_PATH }}

      # Copy generated schema files into the schemas.getdbt.com repo
      # Do a git diff to find any changes
      # Ignore any lines with date-like (yyyy-mm-dd) or version-like (x.y.z) changes
      - name: Compare schemas
        if: steps.check_artifact_changes.outputs.artifacts_changed == 'true'
        run: |
          cp -r ${{ env.LATEST_SCHEMA_PATH }}/dbt ${{ env.SCHEMA_REPO_DIRECTORY }}
          cd ${{ env.SCHEMA_REPO_DIRECTORY }}
          git diff -I='*[0-9]{4}-[0-9]{2}-[0-9]{2}' -I='*[0-9]+\.[0-9]+\.[0-9]+' --exit-code > ${{ env.SCHEMA_DIFF_ARTIFACT }}

      - name: Upload schema diff
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # actions/upload-artifact@v4
        if: ${{ failure() && steps.check_artifact_changes.outputs.artifacts_changed == 'true' }}
        with:
          name: "schema_changes.txt"
          path: "${{ env.SCHEMA_DIFF_ARTIFACT }}"


================================================
FILE: .github/workflows/stale.yml
================================================
name: "Close stale issues and PRs"
on:
  schedule:
    - cron: "30 1 * * *"

permissions:
  issues: write
  pull-requests: write

jobs:
  stale:
    uses: dbt-labs/actions/.github/workflows/stale-bot-matrix.yml@main


================================================
FILE: .github/workflows/structured-logging-schema-check.yml
================================================
# This Action checks makes a dbt run to sample json structured logs
# and checks that they conform to the currently documented schema.
#
# If this action fails it either means we have unintentionally deviated
# from our documented structured logging schema, or we need to bump the
# version of our structured logging and add new documentation to
# communicate these changes.

name: Structured Logging Schema Check
on:
  push:
    branches:
      - "main"
      - "*.latest"
      - "releases/*"
  pull_request:
  merge_group:
    types: [checks_requested]
  workflow_dispatch:

permissions: read-all

# top-level adjustments can be made here
env:
  # number of parallel processes to spawn for python testing
  PYTHON_INTEGRATION_TEST_WORKERS: 15

jobs:
  integration-metadata:
    name: integration test metadata generation
    runs-on: ubuntu-latest
    outputs:
      split-groups: ${{ steps.generate-split-groups.outputs.split-groups }}

    steps:
      - name: generate split-groups
        id: generate-split-groups
        run: |
          MATRIX_JSON="["
          for B in $(seq 1 ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }}); do
              MATRIX_JSON+=$(sed 's/^/"/;s/$/"/' <<< "${B}")
          done
          MATRIX_JSON="${MATRIX_JSON//\"\"/\", \"}"
          MATRIX_JSON+="]"
          echo "split-groups=${MATRIX_JSON}" >> $GITHUB_OUTPUT

  # run the performance measurements on the current or default branch
  test-schema:
    name: Test Log Schema
    runs-on: ubuntu-latest
    timeout-minutes: 45
    needs:
      - integration-metadata
    strategy:
      fail-fast: false
      matrix:
        split-group: ${{ fromJson(needs.integration-metadata.outputs.split-groups) }}
    env:
      # turns warnings into errors
      RUSTFLAGS: "-D warnings"
      # points tests to the log file
      LOG_DIR: "/home/runner/work/dbt-core/dbt-core/logs"
      # tells integration tests to output into json format
      DBT_LOG_FORMAT: "json"
      # tell eventmgr to convert logging events into bytes
      DBT_TEST_BINARY_SERIALIZATION: "true"
      # Additional test users
      DBT_TEST_USER_1: dbt_test_user_1
      DBT_TEST_USER_2: dbt_test_user_2
      DBT_TEST_USER_3: dbt_test_user_3

    services:
      # Label used to access the service container
      postgres:
        # Docker Hub image
        image: postgres
        # Provide the password for postgres
        env:
          POSTGRES_PASSWORD: password
          POSTGRES_USER: postgres
        # Set health checks to wait until postgres has started
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432

    steps:
      - name: checkout dev
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          persist-credentials: false

      - name: Setup Python
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: "3.10"

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: Run postgres setup script
        run: |
          ./scripts/setup_db.sh
        env:
          PGHOST: localhost
          PGPORT: 5432
          PGPASSWORD: password

      - name: ls
        run: ls

      # integration tests generate a ton of logs in different files. the next step will find them all.
      # we actually care if these pass, because the normal test run doesn't usually include many json log outputs
      - name: Run integration tests
        uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # nick-fields/retry@v3
        with:
          timeout_minutes: 30
          max_attempts: 3
          command: cd core && hatch -v run ci:integration-tests -- --splits ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }} --group ${{ matrix.split-group }}

  test-schema-report:
    name: Log Schema Test Suite
    runs-on: ubuntu-latest
    needs: test-schema
    steps:
      - name: "[Notification] Log test suite passes"
        run: |
          echo "::notice title="Log test suite passes""


================================================
FILE: .github/workflows/test-repeater.yml
================================================
# **what?**
# This workflow will test all test(s) at the input path given number of times to determine if it's flaky or not.  You can test with any supported OS/Python combination.
# This is batched in 10 to allow more test iterations faster.

# **why?**
# Testing if a test is flaky and if a previously flaky test has been fixed.  This allows easy testing on supported python versions and OS combinations.

# **when?**
# This is triggered manually from dbt-core.

name: Flaky Tester

on:
  workflow_dispatch:
    inputs:
      branch:
        description: "Branch to check out"
        type: string
        required: true
        default: "main"
      test_path:
        description: "Path to single test to run (ex: tests/functional/retry/test_retry.py::TestRetry::test_fail_fast)"
        type: string
        required: true
        default: "tests/functional/..."
      python_version:
        description: "Version of Python to Test Against"
        type: choice
        options:
          - "3.10"
          - "3.11"
      os:
        description: "OS to run test in"
        type: choice
        options:
          - "ubuntu-latest"
          - "macos-14"
          - "windows-latest"
      num_runs_per_batch:
        description: "Max number of times to run the test per batch.  We always run 10 batches."
        type: number
        required: true
        default: "50"

permissions: read-all

defaults:
  run:
    shell: bash

jobs:
  debug:
    runs-on: ${{ vars.UBUNTU_LATEST }}
    steps:
      - name: "[DEBUG] Output Inputs"
        run: |
          echo "Branch: ${{ inputs.branch }}"
          echo "test_path: ${{ inputs.test_path }}"
          echo "python_version: ${{ inputs.python_version }}"
          echo "os: ${{ inputs.os }}"
          echo "num_runs_per_batch: ${{ inputs.num_runs_per_batch }}"

  pytest:
    runs-on: ${{ inputs.os }}
    strategy:
      # run all batches, even if one fails.  This informs how flaky the test may be.
      fail-fast: false
      # using a matrix to speed up the jobs since the matrix will run in parallel when runners are available
      matrix:
        batch: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
    env:
      PYTEST_ADDOPTS: "-v --color=yes -n4 --csv integration_results.csv"
      DBT_TEST_USER_1: dbt_test_user_1
      DBT_TEST_USER_2: dbt_test_user_2
      DBT_TEST_USER_3: dbt_test_user_3
      DD_CIVISIBILITY_AGENTLESS_ENABLED: true
      DD_API_KEY: ${{ secrets.DATADOG_API_KEY }}
      DD_SITE: datadoghq.com
      DD_ENV: ci
      DD_SERVICE: ${{ github.event.repository.name }}

    steps:
      - name: "Checkout code"
        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # actions/checkout@v4
        with:
          ref: ${{ inputs.branch }}

      - name: "Setup Python"
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: "${{ inputs.python_version }}"

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: "Setup Dev Environment"
        run: |
          cd core
          hatch run setup

      - name: "Set up postgres (linux)"
        if: inputs.os == '${{ vars.UBUNTU_LATEST }}'
        run: |
          cd core
          hatch run setup-db

        # mac and windows don't use make due to limitations with docker with those runners in GitHub
      - name: Set up postgres (macos)
        if: runner.os == 'macOS'
        uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # nick-fields/retry@v3
        with:
          timeout_minutes: 10
          max_attempts: 3
          command: ./scripts/setup_db.sh

      - name: "Set up postgres (windows)"
        if: inputs.os == 'windows-latest'
        uses: ./.github/actions/setup-postgres-windows

      - name: "Test Command"
        id: command
        run: |
          test_command="python -m pytest ${{ inputs.test_path }}"
          echo "test_command=$test_command" >> $GITHUB_OUTPUT

      - name: "Run test ${{ inputs.num_runs_per_batch }} times"
        id: pytest
        run: |
          set +e
          for ((i=1; i<=${{ inputs.num_runs_per_batch }}; i++))
          do
            echo "Running pytest iteration $i..."
            python -m pytest --ddtrace ${{ inputs.test_path }}
            exit_code=$?

            if [[ $exit_code -eq 0 ]]; then
              success=$((success + 1))
              echo "Iteration $i: Success"
            else
              failure=$((failure + 1))
              echo "Iteration $i: Failure"
            fi

            echo
            echo "==========================="
            echo "Successful runs: $success"
            echo "Failed runs: $failure"
            echo "==========================="
            echo
          done

          echo "failure=$failure" >> $GITHUB_OUTPUT

      - name: "Success and Failure Summary: ${{ inputs.os }}/Python ${{ inputs.python_version }}"
        run: |
          echo "Batch: ${{ matrix.batch }}"
          echo "Successful runs: ${{ steps.pytest.outputs.success }}"
          echo "Failed runs: ${{ steps.pytest.outputs.failure }}"

      - name: "Error for Failures"
        if: ${{ steps.pytest.outputs.failure }}
        run: |
          echo "Batch ${{ matrix.batch }} failed ${{ steps.pytest.outputs.failure }} of ${{ inputs.num_runs_per_batch }} tests"
          exit 1


================================================
FILE: .github/workflows/triage-labels.yml
================================================
# **what?**
# When the core team triages, we sometimes need more information from the issue creator.  In
# those cases we remove the `triage` label and add the `awaiting_response` label.  Once we
# recieve a response in the form of a comment, we want the `awaiting_response` label removed
# in favor of the `triage` label so we are aware that the issue needs action.

# **why?**
# To help with out team triage issue tracking

# **when?**
# This will run when a comment is added to an issue and that issue has to `awaiting_response` label.

name: Update Triage Label

on: issue_comment

defaults:
  run:
    shell: bash

permissions:
  issues: write

jobs:
  triage_label:
    if: contains(github.event.issue.labels.*.name, 'awaiting_response')
    uses: dbt-labs/actions/.github/workflows/swap-labels.yml@main
    with:
      add_label: "triage"
      remove_label: "awaiting_response"
    secrets: inherit


================================================
FILE: .github/workflows/update-test-durations.yml
================================================
# **what?**
# Generates pytest-split test duration data for optimized test splitting.
# It runs tests with pytest-split to generate duration data, and then merges the data
# into a single file to reduce the time it takes to generate the durations file.  It
# runs for 5+ hours otherwise. The updated file is committed to a branch and a PR is
# opened for review. The PR is auto-merged once CI passes.

# **why?**
# pytest-split uses duration data to balance test workloads across workers.
# Without this data, tests are split evenly by count which can cause imbalanced runs.

# **when?**
# Runs weekly on Sunday at midnight UTC, and can be manually triggered as needed.

name: Update Test Durations

on:
  schedule:
    - cron: "0 0 * * 0"
  workflow_dispatch:
    inputs:
      auto-merge-pr:
        description: "Auto-merge the PR"
        required: true
        type: boolean
        default: true

permissions:
  contents: write
  pull-requests: write

defaults:
  run:
    shell: bash

env:
  # Number of parallel workers - matches main.yml for consistent splitting
  PYTHON_INTEGRATION_TEST_WORKERS: 15

jobs:
  generate-split-groups:
    name: "Generate Split Groups"
    runs-on: ubuntu-latest
    outputs:
      split-groups: ${{ steps.generate.outputs.split-groups }}

    steps:
      - name: "Generate split group matrix"
        id: generate
        run: |
          MATRIX_JSON="["
          for B in $(seq 1 ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }}); do
              MATRIX_JSON+=$(sed 's/^/"/;s/$/"/' <<< "${B}")
          done
          MATRIX_JSON="${MATRIX_JSON//\"\"/\", \"}"
          MATRIX_JSON+="]"
          echo "split-groups=${MATRIX_JSON}"
          echo "split-groups=${MATRIX_JSON}" >> $GITHUB_OUTPUT

  generate-durations:
    name: "Generate Durations (Group ${{ matrix.split-group }})"
    runs-on: ubuntu-latest
    timeout-minutes: 60
    needs: [generate-split-groups]

    strategy:
      fail-fast: false
      matrix:
        split-group: ${{ fromJson(needs.generate-split-groups.outputs.split-groups) }}

    env:
      DBT_INVOCATION_ENV: github-actions
      DBT_TEST_USER_1: dbt_test_user_1
      DBT_TEST_USER_2: dbt_test_user_2
      DBT_TEST_USER_3: dbt_test_user_3

    services:
      postgres:
        image: postgres
        env:
          POSTGRES_PASSWORD: password
          POSTGRES_USER: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432

    steps:
      - name: "Check out the repository"
        uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # actions/checkout@v5

      - name: "Set up Python 3.11"
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: "3.11"

      - name: "Run postgres setup script"
        run: ./scripts/setup_db.sh
        env:
          PGHOST: localhost
          PGPORT: 5432
          PGPASSWORD: password

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: "Run integration tests and store durations"
        run: |
          cd core
          hatch -v run ci:integration-tests-generate-durations -- \
            --splits ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }} \
            --group ${{ matrix.split-group }} \
            || true
          # Rename to per-group file (pytest-split overwrites with only this group's tests)
          if [ -f .test_durations ]; then
            mv .test_durations .test_durations_${{ matrix.split-group }}
          else
            echo "ERROR: .test_durations not created - check pytest output above"
            exit 1
          fi

      - name: "Upload partial durations file"
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # actions/upload-artifact@v6
        with:
          name: durations-${{ matrix.split-group }}
          path: core/.test_durations_${{ matrix.split-group }}
          if-no-files-found: error
          include-hidden-files: true

  create-pr:
    name: "Create Pull Request"
    runs-on: ubuntu-latest
    timeout-minutes: 10
    needs: [generate-durations]
    outputs:
      pr_number: ${{ steps.cpr.outputs.pull-request-number }}
      pr_url: ${{ steps.cpr.outputs.pull-request-url }}

    steps:
      - name: "Check out the repository"
        uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # actions/checkout@v5

      - name: "Import build bot GPG key"
        id: import-gpg
        uses: crazy-max/ghaction-import-gpg@2dc316deee8e90f13e1a351ab510b4d5bc0c82cd # crazy-max/ghaction-import-gpg@v7
        with:
          gpg_private_key: ${{ secrets.FISHTOWN_BOT_GPG_PRIVATE_KEY }}
          passphrase: ${{ secrets.FISHTOWN_BOT_GPG_PASSPHRASE }}
          git_config_global: true
          git_user_signingkey: true
          git_commit_gpgsign: true
          git_committer_name: "Github Build Bot"
          git_committer_email: "buildbot@dbtlabs.com"

      - name: "Download all partial duration files"
        uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # actions/download-artifact@v7
        with:
          pattern: durations-*
          path: partial-durations
          merge-multiple: true

      - name: "Set up Python 3.11"
        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # actions/setup-python@v6
        with:
          python-version: "3.11"

      - name: "Merge duration files"
        run: |
          python3 << 'EOF'
          import json
          import glob

          merged = {}
          for filepath in glob.glob("partial-durations/.test_durations_*"):
              print(f"Processing {filepath}")
              with open(filepath, "r") as f:
                  data = json.load(f)
                  merged.update(data)
                  print(f"  Added {len(data)} tests")

          print(f"Total tests: {len(merged)}")

          # Sort by test name for consistent output
          sorted_merged = dict(sorted(merged.items()))

          with open("core/.test_durations", "w") as f:
              json.dump(sorted_merged, f, indent=4)
              f.write("\n")
          EOF

      - name: "Install hatch"
        uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # pypa/hatch@install

      - name: "Code quality"
        run: |
          cd core
          git add .test_durations
          hatch run pre-commit run end-of-file-fixer --files .test_durations || true

      - name: "Create Pull Request"
        id: cpr
        uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # peter-evans/create-pull-request@v8.1.0
        with:
          token: ${{ secrets.FISHTOWN_BOT_PAT }}
          commit-message: "Update test durations for pytest-split"
          author: "Github Build Bot <buildbot@dbtlabs.com>"
          committer: "Github Build Bot <buildbot@dbtlabs.com>"
          branch: update-test-durations
          base: main
          delete-branch: true
          title: "Update test durations for pytest-split"
          body: |
            This PR is automatically generated to update the test durations file used by pytest-split.

            The durations are generated by running the full integration test suite and recording how long each test takes. This data is used to balance test workloads across parallel workers.
          labels: |
            Skip Changelog
          add-paths: |
            core/.test_durations

  await-ci:
    name: "Wait for CI"
    runs-on: ubuntu-latest
    needs: [create-pr]
    if: needs.create-pr.outputs.pr_number != '' && (github.event_name == 'schedule' || inputs.auto-merge-pr == true)
    env:
      GH_TOKEN: ${{ secrets.FISHTOWN_BOT_PAT }}

    steps:
      - name: "Check out the repository"
        uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # actions/checkout@v5

      - name: "Wait for CI to start"
        run: |
          sleep 60

      - name: "Wait for CI checks to complete"
        run: |
          gh pr checks ${{ needs.create-pr.outputs.pr_number }} --fail-fast --watch

  merge-pr:
    name: "Merge Pull Request"
    runs-on: ubuntu-latest
    needs: [create-pr, await-ci]
    if: github.event_name == 'schedule' || inputs.auto-merge-pr == true
    env:
      GH_TOKEN: ${{ secrets.FISHTOWN_BOT_PAT }}

    steps:
      - name: "Check out the repository"
        uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # actions/checkout@v5

      - name: "Merge PR"
        run: |
          gh pr merge ${{ needs.create-pr.outputs.pr_number }} \
            --admin \
            --squash \
            --body "Update test durations for pytest-split" \
            --delete-branch

  slack-notification:
    name: "Slack Notification"
    runs-on: ubuntu-latest
    needs: [create-pr, await-ci, merge-pr]
    if: always() && contains(join(needs.*.result, ','), 'failure')
    steps:
      - name: "Post Slack Notification"
        run: |
          python3 <<'PY' > slack-payload.json
          import json
          import os

          failed_jobs = [
              job
              for job in ("create-pr", "await-ci", "merge-pr")
              if os.environ.get(f"{job.upper().replace('-', '_')}_RESULT") == "failure"
          ]
          failed_summary = ", ".join(failed_jobs) if failed_jobs else "unknown job"
          pr_url = os.environ.get("PR_URL", "")
          pr_text = f"PR <{pr_url}|opened by the workflow>" if pr_url else "The workflow PR"
          text = (
              f":x: {pr_text} failed to merge for `{os.environ['GITHUB_REPOSITORY']}` "
              f"on `{os.environ['GITHUB_REF_NAME']}`. Failed job(s): {failed_summary}. "
              f"<{os.environ['RUN_URL']}|View workflow run>."
          )
          print(json.dumps({"text": text}))
          PY

          curl -X POST \
            -H "Content-type: application/json" \
            --data @slack-payload.json \
            "$SLACK_WEBHOOK_URL"
        env:
          CREATE_PR_RESULT: ${{ needs.create-pr.result }}
          AWAIT_CI_RESULT: ${{ needs.await-ci.result }}
          MERGE_PR_RESULT: ${{ needs.merge-pr.result }}
          PR_URL: ${{ needs.create-pr.outputs.pr_url }}
          RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CORE_PR_CHANNEL_URL }}


================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
env*/
dbt_env/
build/
!tests/functional/build
!core/dbt/docs/build
develop-eggs/
dist/
dist-*/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
.mypy_cache/
.dmypy.json
logs/
.user.yml
profiles.yml

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
.env
nosetests.xml
coverage.xml
*,cover
.hypothesis/
test.env
makefile.test.env
*.pytest_cache/

# Unit test artifacts
index.html


# Translations
*.mo
*.pot

# Django stuff:
*.log

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Ipython Notebook
.ipynb_checkpoints

# Emacs
*~

# Sublime Text
*.sublime-*

# Vim
*.sw*

# Pyenv
.python-version

# Vim
*.sw*

# pycharm
.idea/
venv/
.venv*/

# AWS credentials
.aws/

# MacOS
.DS_Store

# vscode
.vscode/
*.code-workspace

# poetry
poetry.lock

# asdf
.tool-versions


================================================
FILE: .pre-commit-config.yaml
================================================
# Configuration for pre-commit hooks (see https://pre-commit.com/).
# Eventually the hooks described here will be run as tests before merging each PR.

exclude: ^(core/dbt/docs/build/|core/dbt/common/events/types_pb2.py|core/dbt/adapters/events/adapter_types_pb2.py)

# Force all unspecified python hooks to run python 3.10
default_language_version:
  python: python3

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.2.0
    hooks:
      - id: check-yaml
        args: [--unsafe]
      - id: check-json
      - id: end-of-file-fixer
        exclude: schemas/dbt/manifest/
      - id: trailing-whitespace
        exclude_types:
          - "markdown"
      - id: check-case-conflict
  # local hooks are used to run the hooks in the local environment instead of a pre-commit isolated one.
  # This ensures that the hooks are run with the same version of the dependencies as the local environment
  # without having to manually keep them in sync.
  - repo: local
    hooks:
      # Formatter/linter/type-checker pins live in the pyproject.dev optional dependency.
      - id: isort
        name: isort
        entry: python -m isort
        args: [--settings-path, pyproject.toml]
        language: system
        types: [python]
      - id: black
        name: black
        entry: python -m black
        language: system
        types: [python]
      - id: black-check
        name: black-check
        entry: python -m black
        args:
          - "--check"
          - "--diff"
        language: system
        stages: [manual]
        types: [python]
      - id: flake8
        name: flake8
        entry: python -m flake8
        language: system
        types: [python]
      - id: flake8-check
        name: flake8-check
        entry: python -m flake8
        language: system
        stages: [manual]
        types: [python]
      # N.B.: Mypy is... a bit fragile.
      #
      # By using `language: system` we run this hook in the local
      # environment instead of a pre-commit isolated one.  This is needed
      # to ensure mypy correctly parses the project.
      #
      # It may cause trouble
      # in that it adds environmental variables out of our control to the
      # mix.  Unfortunately, there's nothing we can do about per pre-commit's
      # author.
      # See https://github.com/pre-commit/pre-commit/issues/730 for details.
      - id: mypy
        name: mypy
        entry: python -m mypy
        args: [--show-error-codes]
        files: ^core/dbt/
        language: system
        types: [python]
      - id: mypy-check
        name: mypy-check
        entry: python -m mypy
        args: [--show-error-codes, --pretty]
        files: ^core/dbt/
        language: system
        stages: [manual]
        types: [python]
      - id: no_versioned_artifact_resource_imports
        name: no_versioned_artifact_resource_imports
        entry: python scripts/pre-commit-hooks/no_versioned_artifact_resource_imports.py
        language: system
        files: ^core/dbt/
        types: [python]
        pass_filenames: true


================================================
FILE: AGENTS.md
================================================
# AGENTS.md — AI Coding Agent Guidelines for dbt-core

## Project Overview

dbt-core is the open-source core of [dbt](https://www.getdbt.com/) (data build tool). It transforms data in warehouses by running SQL and Python models, managing dependencies, and producing artifacts. The main Python package lives in `core/` and is built with Hatch/Hatchling.

## Repository Layout

```
core/                  # Main dbt-core Python package (pyproject.toml, hatch.toml)
  dbt/                 # Source code
    artifacts/         # Artifact schemas and versioned resource definitions
    cli/               # CLI entry point (Click-based)
    clients/           # Jinja, YAML, git, registry clients
    config/            # Profile, project, and runtime configuration
    context/           # Jinja context providers
    contracts/         # Project and graph contracts (nodes, manifest)
    deps/              # Dependency resolution
    events/            # Structured event logging
    graph/             # DAG selection and selector methods
    materializations/  # Materialization strategies (e.g. incremental, microbatch)
    parser/            # Manifest, model, source, macro parsing
    task/              # One module per dbt command (run, build, test, compile, etc.)
    tests/             # Test utilities and fixtures (not the test suite)
tests/                 # Test suite
  unit/                # Unit tests — no database required
  functional/          # Functional tests — require Postgres
plugins/               # Local Postgres adapter (for integration tests)
schemas/               # JSON schemas for dbt artifacts
docs/                  # Architecture docs and guides
.changes/              # Changie changelog entries
```

### Related Repositories

dbt-core depends on packages maintained in separate repos:
- **dbt-common** (`dbt-labs/dbt-common`) — shared utilities, `dbtClassMixin`
- **dbt-adapters** (`dbt-labs/dbt-adapters`) — adapter interfaces and Postgres adapter
- **dbt-semantic-interfaces**, **dbt-extractor**, **dbt-protos** — other ecosystem packages

## Build System and Dev Setup

- **Build backend:** Hatchling (`core/pyproject.toml`)
- **Python:** ≥3.10 (CI tests 3.10–3.13)
- **Setup:** `cd core && hatch run setup`
- **Entry point:** `dbt = dbt.cli.main:cli`

## Code Style and Formatting

- **Formatter:** Black (line length 99)
- **Import sorting:** isort (profile `"black"`)
- **Linter:** flake8
- **Type checking:** mypy
- **Pre-commit:** Runs all of the above via `hatch run code-quality`

Import order should follow isort conventions:
1. `__future__`
2. Standard library
3. Third-party
4. dbt-internal (`dbt`, `dbt_common`, `dbt_adapters`, `dbt_extractor`, `dbt_semantic_interfaces`)

## Key Architectural Conventions

### Artifact Resources: Import from `dbt.artifacts.resources`, Not Versioned Paths

**Never** import directly from versioned artifact paths like `dbt.artifacts.resources.v1.model`. Instead, import from `dbt.artifacts.resources`:

```python
# WRONG — will fail pre-commit
from dbt.artifacts.resources.v1.model import Model

# RIGHT
from dbt.artifacts.resources import Model
```

The `dbt.artifacts.resources.__init__` re-exports everything from the current version. A pre-commit hook enforces this outside the `artifacts/` module.

### Data Model Layer

dbt-core uses `dataclasses` with `dbtClassMixin` (from `dbt-common`) for serialization, backed by mashumaro. It does **not** use pydantic for its data model hierarchy.

The node type hierarchy has two layers:

1. **Artifact resources** (`dbt.artifacts.resources`) — serializable data definitions
2. **Contract nodes** (`dbt.contracts.graph.nodes`) — runtime node classes that inherit from artifact resources and add behavior

```
BaseResource → GraphResource → BaseNode → GraphNode → ParsedNode → CompiledNode
                                                                     ├── ModelNode
                                                                     ├── SnapshotNode
                                                                     ├── AnalysisNode
                                                                     ├── SingularTestNode
                                                                     ├── GenericTestNode
                                                                     └── ...
```

Each contract node has a `resource_class()` method returning its corresponding artifact resource type and a `to_resource()` method for conversion.

### Parser Pattern

Parsers follow a class hierarchy: `BaseParser → Parser → ConfiguredParser → SQLParser`. The typical flow:

`parse_file()` → `parse_node()` → `_create_parsetime_node()` → `parse_from_dict()` → `render_update()` → `add_result_node()`

Schema-based parsers (`SchemaParser`, `YamlReader` subclasses) read YAML and apply patches to nodes.

## Testing

### Structure

- **Unit tests** (`tests/unit/`): Pure Python, no database. Use mocks and helpers from `tests/unit/utils/`.
- **Functional tests** (`tests/functional/`): Require Postgres. Use the `project` fixture from `dbt.tests.fixtures.project`.

### Running Tests

```sh
cd core
hatch run unit-tests              # Unit tests only
hatch run integration-tests       # Functional tests (requires Postgres)
hatch run test                    # Unit tests + code quality checks
hatch run code-quality            # Pre-commit hooks on all files
```

Or directly with pytest:

```sh
cd core
hatch run python3 -m pytest ../tests/unit/path/to/test_file.py
hatch run python3 -m pytest ../tests/functional/feature_name
```

### Functional Test Pattern

Functional tests use class-scoped fixtures to define project files and run dbt commands:

```python
class TestMyFeature:
    @pytest.fixture(scope="class")
    def models(self):
        return {"my_model.sql": "select 1 as id"}

    def test_run_succeeds(self, project):
        results = run_dbt(["run"])
        assert len(results) == 1
```

Key utilities: `run_dbt()`, `run_dbt_and_capture()`, `get_manifest()`, `get_artifact()` from `dbt.tests.util`.

Having multiple tests in a functional test class will mean that those tests **will share** the underlying dbt project fixture of the class. This means that if a test modifies the underlying project that will affect other tests in the same class. This leads to flakiness and means it is generally best practice to have one test per functional test class.

### Database Setup for Functional Tests

```sh
cd core && hatch run setup-db
# or manually:
docker-compose up -d database
PGHOST=localhost PGUSER=root PGPASSWORD=password PGDATABASE=postgres bash scripts/setup_db.sh
```

## Contributing Guide

General contributing documetatnion can be found in [CONTRIBUTING.md](CONTRIBUTING.md)

## Changelog

Use [changie](https://changie.dev/) — do **not** edit `CHANGELOG.md` directly (it is generated).

```sh
changie new
```

This creates a YAML entry in `.changes/unreleased/`. Changelog kinds: Breaking Changes, Features, Fixes, Docs, Under the Hood, Dependencies, Security.

## Commit Discipline

Separate distinct types of changes into their own commits. Do not combine unrelated changes in a single commit, even if they touch the same file. This keeps the history reviewable and individually revertable.

The following categories of change should each be their own commit:

- **Tidying** — fixing typos, improving variable names, cleaning up whitespace
- **Abstractions** — extracting duplicated logic into a shared function or module
- **Refactors** — restructuring code for readability, performance, or maintainability (without changing behavior)
- **Bug fixes** — correcting incorrect behavior
- **Features** — adding new functionality
- **Tests** — adding or improving tests for existing behavior (coverage gaps, edge cases, flaky test fixes). Tests that accompany a new feature or bug fix belong in that commit, but standalone test work is its own category.
- **Dependencies** — adding, removing, or upgrading dependencies
- **Configuration** — changes to CI workflows, linter settings, build configs, pre-commit hooks, or other tooling

When a task involves more than one of these, make separate commits in a logical order. For example, if a bug fix requires a refactor first, commit the refactor, then commit the fix. If a feature benefits from tidying nearby code, commit the tidying first, then the feature.

Each commit should make sense in isolation: it should pass tests, not break the build, and have a clear message explaining *what* and *why*.

Finally we require all commits to be signed with GPG keys. You can inspect if a GPG is present via `git config --global --get user.signingkey`. If it is not, please help the user setup a github GPG key.

## Pull Requests

- Target the `main` branch
- Signed commits required (GPG)
- CLA signature required for external contributors
- Add a changie entry unless the work done was limited to adding/changing tests, adding/changing comments, adding/changing github actions/workflows, or adding/changing markdown files not used during operation of the engine


================================================
FILE: ARCHITECTURE.md
================================================
The core function of dbt is SQL compilation and execution. Users create projects of dbt resources (models, tests, seeds, snapshots, ...), defined in SQL and YAML files, and they invoke dbt to create, update, or query associated views and tables. Today, dbt makes heavy use of Jinja2 to enable the templating of SQL, and to construct a DAG (Directed Acyclic Graph) from all of the resources in a project. Users can also extend their projects by installing resources (including Jinja macros) from other projects, called "packages."

## dbt-core

Most of the python code in the repository is within the `core/dbt` directory.
- [`single python files`](core/dbt/README.md): A number of individual files, such as 'comp
Download .txt
gitextract_6zoc49gl/

├── .changes/
│   ├── 0.0.0.md
│   ├── README.md
│   ├── header.tpl.md
│   └── unreleased/
│       ├── .gitkeep
│       ├── Dependencies-20251118-155354.yaml
│       ├── Dependencies-20251217-151349.yaml
│       ├── Dependencies-20251219-153804.yaml
│       ├── Dependencies-20260113-135442.yaml
│       ├── Dependencies-20260113-143057.yaml
│       ├── Dependencies-20260121-171712.yaml
│       ├── Dependencies-20260302-130425.yaml
│       ├── Docs-20240311-140344.yaml
│       ├── Docs-20240501-021050.yaml
│       ├── Docs-20240516-223036.yaml
│       ├── Docs-20240613-151048.yaml
│       ├── Docs-20250728-162542.yaml
│       ├── Docs-20260319-112630.yaml
│       ├── Features-20251006-140352.yaml
│       ├── Features-20251111-103504.yaml
│       ├── Features-20251117-141053.yaml
│       ├── Features-20251201-165209.yaml
│       ├── Features-20251203-122926.yaml
│       ├── Features-20251210-202001.yaml
│       ├── Features-20260115-131115.yaml
│       ├── Features-20260119-210143.yaml
│       ├── Features-20260123-173805.yaml
│       ├── Features-20260126-164458.yaml
│       ├── Features-20260127-114149.yaml
│       ├── Features-20260127-214617.yaml
│       ├── Features-20260128-125727.yaml
│       ├── Features-20260128-172052.yaml
│       ├── Features-20260129-110711.yaml
│       ├── Features-20260129-114832.yaml
│       ├── Features-20260129-175432.yaml
│       ├── Features-20260129-185659.yaml
│       ├── Features-20260205-105228.yaml
│       ├── Features-20260212-232728.yaml
│       ├── Features-20260219-133321.yaml
│       ├── Features-20260302-123311.yaml
│       ├── Features-20260303-214328.yaml
│       ├── Features-9041.yaml
│       ├── Fixes-20250922-151726.yaml
│       ├── Fixes-20251117-140649.yaml
│       ├── Fixes-20251117-185025.yaml
│       ├── Fixes-20251118-171106.yaml
│       ├── Fixes-20251119-195034.yaml
│       ├── Fixes-20251124-155629.yaml
│       ├── Fixes-20251124-155756.yaml
│       ├── Fixes-20251124-170855.yaml
│       ├── Fixes-20251125-120246.yaml
│       ├── Fixes-20251125-122020.yaml
│       ├── Fixes-20251127-141308.yaml
│       ├── Fixes-20251127-145929.yaml
│       ├── Fixes-20251127-170124.yaml
│       ├── Fixes-20251128-102129.yaml
│       ├── Fixes-20251128-122838.yaml
│       ├── Fixes-20251128-161937.yaml
│       ├── Fixes-20251128-163144.yaml
│       ├── Fixes-20251202-133705.yaml
│       ├── Fixes-20251204-094753.yaml
│       ├── Fixes-20251209-175031.yaml
│       ├── Fixes-20251210-143935.yaml
│       ├── Fixes-20251216-120727.yaml
│       ├── Fixes-20251217-002813.yaml
│       ├── Fixes-20251217-105918.yaml
│       ├── Fixes-20251219-184405.yaml
│       ├── Fixes-20260109-141332.yaml
│       ├── Fixes-20260113-161742.yaml
│       ├── Fixes-20260124-212300.yaml
│       ├── Fixes-20260125-113244.yaml
│       ├── Fixes-20260126-160659.yaml
│       ├── Fixes-20260202-123453.yaml
│       ├── Fixes-20260202-153835.yaml
│       ├── Fixes-20260204-184553.yaml
│       ├── Fixes-20260204-211128.yaml
│       ├── Fixes-20260205-120000.yaml
│       ├── Fixes-20260206-204257.yaml
│       ├── Fixes-20260210-154042.yaml
│       ├── Fixes-20260216-230817.yaml
│       ├── Fixes-20260219-012414.yaml
│       ├── Fixes-20260219-131833.yaml
│       ├── Fixes-20260219-170000.yaml
│       ├── Fixes-20260223-132342.yaml
│       ├── Fixes-20260223-161820.yaml
│       ├── Fixes-20260224-115546.yaml
│       ├── Fixes-20260224-180000.yaml
│       ├── Fixes-20260224-231047.yaml
│       ├── Fixes-20260225-203131.yaml
│       ├── Fixes-20260226-163836.yaml
│       ├── Fixes-20260227-133424.yaml
│       ├── Fixes-20260227-140009.yaml
│       ├── Fixes-20260302-000739.yaml
│       ├── Fixes-20260303-114528.yaml
│       ├── Fixes-20260305-133929.yaml
│       ├── Fixes-20260306-034008.yaml
│       ├── Fixes-20260306-071359.yaml
│       ├── Fixes-20260306-192013.yaml
│       ├── Fixes-20260310-120000.yaml
│       ├── Fixes-20260317-094953.yaml
│       ├── Fixes-20260318-000000.yaml
│       ├── Fixes-20260318-091800.yaml
│       ├── Fixes-20260318-173426.yaml
│       ├── Fixes-20260318-182358.yaml
│       ├── Fixes-20260318-191153.yaml
│       ├── Fixes-20260318-200626.yaml
│       ├── Under the Hood-20250929-151159.yaml
│       ├── Under the Hood-20251119-110110.yaml
│       ├── Under the Hood-20251121-140515.yaml
│       ├── Under the Hood-20251209-131857.yaml
│       ├── Under the Hood-20251215-155046.yaml
│       ├── Under the Hood-20260205-200835.yaml
│       ├── Under the Hood-20260210-151244.yaml
│       ├── Under the Hood-20260214-181659.yaml
│       ├── Under the Hood-20260220-170741.yaml
│       ├── Under the Hood-20260223-121653.yaml
│       ├── Under the Hood-20260225-092728.yaml
│       ├── Under the Hood-20260302-101022.yaml
│       ├── Under the Hood-20260306-182611.yaml
│       └── Under the Hood-20260318-120715.yaml
├── .changie.yaml
├── .dockerignore
├── .flake8
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── code-docs.yml
│   │   ├── config.yml
│   │   ├── feature-request.yml
│   │   ├── implementation-ticket.yml
│   │   └── regression-report.yml
│   ├── _README.md
│   ├── actions/
│   │   ├── latest-wrangler/
│   │   │   ├── Dockerfile
│   │   │   ├── README.md
│   │   │   ├── action.yml
│   │   │   ├── examples/
│   │   │   │   ├── example_workflow.yml
│   │   │   │   └── example_workflow_dispatch.json
│   │   │   └── main.py
│   │   └── setup-postgres-windows/
│   │       └── action.yml
│   ├── dbt-postgres-testing.yml
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── artifact-reviews.yml
│       ├── auto-respond-bug-reports.yml
│       ├── backport.yml
│       ├── bot-changelog.yml
│       ├── changelog-existence.yml
│       ├── check-artifact-changes.yml
│       ├── community-label.yml
│       ├── cut-release-branch.yml
│       ├── docs-issue.yml
│       ├── main.yml
│       ├── nightly-release.yml
│       ├── release-branch-tests.yml
│       ├── release.yml
│       ├── repository-cleanup.yml
│       ├── schema-check.yml
│       ├── stale.yml
│       ├── structured-logging-schema-check.yml
│       ├── test-repeater.yml
│       ├── triage-labels.yml
│       └── update-test-durations.yml
├── .gitignore
├── .pre-commit-config.yaml
├── AGENTS.md
├── ARCHITECTURE.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Dockerfile.test
├── Makefile
├── README.md
├── SECURITY.md
├── codecov.yml
├── core/
│   ├── .test_durations
│   ├── LICENSE
│   ├── README.md
│   ├── dbt/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── __version__.py
│   │   ├── _pydantic_shim.py
│   │   ├── artifacts/
│   │   │   ├── __init__.py
│   │   │   ├── exceptions/
│   │   │   │   ├── __init__.py
│   │   │   │   └── schemas.py
│   │   │   ├── resources/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   ├── types.py
│   │   │   │   └── v1/
│   │   │   │       ├── analysis.py
│   │   │   │       ├── catalog.py
│   │   │   │       ├── components.py
│   │   │   │       ├── config.py
│   │   │   │       ├── documentation.py
│   │   │   │       ├── exposure.py
│   │   │   │       ├── function.py
│   │   │   │       ├── generic_test.py
│   │   │   │       ├── group.py
│   │   │   │       ├── hook.py
│   │   │   │       ├── macro.py
│   │   │   │       ├── metric.py
│   │   │   │       ├── model.py
│   │   │   │       ├── owner.py
│   │   │   │       ├── saved_query.py
│   │   │   │       ├── seed.py
│   │   │   │       ├── semantic_layer_components.py
│   │   │   │       ├── semantic_model.py
│   │   │   │       ├── singular_test.py
│   │   │   │       ├── snapshot.py
│   │   │   │       ├── source_definition.py
│   │   │   │       ├── sql_operation.py
│   │   │   │       └── unit_test_definition.py
│   │   │   ├── schemas/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   ├── batch_results.py
│   │   │   │   ├── catalog/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── v1/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── catalog.py
│   │   │   │   ├── freshness/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── v3/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── freshness.py
│   │   │   │   ├── manifest/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── v12/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── manifest.py
│   │   │   │   ├── results.py
│   │   │   │   ├── run/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── v5/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── run.py
│   │   │   │   └── upgrades/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── upgrade_manifest.py
│   │   │   │       └── upgrade_manifest_dbt_version.py
│   │   │   └── utils/
│   │   │       └── validation.py
│   │   ├── cli/
│   │   │   ├── __init__.py
│   │   │   ├── context.py
│   │   │   ├── exceptions.py
│   │   │   ├── flags.py
│   │   │   ├── main.py
│   │   │   ├── option_types.py
│   │   │   ├── options.py
│   │   │   ├── params.py
│   │   │   ├── requires.py
│   │   │   ├── resolvers.py
│   │   │   └── types.py
│   │   ├── clients/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── checked_load.py
│   │   │   ├── git.py
│   │   │   ├── jinja.py
│   │   │   ├── jinja_static.py
│   │   │   ├── registry.py
│   │   │   └── yaml_helper.py
│   │   ├── compilation.py
│   │   ├── config/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── catalogs.py
│   │   │   ├── profile.py
│   │   │   ├── project.py
│   │   │   ├── renderer.py
│   │   │   ├── runtime.py
│   │   │   ├── selectors.py
│   │   │   └── utils.py
│   │   ├── constants.py
│   │   ├── context/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── base.py
│   │   │   ├── configured.py
│   │   │   ├── context_config.py
│   │   │   ├── docs.py
│   │   │   ├── exceptions_jinja.py
│   │   │   ├── macro_resolver.py
│   │   │   ├── macros.py
│   │   │   ├── manifest.py
│   │   │   ├── providers.py
│   │   │   ├── query_header.py
│   │   │   ├── secret.py
│   │   │   └── target.py
│   │   ├── contracts/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── files.py
│   │   │   ├── graph/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── manifest.py
│   │   │   │   ├── metrics.py
│   │   │   │   ├── model_config.py
│   │   │   │   ├── node_args.py
│   │   │   │   ├── nodes.py
│   │   │   │   ├── semantic_manifest.py
│   │   │   │   └── unparsed.py
│   │   │   ├── project.py
│   │   │   ├── results.py
│   │   │   ├── selection.py
│   │   │   ├── sql.py
│   │   │   ├── state.py
│   │   │   └── util.py
│   │   ├── deprecations.py
│   │   ├── deps/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── base.py
│   │   │   ├── git.py
│   │   │   ├── local.py
│   │   │   ├── registry.py
│   │   │   ├── resolver.py
│   │   │   └── tarball.py
│   │   ├── docs/
│   │   │   ├── Makefile
│   │   │   ├── build/
│   │   │   │   ├── doctrees/
│   │   │   │   │   ├── environment.pickle
│   │   │   │   │   └── index.doctree
│   │   │   │   └── html/
│   │   │   │       ├── .buildinfo
│   │   │   │       ├── _sources/
│   │   │   │       │   └── index.rst.txt
│   │   │   │       ├── _static/
│   │   │   │       │   ├── _sphinx_javascript_frameworks_compat.js
│   │   │   │       │   ├── alabaster.css
│   │   │   │       │   ├── basic.css
│   │   │   │       │   ├── custom.css
│   │   │   │       │   ├── doctools.js
│   │   │   │       │   ├── documentation_options.js
│   │   │   │       │   ├── jquery-3.6.0.js
│   │   │   │       │   ├── jquery.js
│   │   │   │       │   ├── language_data.js
│   │   │   │       │   ├── pygments.css
│   │   │   │       │   ├── searchtools.js
│   │   │   │       │   ├── sphinx_highlight.js
│   │   │   │       │   ├── underscore-1.13.1.js
│   │   │   │       │   └── underscore.js
│   │   │   │       ├── genindex.html
│   │   │   │       ├── objects.inv
│   │   │   │       ├── search.html
│   │   │   │       └── searchindex.js
│   │   │   ├── make.bat
│   │   │   └── source/
│   │   │       ├── _ext/
│   │   │       │   └── dbt_click.py
│   │   │       ├── conf.py
│   │   │       └── index.rst
│   │   ├── env_vars.py
│   │   ├── event_time/
│   │   │   ├── event_time.py
│   │   │   └── sample_window.py
│   │   ├── events/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── base_types.py
│   │   │   ├── core_types_pb2.py
│   │   │   ├── logging.py
│   │   │   └── types.py
│   │   ├── exceptions.py
│   │   ├── flags.py
│   │   ├── graph/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── cli.py
│   │   │   ├── graph.py
│   │   │   ├── queue.py
│   │   │   ├── selector.py
│   │   │   ├── selector_methods.py
│   │   │   ├── selector_spec.py
│   │   │   └── thread_pool.py
│   │   ├── hooks.py
│   │   ├── include/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   └── starter_project/
│   │   │       ├── .gitignore
│   │   │       ├── README.md
│   │   │       ├── __init__.py
│   │   │       ├── analyses/
│   │   │       │   └── .gitkeep
│   │   │       ├── dbt_project.yml
│   │   │       ├── macros/
│   │   │       │   └── .gitkeep
│   │   │       ├── models/
│   │   │       │   └── example/
│   │   │       │       ├── my_first_dbt_model.sql
│   │   │       │       ├── my_second_dbt_model.sql
│   │   │       │       └── schema.yml
│   │   │       ├── seeds/
│   │   │       │   └── .gitkeep
│   │   │       ├── snapshots/
│   │   │       │   └── .gitkeep
│   │   │       └── tests/
│   │   │           └── .gitkeep
│   │   ├── internal_deprecations.py
│   │   ├── jsonschemas/
│   │   │   ├── __init__.py
│   │   │   ├── jsonschemas.py
│   │   │   ├── project/
│   │   │   │   ├── 0.0.110.json
│   │   │   │   └── 0.0.85.json
│   │   │   └── resources/
│   │   │       ├── 0.0.110.json
│   │   │       ├── 0.0.85.json
│   │   │       └── latest.json
│   │   ├── links.py
│   │   ├── materializations/
│   │   │   ├── __init__.py
│   │   │   └── incremental/
│   │   │       ├── __init__.py
│   │   │       └── microbatch.py
│   │   ├── mp_context.py
│   │   ├── node_types.py
│   │   ├── parser/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── analysis.py
│   │   │   ├── base.py
│   │   │   ├── common.py
│   │   │   ├── docs.py
│   │   │   ├── fixtures.py
│   │   │   ├── functions.py
│   │   │   ├── generic_test.py
│   │   │   ├── generic_test_builders.py
│   │   │   ├── hooks.py
│   │   │   ├── macros.py
│   │   │   ├── manifest.py
│   │   │   ├── models.py
│   │   │   ├── partial.py
│   │   │   ├── read_files.py
│   │   │   ├── schema_generic_tests.py
│   │   │   ├── schema_renderer.py
│   │   │   ├── schema_yaml_readers.py
│   │   │   ├── schemas.py
│   │   │   ├── search.py
│   │   │   ├── seeds.py
│   │   │   ├── singular_test.py
│   │   │   ├── snapshots.py
│   │   │   ├── sources.py
│   │   │   ├── sql.py
│   │   │   └── unit_tests.py
│   │   ├── plugins/
│   │   │   ├── __init__.py
│   │   │   ├── contracts.py
│   │   │   ├── exceptions.py
│   │   │   ├── manager.py
│   │   │   └── manifest.py
│   │   ├── profiler.py
│   │   ├── py.typed
│   │   ├── runners/
│   │   │   ├── __init__.py
│   │   │   ├── exposure_runner.py
│   │   │   ├── no_op_runner.py
│   │   │   └── saved_query_runner.py
│   │   ├── selected_resources.py
│   │   ├── task/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── base.py
│   │   │   ├── build.py
│   │   │   ├── clean.py
│   │   │   ├── clone.py
│   │   │   ├── compile.py
│   │   │   ├── debug.py
│   │   │   ├── deps.py
│   │   │   ├── docs/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── generate.py
│   │   │   │   └── serve.py
│   │   │   ├── freshness.py
│   │   │   ├── function.py
│   │   │   ├── group_lookup.py
│   │   │   ├── init.py
│   │   │   ├── list.py
│   │   │   ├── printer.py
│   │   │   ├── retry.py
│   │   │   ├── run.py
│   │   │   ├── run_operation.py
│   │   │   ├── runnable.py
│   │   │   ├── seed.py
│   │   │   ├── show.py
│   │   │   ├── snapshot.py
│   │   │   ├── sql.py
│   │   │   └── test.py
│   │   ├── tests/
│   │   │   ├── fixtures/
│   │   │   │   ├── __init__.py
│   │   │   │   └── project.py
│   │   │   └── util.py
│   │   ├── tracking.py
│   │   ├── utils/
│   │   │   ├── __init__.py
│   │   │   ├── artifact_upload.py
│   │   │   └── utils.py
│   │   └── version.py
│   ├── hatch.toml
│   └── pyproject.toml
├── docker/
│   ├── Dockerfile
│   ├── README.md
│   └── test.sh
├── docker-compose.yml
├── docs/
│   ├── arch/
│   │   ├── 1_Overview.md
│   │   ├── 2_CLI.md
│   │   ├── 3.1_Partial_Parsing.md
│   │   ├── 3.2_Deferral.md
│   │   ├── 3_Parsing.md
│   │   ├── 4.1_Task_Framework.md
│   │   ├── 4.2_Graph_Compilation.md
│   │   ├── 4.3_Node_Selection.md
│   │   ├── 4.4_Node_Compilation.md
│   │   ├── 4.5_Node_Materialization.md
│   │   ├── 4_Execution.md
│   │   ├── 5_Adapter.md
│   │   ├── 6.10_dbt_compile.md
│   │   ├── 6.11_dbt_source.md
│   │   ├── 6.12_dbt_run-operation.md
│   │   ├── 6.13_dbt_init.md
│   │   ├── 6.14_dbt_list.md
│   │   ├── 6.15_dbt_retry.md
│   │   ├── 6.16_dbt_clone.md
│   │   ├── 6.17_dbt_debug.md
│   │   ├── 6.18_dbt_clean.md
│   │   ├── 6.1_dbt_parse.md
│   │   ├── 6.2_dbt_run.md
│   │   ├── 6.3_dbt_build.md
│   │   ├── 6.4_dbt_seed.md
│   │   ├── 6.5_dbt_snapshot.md
│   │   ├── 6.6_dbt_test.md
│   │   ├── 6.7_dbt_show.md
│   │   ├── 6.8_dbt_deps.md
│   │   ├── 6.9_dbt_docs.md
│   │   ├── 6_Commands.md
│   │   ├── 7_Artifacts.md
│   │   └── 8_Versioning_Branching_Strategy.md
│   ├── guides/
│   │   ├── behavior-change-flags.md
│   │   └── parsing-vs-compilation-vs-runtime.md
│   └── roadmap/
│       ├── 2022-05-dbt-a-core-story.md
│       ├── 2022-08-back-for-more.md
│       ├── 2023-02-back-to-basics.md
│       ├── 2023-11-dbt-tng.md
│       ├── 2024-12-play-on.md
│       ├── 2025-05-new-engine-same-language.md
│       └── 2025-12-magic-to-do.md
├── hatch.toml
├── pyproject.toml
├── pytest.ini
├── requirements.txt
├── schemas/
│   └── dbt/
│       ├── catalog/
│       │   └── v1.json
│       ├── manifest/
│       │   ├── v10.json
│       │   ├── v11.json
│       │   ├── v12.json
│       │   ├── v5.json
│       │   ├── v6.json
│       │   ├── v7.json
│       │   ├── v8.json
│       │   └── v9.json
│       ├── run-results/
│       │   ├── v4.json
│       │   ├── v5.json
│       │   └── v6.json
│       └── sources/
│           └── v3.json
├── scripts/
│   ├── check_libyaml.py
│   ├── collect-artifact-schema.py
│   ├── collect-dbt-contexts.py
│   ├── env-setup.sh
│   ├── migrate-adapters.py
│   ├── pre-commit-hooks/
│   │   └── no_versioned_artifact_resource_imports.py
│   ├── setup_db.sh
│   └── update_dev_packages.sh
├── tests/
│   ├── __init__.py
│   ├── conftest.py
│   ├── data/
│   │   └── __init__.py
│   ├── fixtures/
│   │   ├── __init__.py
│   │   ├── dbt_integration_project.py
│   │   ├── jaffle_shop.py
│   │   └── jaffle_shop_data/
│   │       ├── .gitkeep
│   │       ├── raw_customers.csv
│   │       ├── raw_orders.csv
│   │       └── raw_payments.csv
│   ├── functional/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── access/
│   │   │   └── test_access.py
│   │   ├── analysis/
│   │   │   └── test_analyses.py
│   │   ├── artifacts/
│   │   │   ├── data/
│   │   │   │   ├── results/
│   │   │   │   │   ├── v4/
│   │   │   │   │   │   └── run_results.json
│   │   │   │   │   ├── v5/
│   │   │   │   │   │   └── run_results.json
│   │   │   │   │   └── v6/
│   │   │   │   │       └── run_results.json
│   │   │   │   └── state/
│   │   │   │       ├── v1/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v10/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v11/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v12/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v2/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v3/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v4/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v5/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v6/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v7/
│   │   │   │       │   └── manifest.json
│   │   │   │       ├── v8/
│   │   │   │       │   └── manifest.json
│   │   │   │       └── v9/
│   │   │   │           └── manifest.json
│   │   │   ├── expected_manifest.py
│   │   │   ├── expected_run_results.py
│   │   │   ├── test_artifact_fields.py
│   │   │   ├── test_artifacts.py
│   │   │   ├── test_docs_generate_defer.py
│   │   │   ├── test_override.py
│   │   │   ├── test_previous_version_state.py
│   │   │   ├── test_run_execution_result.py
│   │   │   └── test_run_results.py
│   │   ├── assertions/
│   │   │   └── test_runner.py
│   │   ├── basic/
│   │   │   ├── data/
│   │   │   │   ├── seed-initial.csv
│   │   │   │   ├── seed-update.csv
│   │   │   │   ├── summary_expected.csv
│   │   │   │   ├── summary_expected_update.csv
│   │   │   │   ├── varchar10_seed.sql
│   │   │   │   └── varchar300_seed.sql
│   │   │   ├── test_basic.py
│   │   │   ├── test_invalid_reference.py
│   │   │   ├── test_jaffle_shop.py
│   │   │   ├── test_mixed_case_db.py
│   │   │   ├── test_project.py
│   │   │   ├── test_simple_reference.py
│   │   │   └── test_varchar_widening.py
│   │   ├── build_command/
│   │   │   ├── fixtures.py
│   │   │   └── test_build.py
│   │   ├── catalogs/
│   │   │   └── test_catalogs_parsing.py
│   │   ├── clean/
│   │   │   └── test_clean.py
│   │   ├── cli/
│   │   │   ├── test_cli_exit_codes.py
│   │   │   ├── test_click_flags.py
│   │   │   ├── test_env_var_deprecations.py
│   │   │   ├── test_error_handling.py
│   │   │   ├── test_multioption.py
│   │   │   ├── test_option_interaction_validations.py
│   │   │   ├── test_requires.py
│   │   │   └── test_resolvers.py
│   │   ├── colors/
│   │   │   └── test_colors.py
│   │   ├── column_quoting/
│   │   │   └── test_column_quotes.py
│   │   ├── compile/
│   │   │   ├── fixtures.py
│   │   │   └── test_compile.py
│   │   ├── configs/
│   │   │   ├── fixtures.py
│   │   │   ├── test_configs.py
│   │   │   ├── test_configs_in_schema_files.py
│   │   │   ├── test_contract_configs.py
│   │   │   ├── test_custom_node_colors_configs.py
│   │   │   ├── test_disabled_configs.py
│   │   │   ├── test_disabled_model.py
│   │   │   ├── test_dupe_paths.py
│   │   │   ├── test_get_default.py
│   │   │   ├── test_grant_configs.py
│   │   │   ├── test_indiv_tests.py
│   │   │   ├── test_unused_configs.py
│   │   │   ├── test_vars_file.py
│   │   │   ├── test_versioned_model_constraint.py
│   │   │   └── test_warn_error_options.py
│   │   ├── conftest.py
│   │   ├── constraints/
│   │   │   ├── fixtures.py
│   │   │   └── test_foreign_key_constraints.py
│   │   ├── context_methods/
│   │   │   ├── first_dependency.py
│   │   │   ├── test_builtin_functions.py
│   │   │   ├── test_cli_var_override.py
│   │   │   ├── test_cli_vars.py
│   │   │   ├── test_custom_env_vars.py
│   │   │   ├── test_env_vars.py
│   │   │   ├── test_secret_env_vars.py
│   │   │   ├── test_var_dependency.py
│   │   │   ├── test_var_in_generate_name.py
│   │   │   └── test_yaml_functions.py
│   │   ├── contracts/
│   │   │   ├── test_contract_enforcement.py
│   │   │   ├── test_contract_precision.py
│   │   │   └── test_nonstandard_data_type.py
│   │   ├── custom_aliases/
│   │   │   ├── fixtures.py
│   │   │   └── test_custom_aliases.py
│   │   ├── custom_schemas/
│   │   │   └── test_custom_schemas.py
│   │   ├── custom_singular_tests/
│   │   │   ├── data/
│   │   │   │   └── seed_expected.sql
│   │   │   └── test_custom_singular_tests.py
│   │   ├── custom_target_path/
│   │   │   └── test_custom_target_path.py
│   │   ├── cycles/
│   │   │   └── test_cycles.py
│   │   ├── data_test_patch/
│   │   │   ├── fixtures.py
│   │   │   └── test_singular_test_patch.py
│   │   ├── data_tests/
│   │   │   └── test_hooks.py
│   │   ├── dbt_runner/
│   │   │   └── test_dbt_runner.py
│   │   ├── defer_state/
│   │   │   ├── data/
│   │   │   │   └── manifest.json
│   │   │   ├── fixtures.py
│   │   │   ├── test_defer_state.py
│   │   │   ├── test_group_updates.py
│   │   │   ├── test_modified_state.py
│   │   │   ├── test_modified_state_environment_vars.py
│   │   │   ├── test_modified_state_jinja.py
│   │   │   ├── test_modified_state_schema_evolution.py
│   │   │   ├── test_modified_state_sources_unrendered.py
│   │   │   ├── test_modified_state_vars.py
│   │   │   ├── test_removed_test_state.py
│   │   │   ├── test_run_results_state.py
│   │   │   └── test_unrendered_config.py
│   │   ├── dependencies/
│   │   │   ├── data/
│   │   │   │   ├── seed.sql
│   │   │   │   └── update.sql
│   │   │   ├── duplicate_dependency/
│   │   │   │   └── dbt_project.yml
│   │   │   ├── early_hook_dependency/
│   │   │   │   └── dbt_project.yml
│   │   │   ├── inverted_ref_dependency/
│   │   │   │   ├── dbt_project.yml
│   │   │   │   └── models/
│   │   │   │       ├── a.sql
│   │   │   │       ├── b.sql
│   │   │   │       └── b_root_package_in_ref.sql
│   │   │   ├── late_hook_dependency/
│   │   │   │   └── dbt_project.yml
│   │   │   ├── local_dependency/
│   │   │   │   ├── dbt_project.yml
│   │   │   │   ├── macros/
│   │   │   │   │   ├── dep_macro.sql
│   │   │   │   │   └── generate_schema_name.sql
│   │   │   │   ├── models/
│   │   │   │   │   ├── model_to_import.sql
│   │   │   │   │   └── schema.yml
│   │   │   │   └── seeds/
│   │   │   │       └── seed.csv
│   │   │   ├── models_local/
│   │   │   │   ├── dep_source_model.sql
│   │   │   │   ├── my_configured_model.sql
│   │   │   │   ├── my_model.sql
│   │   │   │   ├── schema.yml
│   │   │   │   └── source_override_model.sql
│   │   │   ├── nested_dependency/
│   │   │   │   ├── dbt_project.yml
│   │   │   │   ├── models/
│   │   │   │   │   └── model.sql
│   │   │   │   └── packages.yml
│   │   │   ├── test_add_package_edge_cases.py
│   │   │   ├── test_dependency_inverted_ref.py
│   │   │   ├── test_dependency_options.py
│   │   │   ├── test_dependency_secrets.py
│   │   │   ├── test_local_dependency.py
│   │   │   ├── test_simple_dependency.py
│   │   │   ├── test_simple_dependency_with_configs.py
│   │   │   └── test_uninstalled_package_found_error.py
│   │   ├── deprecations/
│   │   │   ├── fixtures.py
│   │   │   ├── test_config_deprecations.py
│   │   │   ├── test_deprecations.py
│   │   │   ├── test_missing_plus_in_config_deprecations.py
│   │   │   └── test_model_deprecations.py
│   │   ├── deps/
│   │   │   └── test_deps_with_vars.py
│   │   ├── docs/
│   │   │   ├── test_doc_blocks_backcompat.py
│   │   │   ├── test_doc_blocks_formatting.py
│   │   │   ├── test_doc_concat_arg.py
│   │   │   ├── test_doc_variable_arg.py
│   │   │   ├── test_duplicate_docs_block.py
│   │   │   ├── test_generate.py
│   │   │   ├── test_good_docs_blocks.py
│   │   │   ├── test_invalid_doc_ref.py
│   │   │   ├── test_missing_docs_blocks.py
│   │   │   ├── test_model_version_docs_blocks.py
│   │   │   └── test_static.py
│   │   ├── duplicates/
│   │   │   ├── test_duplicate_analysis.py
│   │   │   ├── test_duplicate_exposure.py
│   │   │   ├── test_duplicate_macro.py
│   │   │   ├── test_duplicate_metric.py
│   │   │   ├── test_duplicate_model.py
│   │   │   ├── test_duplicate_resource.py
│   │   │   ├── test_duplicate_resource_names.py
│   │   │   └── test_duplicate_source.py
│   │   ├── events/
│   │   │   └── events.py
│   │   ├── exit_codes/
│   │   │   ├── fixtures.py
│   │   │   └── test_exit_codes.py
│   │   ├── experimental_parser/
│   │   │   └── test_all_experimental_parser.py
│   │   ├── exposures/
│   │   │   ├── fixtures.py
│   │   │   ├── test_exposure_configs.py
│   │   │   └── test_exposures.py
│   │   ├── external_reference/
│   │   │   └── test_external_reference.py
│   │   ├── fail_fast/
│   │   │   └── test_fail_fast_run.py
│   │   ├── fixtures/
│   │   │   ├── __init__.py
│   │   │   ├── happy_path_fixture.py
│   │   │   └── happy_path_project/
│   │   │       ├── analyses/
│   │   │       │   ├── a.sql
│   │   │       │   └── a.yml
│   │   │       ├── dbt_project.yml
│   │   │       ├── functions/
│   │   │       │   ├── area_of_circle.sql
│   │   │       │   └── area_of_circle.yml
│   │   │       ├── macros/
│   │   │       │   ├── expression_is_true.sql
│   │   │       │   └── macro_stuff.sql
│   │   │       ├── models/
│   │   │       │   ├── docs.md
│   │   │       │   ├── e.yml
│   │   │       │   ├── ephemeral.sql
│   │   │       │   ├── g.yml
│   │   │       │   ├── incremental.sql
│   │   │       │   ├── m.yml
│   │   │       │   ├── macros.yml
│   │   │       │   ├── metricflow_time_spine.sql
│   │   │       │   ├── metricflow_time_spine_second.sql
│   │   │       │   ├── model_to_unit_test.sql
│   │   │       │   ├── model_with_lots_of_schema_configs.sql
│   │   │       │   ├── outer.sql
│   │   │       │   ├── schema.yml
│   │   │       │   ├── sm.yml
│   │   │       │   ├── snapshot_source.sql
│   │   │       │   ├── sq.yml
│   │   │       │   ├── sub/
│   │   │       │   │   └── inner.sql
│   │   │       │   └── unit_tests.yml
│   │   │       ├── seeds/
│   │   │       │   ├── s.yml
│   │   │       │   └── seed.csv
│   │   │       ├── snapshots/
│   │   │       │   ├── snapshot.sql
│   │   │       │   ├── snapshot_2.yml
│   │   │       │   └── snapshot_3.yml
│   │   │       └── tests/
│   │   │           ├── fixtures/
│   │   │           │   └── test_incremental_fixture.csv
│   │   │           ├── generic/
│   │   │           │   └── my_generic_test.sql
│   │   │           ├── schema.yml
│   │   │           └── t.sql
│   │   ├── fixtures.py
│   │   ├── functions/
│   │   │   ├── test_udafs.py
│   │   │   └── test_udfs.py
│   │   ├── generic_test_description/
│   │   │   ├── fixtures.py
│   │   │   └── test_generic_test_description.py
│   │   ├── graph_selection/
│   │   │   ├── data/
│   │   │   │   ├── seed.csv
│   │   │   │   └── summary_expected.csv
│   │   │   ├── fixtures.py
│   │   │   ├── test_graph_selection.py
│   │   │   ├── test_group_selection.py
│   │   │   ├── test_inline.py
│   │   │   ├── test_intersection_syntax.py
│   │   │   ├── test_schema_test_graph_selection.py
│   │   │   ├── test_tag_selection.py
│   │   │   └── test_version_selection.py
│   │   ├── incremental_schema_tests/
│   │   │   ├── fixtures.py
│   │   │   └── test_incremental_schema.py
│   │   ├── init/
│   │   │   └── test_init.py
│   │   ├── invalid_model_tests/
│   │   │   ├── test_invalid_models.py
│   │   │   └── test_model_logging.py
│   │   ├── list/
│   │   │   ├── fixtures.py
│   │   │   ├── test_commands.py
│   │   │   └── test_list.py
│   │   ├── logging/
│   │   │   ├── test_logging.py
│   │   │   └── test_meta_logging.py
│   │   ├── macros/
│   │   │   ├── data/
│   │   │   │   └── seed.sql
│   │   │   ├── fixtures.py
│   │   │   ├── package_macro_overrides/
│   │   │   │   ├── dbt_project.yml
│   │   │   │   └── macros/
│   │   │   │       └── macros.sql
│   │   │   ├── test_macro_annotations.py
│   │   │   └── test_macros.py
│   │   ├── manifest_validations/
│   │   │   └── test_check_for_spaces_in_model_names.py
│   │   ├── materializations/
│   │   │   ├── conftest.py
│   │   │   ├── fixtures.py
│   │   │   ├── test_custom_materialization.py
│   │   │   ├── test_ephemeral_compilation.py
│   │   │   ├── test_incremental.py
│   │   │   ├── test_incremental_with_contract.py
│   │   │   ├── test_runtime_materialization.py
│   │   │   └── test_supported_languages.py
│   │   ├── metrics/
│   │   │   ├── fixtures.py
│   │   │   ├── test_metric_configs.py
│   │   │   ├── test_metric_deferral.py
│   │   │   ├── test_metric_helper_functions.py
│   │   │   └── test_metrics.py
│   │   ├── microbatch/
│   │   │   ├── test_microbatch.py
│   │   │   └── test_microbatch_config_validation.py
│   │   ├── minimal_cli/
│   │   │   ├── fixtures.py
│   │   │   └── test_minimal_cli.py
│   │   ├── model_config/
│   │   │   └── test_freshness_config.py
│   │   ├── partial_parsing/
│   │   │   ├── fixtures.py
│   │   │   ├── test_file_diff.py
│   │   │   ├── test_partial_parsing.py
│   │   │   ├── test_pp_disabled_config.py
│   │   │   ├── test_pp_docs.py
│   │   │   ├── test_pp_functions.py
│   │   │   ├── test_pp_groups.py
│   │   │   ├── test_pp_metrics.py
│   │   │   ├── test_pp_schema_file_order.py
│   │   │   ├── test_pp_semantic_models.py
│   │   │   ├── test_pp_undefined_serialization.py
│   │   │   ├── test_pp_vars.py
│   │   │   └── test_versioned_models.py
│   │   ├── permission/
│   │   │   ├── data/
│   │   │   │   └── seed.sql
│   │   │   └── fixtures.py
│   │   ├── postgres/
│   │   │   ├── fixtures.py
│   │   │   ├── test_postgres_indexes.py
│   │   │   └── test_postgres_unlogged_table.py
│   │   ├── primary_keys/
│   │   │   ├── fixtures.py
│   │   │   └── test_primary_keys.py
│   │   ├── profiles/
│   │   │   ├── test_profile_dir.py
│   │   │   └── test_profiles_yml.py
│   │   ├── record/
│   │   │   └── test_record.py
│   │   ├── ref_override/
│   │   │   ├── test_custom_ref_kwargs.py
│   │   │   └── test_ref_override.py
│   │   ├── relation_names/
│   │   │   └── test_relation_name.py
│   │   ├── relation_quoting/
│   │   │   └── test_relation_quoting.py
│   │   ├── retry/
│   │   │   ├── fixtures.py
│   │   │   ├── test_retry.py
│   │   │   └── test_retry_threads.py
│   │   ├── run_operations/
│   │   │   ├── fixtures.py
│   │   │   └── test_run_operations.py
│   │   ├── run_query/
│   │   │   └── test_types.py
│   │   ├── sample_mode/
│   │   │   └── test_sample_mode.py
│   │   ├── saved_queries/
│   │   │   ├── __init__.py
│   │   │   ├── fixtures.py
│   │   │   ├── test_configs.py
│   │   │   ├── test_saved_query_build.py
│   │   │   └── test_saved_query_parsing.py
│   │   ├── schema/
│   │   │   ├── fixtures/
│   │   │   │   ├── macros.py
│   │   │   │   └── sql.py
│   │   │   └── test_custom_schema.py
│   │   ├── schema_tests/
│   │   │   ├── data/
│   │   │   │   ├── seed.sql
│   │   │   │   └── seed_failure.sql
│   │   │   ├── fixtures.py
│   │   │   ├── test_custom_test_config.py
│   │   │   ├── test_schema_v2_tests.py
│   │   │   └── test_sql_header_config.py
│   │   ├── seeds/
│   │   │   └── test_seed_column_type_validation.py
│   │   ├── selected_resources/
│   │   │   ├── fixtures.py
│   │   │   └── test_selected_resources.py
│   │   ├── selectors/
│   │   │   ├── test_default_selectors.py
│   │   │   └── test_selector_selector_method.py
│   │   ├── semantic_models/
│   │   │   ├── fixtures.py
│   │   │   ├── test_semantic_model_configs.py
│   │   │   ├── test_semantic_model_parsing.py
│   │   │   ├── test_semantic_model_v2_parsing.py
│   │   │   └── test_semantic_models.py
│   │   ├── severity/
│   │   │   └── test_severity.py
│   │   ├── show/
│   │   │   ├── fixtures.py
│   │   │   └── test_show.py
│   │   ├── snapshots/
│   │   │   ├── data/
│   │   │   │   ├── invalidate_postgres.sql
│   │   │   │   ├── seed_cn.sql
│   │   │   │   ├── seed_dbt_valid_to.sql
│   │   │   │   ├── seed_pg.sql
│   │   │   │   ├── shared_macros.sql
│   │   │   │   └── update.sql
│   │   │   ├── fixtures.py
│   │   │   ├── test_basic_snapshot.py
│   │   │   ├── test_changing_check_cols_snapshot.py
│   │   │   ├── test_changing_strategy_snapshot.py
│   │   │   ├── test_check_cols_snapshot.py
│   │   │   ├── test_check_cols_updated_at_snapshot.py
│   │   │   ├── test_comment_ending_snapshot.py
│   │   │   ├── test_cross_schema_snapshot.py
│   │   │   ├── test_hard_delete_snapshot.py
│   │   │   ├── test_invalid_namespace_snapshot.py
│   │   │   ├── test_long_text_snapshot.py
│   │   │   ├── test_missing_strategy_snapshot.py
│   │   │   ├── test_renamed_source_snapshot.py
│   │   │   ├── test_select_exclude_snapshot.py
│   │   │   ├── test_slow_query_snapshot.py
│   │   │   ├── test_snapshot_column_names.py
│   │   │   ├── test_snapshot_config.py
│   │   │   ├── test_snapshot_empty.py
│   │   │   └── test_snapshot_timestamps.py
│   │   ├── source_overrides/
│   │   │   ├── fixtures.py
│   │   │   ├── test_simple_source_override.py
│   │   │   └── test_source_overrides_duplicate_model.py
│   │   ├── sources/
│   │   │   ├── common_source_setup.py
│   │   │   ├── data/
│   │   │   │   └── seed.sql
│   │   │   ├── fixtures.py
│   │   │   ├── test_name_chars.py
│   │   │   ├── test_simple_source.py
│   │   │   ├── test_source_configs.py
│   │   │   ├── test_source_fresher_state.py
│   │   │   ├── test_source_freshness.py
│   │   │   └── test_source_loaded_at_field.py
│   │   ├── statements/
│   │   │   ├── fixtures.py
│   │   │   └── test_statements.py
│   │   ├── test_empty.py
│   │   ├── test_project.py
│   │   ├── test_selection/
│   │   │   ├── fixtures.py
│   │   │   └── test_selection_expansion.py
│   │   ├── test_singular_tests.py
│   │   ├── threading/
│   │   │   └── test_thread_count.py
│   │   ├── time_spines/
│   │   │   ├── fixtures.py
│   │   │   └── test_time_spines.py
│   │   ├── timezones/
│   │   │   └── test_timezones.py
│   │   ├── unit_testing/
│   │   │   ├── fixtures.py
│   │   │   ├── test_csv_fixtures.py
│   │   │   ├── test_sql_format.py
│   │   │   ├── test_state.py
│   │   │   ├── test_unit_testing.py
│   │   │   ├── test_ut_adapter_hooks.py
│   │   │   ├── test_ut_aliases.py
│   │   │   ├── test_ut_dependency.py
│   │   │   ├── test_ut_diffing.py
│   │   │   ├── test_ut_ephemeral.py
│   │   │   ├── test_ut_list.py
│   │   │   ├── test_ut_macros.py
│   │   │   ├── test_ut_names.py
│   │   │   ├── test_ut_overrides.py
│   │   │   ├── test_ut_resource_types.py
│   │   │   ├── test_ut_snapshot_dependency.py
│   │   │   ├── test_ut_sources.py
│   │   │   ├── test_ut_variables.py
│   │   │   └── test_ut_versions.py
│   │   └── utils.py
│   └── unit/
│       ├── README.md
│       ├── __init__.py
│       ├── artifacts/
│       │   ├── test_base_resource.py
│       │   └── test_run_execution_result.py
│       ├── cli/
│       │   ├── test_flags.py
│       │   ├── test_main.py
│       │   └── test_option_types.py
│       ├── clients/
│       │   ├── __init__.py
│       │   ├── test_jinja.py
│       │   ├── test_jinja_static.py
│       │   ├── test_registry.py
│       │   └── test_yaml_helper.py
│       ├── config/
│       │   ├── __init__.py
│       │   ├── test_profile.py
│       │   ├── test_project.py
│       │   ├── test_renderer_with_vars.py
│       │   ├── test_runtime.py
│       │   ├── test_selectors.py
│       │   ├── test_utils.py
│       │   └── test_vars_file.py
│       ├── conftest.py
│       ├── context/
│       │   ├── __init__.py
│       │   ├── test_base.py
│       │   ├── test_context.py
│       │   ├── test_macro_resolver.py
│       │   ├── test_providers.py
│       │   └── test_query_header.py
│       ├── contracts/
│       │   ├── __init__.py
│       │   ├── files/
│       │   │   └── test_schema_source_file.py
│       │   ├── graph/
│       │   │   ├── __init__.py
│       │   │   ├── test_manifest.py
│       │   │   ├── test_node_args.py
│       │   │   ├── test_nodes.py
│       │   │   ├── test_nodes_parsed.py
│       │   │   ├── test_semantic_manifest.py
│       │   │   ├── test_udfs.py
│       │   │   └── test_unparsed.py
│       │   └── test_project.py
│       ├── deps/
│       │   ├── __init__.py
│       │   └── test_deps.py
│       ├── event_time/
│       │   ├── test_event_time.py
│       │   └── test_sample_mode.py
│       ├── events/
│       │   ├── __init__.py
│       │   ├── test_logging.py
│       │   └── test_types.py
│       ├── fixtures.py
│       ├── graph/
│       │   ├── __init__.py
│       │   ├── test_cli.py
│       │   ├── test_graph.py
│       │   ├── test_nodes.py
│       │   ├── test_queue.py
│       │   ├── test_selector.py
│       │   ├── test_selector_methods.py
│       │   └── test_selector_spec.py
│       ├── materializations/
│       │   └── incremental/
│       │       └── test_microbatch.py
│       ├── mock_adapter.py
│       ├── parser/
│       │   ├── __init__.py
│       │   ├── test_docs.py
│       │   ├── test_get_doc_blocks.py
│       │   ├── test_manifest.py
│       │   ├── test_parser.py
│       │   ├── test_partial.py
│       │   ├── test_read_files.py
│       │   ├── test_schema_renderer.py
│       │   ├── test_sources.py
│       │   ├── test_unit_tests.py
│       │   └── test_v2_column_semantic_parsing.py
│       ├── plugins/
│       │   └── test_manager.py
│       ├── task/
│       │   ├── __init__.py
│       │   ├── docs/
│       │   │   ├── __init__.py
│       │   │   └── test_serve.py
│       │   ├── test_base.py
│       │   ├── test_build.py
│       │   ├── test_clone.py
│       │   ├── test_docs.py
│       │   ├── test_freshness.py
│       │   ├── test_list.py
│       │   ├── test_retry.py
│       │   ├── test_run.py
│       │   └── test_test.py
│       ├── test_artifact_upload.py
│       ├── test_behavior_flags.py
│       ├── test_compilation.py
│       ├── test_compilation_threading.py
│       ├── test_deprecations.py
│       ├── test_env_vars.py
│       ├── test_events.py
│       ├── test_functions.py
│       ├── test_graph_selection.py
│       ├── test_internal_deprecations.py
│       ├── test_invocation_id.py
│       ├── test_jsonschemas.py
│       ├── test_macro_types.py
│       ├── test_node_types.py
│       ├── test_semantic_layer_nodes_satisfy_protocols.py
│       ├── test_tracking.py
│       ├── test_utils.py
│       ├── test_version.py
│       └── utils/
│           ├── __init__.py
│           ├── adapter.py
│           ├── config.py
│           ├── event_manager.py
│           ├── flags.py
│           ├── manifest.py
│           └── project.py
└── third-party-stubs/
    ├── agate/
    │   ├── __init__.pyi
    │   └── data_types.pyi
    ├── cdecimal/
    │   └── __init__.pyi
    ├── daff/
    │   └── __init__.pyi
    ├── mashumaro/
    │   ├── __init__.pyi
    │   ├── config.pyi
    │   ├── core/
    │   │   ├── __init__.pyi
    │   │   ├── const.pyi
    │   │   ├── helpers.pyi
    │   │   └── meta/
    │   │       ├── __init__.pyi
    │   │       ├── code/
    │   │       │   ├── __init__.pyi
    │   │       │   ├── builder.pyi
    │   │       │   └── lines.pyi
    │   │       ├── helpers.pyi
    │   │       ├── mixin.pyi
    │   │       └── types/
    │   │           ├── __init__.pyi
    │   │           ├── common.pyi
    │   │           ├── pack.pyi
    │   │           └── unpack.pyi
    │   ├── dialect.pyi
    │   ├── exceptions.pyi
    │   ├── helper.pyi
    │   ├── jsonschema/
    │   │   ├── __init__.pyi
    │   │   ├── annotations.pyi
    │   │   ├── builder.pyi
    │   │   ├── dialects.pyi
    │   │   ├── models.pyi
    │   │   └── schema.pyi
    │   ├── mixins/
    │   │   ├── __init__.pyi
    │   │   ├── dict.pyi
    │   │   ├── json.pyi
    │   │   ├── msgpack.pyi
    │   │   ├── orjson.pyi
    │   │   ├── toml.pyi
    │   │   └── yaml.pyi
    │   └── types.pyi
    ├── msgpack/
    │   ├── __init__.pyi
    │   ├── _version.pyi
    │   ├── exceptions.pyi
    │   ├── ext.pyi
    │   └── fallback.pyi
    ├── snowplow_tracker/
    │   └── __init__.pyi
    └── sqlparse/
        ├── __init__.pyi
        ├── sql.pyi
        └── tokens.pyi
Download .txt
Showing preview only (940K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (11180 symbols across 582 files)

FILE: .github/actions/latest-wrangler/main.py
  function main (line 9) | def main():
  function _package_metadata (line 20) | def _package_metadata(package_name: str, github_token: str) -> requests....
  function _published_versions (line 25) | def _published_versions(response: requests.Response) -> List[Version]:
  function _new_version_tags (line 35) | def _new_version_tags(new_version: Version, published_versions: List[Ver...
  function _register_tags (line 57) | def _register_tags(tags: List[str], package_name: str) -> None:
  function _validate_response (line 64) | def _validate_response(response: requests.Response) -> None:

FILE: core/dbt/artifacts/exceptions/schemas.py
  class IncompatibleSchemaError (line 6) | class IncompatibleSchemaError(DbtRuntimeError):
    method __init__ (line 7) | def __init__(self, expected: str, found: Optional[str] = None) -> None:
    method add_filename (line 14) | def add_filename(self, filename: str):
    method get_message (line 18) | def get_message(self) -> str:

FILE: core/dbt/artifacts/resources/base.py
  class BaseResource (line 10) | class BaseResource(dbtClassMixin):
  class GraphResource (line 20) | class GraphResource(BaseResource):
  class FileHash (line 25) | class FileHash(dbtClassMixin):
    method empty (line 30) | def empty(cls):
    method path (line 34) | def path(cls, path: str):
    method __eq__ (line 37) | def __eq__(self, other):
    method compare (line 46) | def compare(self, contents: str) -> bool:
    method from_contents (line 54) | def from_contents(cls, contents: str, name="sha256") -> "FileHash":
  class Docs (line 65) | class Docs(dbtClassMixin):

FILE: core/dbt/artifacts/resources/types.py
  class AccessType (line 4) | class AccessType(StrEnum):
    method is_valid (line 10) | def is_valid(cls, item):
  class NodeType (line 18) | class NodeType(StrEnum):
    method pluralize (line 40) | def pluralize(self) -> str:
  class RunHookType (line 50) | class RunHookType(StrEnum):
  class ModelLanguage (line 55) | class ModelLanguage(StrEnum):
  class ModelHookType (line 60) | class ModelHookType(StrEnum):
  class TimePeriod (line 65) | class TimePeriod(StrEnum):
    method plural (line 70) | def plural(self) -> str:
  class BatchSize (line 74) | class BatchSize(StrEnum):
    method plural (line 80) | def plural(self) -> str:
  class FunctionType (line 84) | class FunctionType(StrEnum):
  class FunctionVolatility (line 90) | class FunctionVolatility(StrEnum):

FILE: core/dbt/artifacts/resources/v1/analysis.py
  class Analysis (line 9) | class Analysis(CompiledResource):

FILE: core/dbt/artifacts/resources/v1/catalog.py
  class CatalogWriteIntegrationConfig (line 9) | class CatalogWriteIntegrationConfig(CatalogIntegrationConfig):
  class Catalog (line 20) | class Catalog(dbtClassMixin):

FILE: core/dbt/artifacts/resources/v1/components.py
  function _backcompat_doc_blocks (line 23) | def _backcompat_doc_blocks(doc_blocks: Any) -> List[str]:
  class MacroDependsOn (line 38) | class MacroDependsOn(dbtClassMixin):
    method add_macro (line 42) | def add_macro(self, value: str):
  class DependsOn (line 48) | class DependsOn(MacroDependsOn):
    method add_node (line 51) | def add_node(self, value: str):
  class RefArgs (line 57) | class RefArgs(dbtClassMixin):
    method positional_args (line 63) | def positional_args(self) -> List[str]:
    method keyword_args (line 70) | def keyword_args(self) -> Dict[str, Optional[NodeVersion]]:
  class ColumnConfig (line 78) | class ColumnConfig(BaseConfig):
  class ColumnDimension (line 84) | class ColumnDimension(dbtClassMixin):
    class ColumnDimensionValidityParams (line 88) | class ColumnDimensionValidityParams(dbtClassMixin):
  class ColumnEntity (line 102) | class ColumnEntity(dbtClassMixin):
  class ColumnInfo (line 111) | class ColumnInfo(AdditionalPropertiesMixin, ExtensibleDbtClassMixin):
    method __post_serialize__ (line 128) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None...
  class InjectedCTE (line 135) | class InjectedCTE(dbtClassMixin):
  class Contract (line 143) | class Contract(dbtClassMixin):
  class Quoting (line 150) | class Quoting(dbtClassMixin, Mergeable):
  class Time (line 158) | class Time(dbtClassMixin, Mergeable):
    method exceeded (line 162) | def exceeded(self, actual_age: float) -> bool:
    method __bool__ (line 169) | def __bool__(self):
  class FreshnessThreshold (line 174) | class FreshnessThreshold(dbtClassMixin, Mergeable):
    method status (line 179) | def status(self, age: float) -> "dbt.artifacts.schemas.results.Freshne...
    method __bool__ (line 189) | def __bool__(self):
  class HasRelationMetadata (line 194) | class HasRelationMetadata(dbtClassMixin):
    method __pre_deserialize__ (line 202) | def __pre_deserialize__(cls, data):
    method quoting_dict (line 209) | def quoting_dict(self) -> Dict[str, bool]:
  class DeferRelation (line 217) | class DeferRelation(HasRelationMetadata):
    method identifier (line 230) | def identifier(self):
  class ParsedResourceMandatory (line 235) | class ParsedResourceMandatory(GraphResource, HasRelationMetadata):
    method identifier (line 241) | def identifier(self):
  class ParsedResource (line 246) | class ParsedResource(ParsedResourceMandatory):
    method __post_serialize__ (line 263) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
  class CompiledResource (line 277) | class CompiledResource(ParsedResource):
    method __post_serialize__ (line 295) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):

FILE: core/dbt/artifacts/resources/v1/config.py
  function list_str (line 19) | def list_str() -> List[str]:
  class Severity (line 23) | class Severity(str):
  function metas (line 27) | def metas(*metas: Metadata) -> Dict[str, Any]:
  class ContractConfig (line 35) | class ContractConfig(dbtClassMixin):
  class Hook (line 41) | class Hook(dbtClassMixin):
  class NodeAndTestConfig (line 48) | class NodeAndTestConfig(BaseConfig):
  class NodeConfig (line 79) | class NodeConfig(NodeAndTestConfig):
    method __post_init__ (line 132) | def __post_init__(self):
    method __pre_deserialize__ (line 154) | def __pre_deserialize__(cls, data):
  class TestConfig (line 166) | class TestConfig(NodeAndTestConfig):
    method finalize_and_validate (line 186) | def finalize_and_validate(self):
    method same_contents (line 238) | def same_contents(cls, unrendered: Dict[str, Any], other: Dict[str, An...
    method validate (line 262) | def validate(cls, data):

FILE: core/dbt/artifacts/resources/v1/documentation.py
  class Documentation (line 9) | class Documentation(BaseResource):

FILE: core/dbt/artifacts/resources/v1/exposure.py
  class ExposureType (line 13) | class ExposureType(StrEnum):
  class MaturityType (line 21) | class MaturityType(StrEnum):
  class ExposureConfig (line 28) | class ExposureConfig(BaseConfig):
  class Exposure (line 35) | class Exposure(GraphResource):

FILE: core/dbt/artifacts/resources/v1/function.py
  class FunctionConfig (line 15) | class FunctionConfig(NodeConfig):
  class FunctionArgument (line 31) | class FunctionArgument(dbtClassMixin):
  class FunctionReturns (line 39) | class FunctionReturns(dbtClassMixin):
  class FunctionMandatory (line 45) | class FunctionMandatory(dbtClassMixin):
  class DeferFunction (line 50) | class DeferFunction(HasRelationMetadata):
    method identifier (line 63) | def identifier(self):
  class Function (line 68) | class Function(CompiledResource, FunctionMandatory):
    method __post_serialize__ (line 74) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):

FILE: core/dbt/artifacts/resources/v1/generic_test.py
  class TestMetadata (line 11) | class TestMetadata(dbtClassMixin):
  class GenericTest (line 23) | class GenericTest(CompiledResource):

FILE: core/dbt/artifacts/resources/v1/group.py
  class GroupConfig (line 11) | class GroupConfig(BaseConfig):
  class Group (line 16) | class Group(BaseResource):

FILE: core/dbt/artifacts/resources/v1/hook.py
  class HookNode (line 9) | class HookNode(CompiledResource):

FILE: core/dbt/artifacts/resources/v1/macro.py
  class MacroArgument (line 13) | class MacroArgument(dbtClassMixin):
  class MacroConfig (line 20) | class MacroConfig(BaseConfig):
  class Macro (line 26) | class Macro(BaseResource):

FILE: core/dbt/artifacts/resources/v1/metric.py
  class MetricInputMeasure (line 35) | class MetricInputMeasure(dbtClassMixin):
    method measure_reference (line 42) | def measure_reference(self) -> MeasureReference:
    method post_aggregation_measure_reference (line 45) | def post_aggregation_measure_reference(self) -> MeasureReference:
  class MetricTimeWindow (line 50) | class MetricTimeWindow(dbtClassMixin):
    method window_string (line 55) | def window_string(self) -> str:  # noqa: D
    method is_standard_granularity (line 59) | def is_standard_granularity(self) -> bool:  # noqa: D
  class MetricInput (line 64) | class MetricInput(dbtClassMixin):
    method as_reference (line 71) | def as_reference(self) -> MetricReference:
    method post_aggregation_reference (line 74) | def post_aggregation_reference(self) -> MetricReference:
  class ConstantPropertyInput (line 79) | class ConstantPropertyInput(dbtClassMixin):
  class ConversionTypeParams (line 85) | class ConversionTypeParams(dbtClassMixin):
  class CumulativeTypeParams (line 97) | class CumulativeTypeParams(dbtClassMixin):
  class MetricAggregationParams (line 105) | class MetricAggregationParams(dbtClassMixin):
  class MetricTypeParams (line 114) | class MetricTypeParams(dbtClassMixin):
    method get_semantic_model_name (line 137) | def get_semantic_model_name(self) -> Optional[str]:
  class MetricConfig (line 147) | class MetricConfig(BaseConfig):
  class Metric (line 158) | class Metric(GraphResource):
    method input_metrics (line 182) | def input_metrics(self) -> List[MetricInput]:
    method input_measures (line 186) | def input_measures(self) -> List[MetricInputMeasure]:
    method measure_references (line 190) | def measure_references(self) -> List[MeasureReference]:

FILE: core/dbt/artifacts/resources/v1/model.py
  class ModelFreshnessUpdatesOnOptions (line 23) | class ModelFreshnessUpdatesOnOptions(enum.Enum):
  class ModelBuildAfter (line 29) | class ModelBuildAfter(ExtensibleDbtClassMixin):
  class ModelFreshness (line 36) | class ModelFreshness(ExtensibleDbtClassMixin, Mergeable):
  function merge_model_freshness (line 40) | def merge_model_freshness(*thresholds: Optional[ModelFreshness]) -> Opti...
  class ModelConfig (line 75) | class ModelConfig(NodeConfig):
    method __post_init__ (line 82) | def __post_init__(self):
    method __pre_deserialize__ (line 102) | def __pre_deserialize__(cls, data):
  class CustomGranularity (line 117) | class CustomGranularity(dbtClassMixin):
  class TimeSpine (line 123) | class TimeSpine(dbtClassMixin):
  class Model (line 129) | class Model(CompiledResource):
    method __post_serialize__ (line 141) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):

FILE: core/dbt/artifacts/resources/v1/owner.py
  class Owner (line 8) | class Owner(AdditionalPropertiesAllowed):

FILE: core/dbt/artifacts/resources/v1/saved_query.py
  class ExportConfig (line 24) | class ExportConfig(dbtClassMixin):
  class Export (line 34) | class Export(dbtClassMixin):
  class QueryParams (line 43) | class QueryParams(dbtClassMixin):
  class SavedQueryCache (line 54) | class SavedQueryCache(dbtClassMixin):
  class SavedQueryConfig (line 59) | class SavedQueryConfig(BaseConfig):
  class SavedQueryMandatory (line 83) | class SavedQueryMandatory(GraphResource):
  class SavedQuery (line 89) | class SavedQuery(SavedQueryMandatory):
    method metrics (line 106) | def metrics(self) -> List[str]:
    method depends_on_nodes (line 110) | def depends_on_nodes(self):

FILE: core/dbt/artifacts/resources/v1/seed.py
  class SeedConfig (line 15) | class SeedConfig(NodeConfig):
    method validate (line 21) | def validate(cls, data):
  class Seed (line 28) | class Seed(ParsedResource):  # No SQLDefaults!
    method __post_serialize__ (line 37) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):

FILE: core/dbt/artifacts/resources/v1/semantic_layer_components.py
  class WhereFilter (line 14) | class WhereFilter(dbtClassMixin):
    method call_parameter_sets (line 17) | def call_parameter_sets(
  class WhereFilterIntersection (line 28) | class WhereFilterIntersection(dbtClassMixin):
    method filter_expression_parameter_sets (line 31) | def filter_expression_parameter_sets(
  class FileSlice (line 38) | class FileSlice(dbtClassMixin):
  class SourceFileMetadata (line 51) | class SourceFileMetadata(dbtClassMixin):
  class MeasureAggregationParameters (line 62) | class MeasureAggregationParameters(dbtClassMixin):
  class NonAdditiveDimension (line 69) | class NonAdditiveDimension(dbtClassMixin):

FILE: core/dbt/artifacts/resources/v1/semantic_model.py
  class SemanticLayerElementConfig (line 41) | class SemanticLayerElementConfig(dbtClassMixin):
  class Defaults (line 49) | class Defaults(dbtClassMixin):
  class NodeRelation (line 54) | class NodeRelation(dbtClassMixin):
  class DimensionValidityParams (line 68) | class DimensionValidityParams(dbtClassMixin):
  class DimensionTypeParams (line 74) | class DimensionTypeParams(dbtClassMixin):
  class Dimension (line 80) | class Dimension(dbtClassMixin):
    method reference (line 92) | def reference(self) -> DimensionReference:
    method time_dimension_reference (line 96) | def time_dimension_reference(self) -> Optional[TimeDimensionReference]:
    method validity_params (line 103) | def validity_params(self) -> Optional[DimensionValidityParams]:
  class Entity (line 117) | class Entity(dbtClassMixin):
    method reference (line 127) | def reference(self) -> EntityReference:
    method is_linkable_entity_type (line 131) | def is_linkable_entity_type(self) -> bool:
  class Measure (line 142) | class Measure(dbtClassMixin):
    method reference (line 155) | def reference(self) -> MeasureReference:
  class SemanticModelConfig (line 165) | class SemanticModelConfig(BaseConfig):
  class SemanticModel (line 178) | class SemanticModel(GraphResource):
    method entity_references (line 197) | def entity_references(self) -> List[LinkableElementReference]:
    method dimension_references (line 201) | def dimension_references(self) -> List[LinkableElementReference]:
    method measure_references (line 205) | def measure_references(self) -> List[MeasureReference]:
    method has_validity_dimensions (line 209) | def has_validity_dimensions(self) -> bool:
    method validity_start_dimension (line 213) | def validity_start_dimension(self) -> Optional[Dimension]:
    method validity_end_dimension (line 222) | def validity_end_dimension(self) -> Optional[Dimension]:
    method partitions (line 231) | def partitions(self) -> List[Dimension]:  # noqa: D
    method partition (line 235) | def partition(self) -> Optional[Dimension]:
    method reference (line 242) | def reference(self) -> SemanticModelReference:
    method checked_agg_time_dimension_for_measure (line 245) | def checked_agg_time_dimension_for_measure(
    method checked_agg_time_dimension_for_simple_metric (line 269) | def checked_agg_time_dimension_for_simple_metric(
    method primary_entity_reference (line 309) | def primary_entity_reference(self) -> Optional[EntityReference]:

FILE: core/dbt/artifacts/resources/v1/singular_test.py
  class SingularTest (line 10) | class SingularTest(CompiledResource):

FILE: core/dbt/artifacts/resources/v1/snapshot.py
  class SnapshotMetaColumnNames (line 11) | class SnapshotMetaColumnNames(dbtClassMixin):
  class SnapshotConfig (line 20) | class SnapshotConfig(NodeConfig):
    method snapshot_table_column_names (line 35) | def snapshot_table_column_names(self):
    method final_validate (line 44) | def final_validate(self):
    method finalize_and_validate (line 75) | def finalize_and_validate(self):
  class Snapshot (line 82) | class Snapshot(CompiledResource):
    method __post_serialize__ (line 87) | def __post_serialize__(self, dct, context: Optional[Dict] = None):

FILE: core/dbt/artifacts/resources/v1/source_definition.py
  class SourceConfig (line 20) | class SourceConfig(BaseConfig):
  class ExternalPartition (line 31) | class ExternalPartition(AdditionalPropertiesAllowed):
    method __post_init__ (line 37) | def __post_init__(self):
  class ExternalTable (line 43) | class ExternalTable(AdditionalPropertiesAllowed, Mergeable):
    method __bool__ (line 50) | def __bool__(self):
  class ParsedSourceMandatory (line 55) | class ParsedSourceMandatory(GraphResource, HasRelationMetadata):
  class SourceDefinition (line 64) | class SourceDefinition(ParsedSourceMandatory):

FILE: core/dbt/artifacts/resources/v1/sql_operation.py
  class SqlOperation (line 9) | class SqlOperation(CompiledResource):

FILE: core/dbt/artifacts/resources/v1/unit_test_definition.py
  class UnitTestConfig (line 14) | class UnitTestConfig(BaseConfig):
  class UnitTestFormat (line 26) | class UnitTestFormat(StrEnum):
  class UnitTestInputFixture (line 33) | class UnitTestInputFixture(dbtClassMixin):
  class UnitTestOverrides (line 41) | class UnitTestOverrides(dbtClassMixin):
  class UnitTestNodeVersions (line 48) | class UnitTestNodeVersions(dbtClassMixin):
  class UnitTestOutputFixture (line 54) | class UnitTestOutputFixture(dbtClassMixin):
  class UnitTestDefinitionMandatory (line 61) | class UnitTestDefinitionMandatory:
  class UnitTestDefinition (line 68) | class UnitTestDefinition(GraphResource, UnitTestDefinitionMandatory):

FILE: core/dbt/artifacts/schemas/base.py
  class SchemaVersion (line 22) | class SchemaVersion:
    method path (line 27) | def path(self) -> str:
    method __str__ (line 30) | def __str__(self) -> str:
  class Writable (line 34) | class Writable:
    method write (line 35) | def write(self, path: str):
  class Readable (line 39) | class Readable:
    method read (line 41) | def read(cls, path: str):
  class BaseArtifactMetadata (line 55) | class BaseArtifactMetadata(dbtClassMixin):
    method __post_serialize__ (line 67) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
  function schema_version (line 88) | def schema_version(name: str, version: int):
  class VersionedSchema (line 101) | class VersionedSchema(dbtClassMixin):
    method json_schema (line 106) | def json_schema(cls) -> Dict[str, Any]:
    method is_compatible_version (line 113) | def is_compatible_version(cls, schema_version):
    method read_and_check_versions (line 121) | def read_and_check_versions(cls, path: str):
    method upgrade_schema_version (line 145) | def upgrade_schema_version(cls, data):
  class ArtifactMixin (line 161) | class ArtifactMixin(VersionedSchema, Writable, Readable):
    method validate (line 165) | def validate(cls, data):
  function get_artifact_schema_version (line 171) | def get_artifact_schema_version(dct: dict) -> int:
  function get_artifact_dbt_version (line 186) | def get_artifact_dbt_version(dct: dict) -> Optional[str]:

FILE: core/dbt/artifacts/schemas/batch_results.py
  class BatchResults (line 13) | class BatchResults(dbtClassMixin):
    method __add__ (line 17) | def __add__(self, other: BatchResults) -> BatchResults:
    method __len__ (line 23) | def __len__(self):

FILE: core/dbt/artifacts/schemas/catalog/v1/catalog.py
  class CatalogMetadata (line 18) | class CatalogMetadata(BaseArtifactMetadata):
  class CatalogResults (line 25) | class CatalogResults(dbtClassMixin):
    method __post_serialize__ (line 31) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
  class CatalogArtifact (line 40) | class CatalogArtifact(CatalogResults, ArtifactMixin):
    method from_results (line 44) | def from_results(

FILE: core/dbt/artifacts/schemas/freshness/v3/freshness.py
  class SourceFreshnessResult (line 24) | class SourceFreshnessResult(NodeResult):
    method skipped (line 32) | def skipped(self):
  class PartialSourceFreshnessResult (line 37) | class PartialSourceFreshnessResult(NodeResult):
    method skipped (line 41) | def skipped(self):
  class FreshnessMetadata (line 49) | class FreshnessMetadata(BaseArtifactMetadata):
  class FreshnessResult (line 56) | class FreshnessResult(ExecutionResult):
    method from_node_results (line 61) | def from_node_results(
    method write (line 70) | def write(self, path):
  class SourceFreshnessOutput (line 75) | class SourceFreshnessOutput(dbtClassMixin):
  class FreshnessErrorEnum (line 88) | class FreshnessErrorEnum(StrEnum):
  class SourceFreshnessRuntimeError (line 93) | class SourceFreshnessRuntimeError(dbtClassMixin):
  class FreshnessExecutionResultArtifact (line 104) | class FreshnessExecutionResultArtifact(
    method from_result (line 113) | def from_result(cls, base: FreshnessResult):
  function process_freshness_result (line 126) | def process_freshness_result(result: FreshnessNodeResult) -> FreshnessNo...

FILE: core/dbt/artifacts/schemas/manifest/v12/manifest.py
  class ManifestMetadata (line 59) | class ManifestMetadata(BaseArtifactMetadata):
    method default (line 103) | def default(cls):
  class WritableManifest (line 111) | class WritableManifest(ArtifactMixin):
    method compatible_previous_versions (line 178) | def compatible_previous_versions(cls) -> Iterable[Tuple[str, int]]:
    method upgrade_schema_version (line 191) | def upgrade_schema_version(cls, data):
    method validate (line 204) | def validate(cls, _):

FILE: core/dbt/artifacts/schemas/results.py
  class TimingInfo (line 12) | class TimingInfo(dbtClassMixin):
    method begin (line 23) | def begin(self):
    method end (line 26) | def end(self):
    method to_msg_dict (line 29) | def to_msg_dict(self):
  class collect_timing_info (line 39) | class collect_timing_info:
    method __init__ (line 40) | def __init__(self, name: str, callback: Callable[[TimingInfo], None]) ...
    method __enter__ (line 44) | def __enter__(self):
    method __exit__ (line 47) | def __exit__(self, exc_type, exc_value, traceback):
  class RunningStatus (line 52) | class RunningStatus(StrEnum):
  class NodeStatus (line 58) | class NodeStatus(StrEnum):
  class RunStatus (line 70) | class RunStatus(StrEnum):
  class TestStatus (line 78) | class TestStatus(StrEnum):
  class FreshnessStatus (line 87) | class FreshnessStatus(StrEnum):
  class BaseResult (line 95) | class BaseResult(dbtClassMixin):
    method __pre_deserialize__ (line 105) | def __pre_deserialize__(cls, data):
    method to_msg_dict (line 113) | def to_msg_dict(self):
  class NodeResult (line 127) | class NodeResult(BaseResult):
  class ExecutionResult (line 132) | class ExecutionResult(dbtClassMixin):
    method __len__ (line 136) | def __len__(self):
    method __iter__ (line 139) | def __iter__(self):
    method __getitem__ (line 142) | def __getitem__(self, idx):

FILE: core/dbt/artifacts/schemas/run/v5/run.py
  class RunResult (line 36) | class RunResult(NodeResult):
    method skipped (line 43) | def skipped(self):
    method from_node (line 47) | def from_node(cls, node: ResultNode, status: RunStatus, message: Optio...
  class RunResultsMetadata (line 63) | class RunResultsMetadata(BaseArtifactMetadata):
  class RunResultOutput (line 70) | class RunResultOutput(BaseResult):
  function process_run_result (line 78) | def process_run_result(result: RunResult) -> RunResultOutput:
  class RunExecutionResult (line 99) | class RunExecutionResult(
    method write (line 108) | def write(self, path: str):
  class RunResultsArtifact (line 120) | class RunResultsArtifact(ExecutionResult, ArtifactMixin):
    method from_execution_results (line 125) | def from_execution_results(
    method compatible_previous_versions (line 161) | def compatible_previous_versions(cls) -> Iterable[Tuple[str, int]]:
    method upgrade_schema_version (line 168) | def upgrade_schema_version(cls, data):
    method write (line 183) | def write(self, path: str):

FILE: core/dbt/artifacts/schemas/upgrades/upgrade_manifest.py
  function rename_sql_attr (line 1) | def rename_sql_attr(node_content: dict) -> dict:
  function upgrade_ref_content (line 10) | def upgrade_ref_content(node_content: dict) -> dict:
  function upgrade_node_content (line 25) | def upgrade_node_content(node_content):
  function upgrade_seed_content (line 32) | def upgrade_seed_content(node_content):
  function drop_v9_and_prior_metrics (line 52) | def drop_v9_and_prior_metrics(manifest: dict) -> None:
  function _convert_dct_with_filter (line 65) | def _convert_dct_with_filter(v10_dct_with_opt_filter):
  function _convert_metric (line 77) | def _convert_metric(v10_metric_dict):
  function upgrade_v10_metric_filters (line 111) | def upgrade_v10_metric_filters(manifest: dict):
  function upgrade_manifest_json (line 125) | def upgrade_manifest_json(manifest: dict, manifest_schema_version: int) ...

FILE: core/dbt/artifacts/schemas/upgrades/upgrade_manifest_dbt_version.py
  function upgrade_manifest_json_dbt_version (line 1) | def upgrade_manifest_json_dbt_version(manifest: dict) -> dict:

FILE: core/dbt/artifacts/utils/validation.py
  function validate_color (line 150) | def validate_color(color: str) -> bool:

FILE: core/dbt/cli/context.py
  function make_context (line 8) | def make_context(args, command=dbt) -> Optional[click.Context]:

FILE: core/dbt/cli/exceptions.py
  class DbtUsageException (line 11) | class DbtUsageException(Exception):
  class DbtInternalException (line 15) | class DbtInternalException(Exception):
  class CliException (line 19) | class CliException(ClickException):
    method __init__ (line 24) | def __init__(self, exit_code: ExitCodes) -> None:
    method show (line 29) | def show(self, _file: Optional[IO] = None) -> None:  # type: ignore[ty...
  class ResultExit (line 33) | class ResultExit(CliException):
    method __init__ (line 37) | def __init__(
  class ExceptionExit (line 52) | class ExceptionExit(CliException):
    method __init__ (line 55) | def __init__(self, exception: Exception) -> None:

FILE: core/dbt/cli/flags.py
  function convert_config (line 60) | def convert_config(config_name, config_value):
  function args_to_context (line 74) | def args_to_context(args: List[str]) -> Context:
  class Flags (line 94) | class Flags:
    method __init__ (line 97) | def __init__(
    method __str__ (line 354) | def __str__(self) -> str:
    method _override_if_set (line 357) | def _override_if_set(self, lead: str, follow: str, defaulted: Set[str]...
    method _assert_mutually_exclusive (line 362) | def _assert_mutually_exclusive(
    method _validate_event_time_configs (line 381) | def _validate_event_time_configs(self) -> None:
    method fire_deprecations (line 411) | def fire_deprecations(self, ctx: Optional[Context] = None):
    method from_dict (line 440) | def from_dict(cls, command: CliCommand, args_dict: Dict[str, Any]) -> ...
    method set_common_global_flags (line 447) | def set_common_global_flags(self):
    method __getattr__ (line 465) | def __getattr__(self, name: str) -> Any:
  function command_params (line 472) | def command_params(command: CliCommand, args_dict: Dict[str, Any]) -> Co...
  function parent_args (line 541) | def parent_args() -> ArgsList:
  function command_args (line 548) | def command_args(command: CliCommand) -> ArgsList:
  function format_params (line 584) | def format_params(params: List[Parameter]) -> ArgsList:

FILE: core/dbt/cli/main.py
  class dbtRunnerResult (line 24) | class dbtRunnerResult:
  class dbtRunner (line 41) | class dbtRunner:
    method __init__ (line 42) | def __init__(
    method invoke (line 53) | def invoke(self, args: List[str], **kwargs) -> dbtRunnerResult:
  function global_flags (line 102) | def global_flags(func):
  function cli (line 164) | def cli(ctx, **kwargs):
  function build (line 201) | def build(ctx, **kwargs):
  function clean (line 229) | def clean(ctx, **kwargs):
  function docs (line 243) | def docs(ctx, **kwargs):
  function docs_generate (line 269) | def docs_generate(ctx, **kwargs):
  function docs_serve (line 300) | def docs_serve(ctx, **kwargs):
  function compile (line 340) | def compile(ctx, **kwargs):
  function show (line 380) | def show(ctx, **kwargs):
  function debug (line 417) | def debug(ctx, **kwargs):
  function deps (line 445) | def deps(ctx, **kwargs):
  function init (line 484) | def init(ctx, **kwargs):
  function list (line 516) | def list(ctx, **kwargs):
  function parse (line 553) | def parse(ctx, **kwargs):
  function run (line 584) | def run(ctx, **kwargs):
  function retry (line 614) | def retry(ctx, **kwargs):
  function clone (line 650) | def clone(ctx, **kwargs):
  function run_operation (line 682) | def run_operation(ctx, **kwargs):
  function seed (line 719) | def seed(ctx, **kwargs):
  function snapshot (line 754) | def snapshot(ctx, **kwargs):
  function source (line 773) | def source(ctx, **kwargs):
  function freshness (line 797) | def freshness(ctx, **kwargs):
  function test (line 841) | def test(ctx, **kwargs):

FILE: core/dbt/cli/option_types.py
  class YAML (line 14) | class YAML(ParamType):
    method convert (line 19) | def convert(self, value, param, ctx):
  class Package (line 30) | class Package(ParamType):
    method convert (line 39) | def convert(self, value, param, ctx):
  class WarnErrorOptionsType (line 50) | class WarnErrorOptionsType(YAML):
    method convert (line 55) | def convert(self, value, param, ctx):
  class SqlParseOptionsType (line 68) | class SqlParseOptionsType(YAML):
    method convert (line 75) | def convert(self, value, param, ctx):
  class Truthy (line 104) | class Truthy(ParamType):
    method convert (line 109) | def convert(self, value, param, ctx):
  class ChoiceTuple (line 120) | class ChoiceTuple(Choice):
    method convert (line 123) | def convert(self, value, param, ctx):
  class SampleType (line 133) | class SampleType(ParamType):
    method convert (line 136) | def convert(

FILE: core/dbt/cli/options.py
  class MultiOption (line 15) | class MultiOption(click.Option):
    method __init__ (line 16) | def __init__(self, *args, **kwargs) -> None:
    method add_to_parser (line 38) | def add_to_parser(self, parser: "_OptionParser", ctx: "Context"):
    method type_cast_value (line 70) | def type_cast_value(self, ctx: "Context", value: t.Any) -> t.Any:

FILE: core/dbt/cli/params.py
  class EngineEnvVar (line 34) | class EngineEnvVar:
    method __init__ (line 38) | def __init__(self, envvar: str) -> None:
  function _create_option_and_track_env_var (line 55) | def _create_option_and_track_env_var(
  function _version_callback (line 794) | def _version_callback(ctx, _param, value):

FILE: core/dbt/cli/requires.py
  function _cross_propagate_engine_env_vars (line 60) | def _cross_propagate_engine_env_vars(env_dict: Dict[str, str]) -> None:
  function preflight (line 71) | def preflight(func):
  function setup_record_replay (line 133) | def setup_record_replay():
  function tear_down_record_replay (line 160) | def tear_down_record_replay():
  function postflight (line 172) | def postflight(func):
  function unset_profile (line 250) | def unset_profile(func):
  function profile (line 263) | def profile(func):
  function project (line 281) | def project(func):
  function runtime_config (line 326) | def runtime_config(func):
  function catalogs (line 373) | def catalogs(func):
  function manifest (line 396) | def manifest(*args0, write=True, write_perf_info=False):
  function setup_manifest (line 419) | def setup_manifest(ctx: Context, write: bool = True, write_perf_info: bo...

FILE: core/dbt/cli/resolvers.py
  function default_project_dir (line 7) | def default_project_dir() -> Path:
  function default_profiles_dir (line 13) | def default_profiles_dir() -> Path:
  function default_log_path (line 17) | def default_log_path(project_dir: Path, verify_version: bool = False) ->...

FILE: core/dbt/cli/types.py
  class Command (line 7) | class Command(Enum):
    method from_str (line 29) | def from_str(cls, s: str) -> "Command":
    method to_list (line 35) | def to_list(self) -> List[str]:

FILE: core/dbt/clients/checked_load.py
  class YamlCheckFailure (line 18) | class YamlCheckFailure:
  function checked_load (line 23) | def checked_load(contents) -> Tuple[Optional[Dict[str, Any]], List[YamlC...
  function issue_deprecation_warnings_for_failures (line 76) | def issue_deprecation_warnings_for_failures(failures: List[YamlCheckFail...

FILE: core/dbt/clients/git.py
  function _is_commit (line 26) | def _is_commit(revision: str) -> bool:
  function clone (line 31) | def clone(repo, cwd, dirname=None, remove_git_dir=False, revision=None, ...
  function list_tags (line 74) | def list_tags(cwd):
  function _checkout (line 80) | def _checkout(cwd, repo, revision):
  function checkout (line 103) | def checkout(cwd, repo, revision=None):
  function get_current_sha (line 112) | def get_current_sha(cwd):
  function remove_remote (line 118) | def remove_remote(cwd):
  function clone_and_checkout (line 122) | def clone_and_checkout(

FILE: core/dbt/clients/jinja.py
  class MacroStack (line 31) | class MacroStack(threading.local):
    method __init__ (line 32) | def __init__(self):
    method depth (line 37) | def depth(self) -> int:
    method push (line 40) | def push(self, name):
    method pop (line 43) | def pop(self, name):
  class MacroGenerator (line 49) | class MacroGenerator(CallableMacroGenerator):
    method __init__ (line 50) | def __init__(
    method track_call (line 63) | def track_call(self):
    method __call__ (line 80) | def __call__(self, *args, **kwargs):
  class UnitTestMacroGenerator (line 85) | class UnitTestMacroGenerator(MacroGenerator):
    method __init__ (line 87) | def __init__(
    method __call__ (line 100) | def __call__(self, *args, **kwargs):
  function get_rendered (line 115) | def get_rendered(
  function undefined_error (line 152) | def undefined_error(msg) -> NoReturn:
  function add_rendered_test_kwargs (line 159) | def add_rendered_test_kwargs(
  function get_supported_languages (line 191) | def get_supported_languages(node: jinja2.nodes.Macro) -> List[ModelLangu...

FILE: core/dbt/clients/jinja_static.py
  function statically_extract_has_name_this (line 20) | def statically_extract_has_name_this(source: str) -> bool:
  function statically_extract_macro_calls (line 32) | def statically_extract_macro_calls(
  function statically_parse_adapter_dispatch (line 91) | def statically_parse_adapter_dispatch(
  function statically_parse_ref_or_source (line 158) | def statically_parse_ref_or_source(expression: str) -> Union[RefArgs, Li...
  function statically_parse_unrendered_config (line 194) | def statically_parse_unrendered_config(string: str) -> Optional[Dict[str...
  function construct_static_kwarg_value (line 241) | def construct_static_kwarg_value(kwarg) -> str:

FILE: core/dbt/clients/registry.py
  function _get_url (line 29) | def _get_url(name, registry_base_url=None):
  function _check_package_redirect (line 37) | def _check_package_redirect(package_name: str, response: Dict[str, Any])...
  function _get_package_with_retries (line 50) | def _get_package_with_retries(
  function _get (line 59) | def _get(package_name, registry_base_url=None):
  function package (line 119) | def package(package_name, registry_base_url=None) -> Dict[str, Any]:
  function package_version (line 125) | def package_version(package_name, version, registry_base_url=None) -> Di...
  function is_compatible_version (line 131) | def is_compatible_version(package_spec, dbt_version) -> bool:
  function get_compatible_versions (line 146) | def get_compatible_versions(package_name, dbt_version, should_version_ch...
  function _get_index (line 164) | def _get_index(registry_base_url=None):
  function index (line 186) | def index(registry_base_url=None) -> List[str]:

FILE: core/dbt/clients/yaml_helper.py
  function line_no (line 28) | def line_no(i, line, width=3):
  function prefix_with_line_numbers (line 33) | def prefix_with_line_numbers(string, no_start, no_end):
  function contextualized_yaml_error (line 42) | def contextualized_yaml_error(raw_contents, error):
  function safe_load (line 55) | def safe_load(contents) -> Optional[Dict[str, Any]]:
  function load_yaml_text (line 59) | def load_yaml_text(contents, path=None, loader=SafeLoader) -> Optional[D...

FILE: core/dbt/compilation.py
  function print_compile_stats (line 54) | def print_compile_stats(stats: Dict[NodeType, int]):
  function _node_enabled (line 67) | def _node_enabled(node: ManifestNode):
  function _generate_stats (line 75) | def _generate_stats(manifest: Manifest) -> Dict[NodeType, int]:
  function _add_prepended_cte (line 96) | def _add_prepended_cte(prepended_ctes, new_cte):
  function _extend_prepended_ctes (line 105) | def _extend_prepended_ctes(prepended_ctes, new_prepended_ctes):
  function _get_tests_for_node (line 110) | def _get_tests_for_node(manifest: Manifest, unique_id: UniqueID) -> List...
  class SeenDetails (line 124) | class SeenDetails:
  class Linker (line 133) | class Linker:
    method __init__ (line 134) | def __init__(self, data=None) -> None:
    method edges (line 139) | def edges(self):
    method nodes (line 142) | def nodes(self):
    method find_cycles (line 145) | def find_cycles(self):
    method dependency (line 154) | def dependency(self, node1, node2):
    method add_node (line 160) | def add_node(self, node):
    method write_graph (line 163) | def write_graph(self, outfile: str, manifest: Manifest):
    method link_node (line 174) | def link_node(self, node: GraphMemberNode, manifest: Manifest):
    method link_graph (line 191) | def link_graph(self, manifest: Manifest):
    method add_test_edges (line 214) | def add_test_edges(self, manifest: Manifest) -> None:
    method add_test_edges_1 (line 220) | def add_test_edges_1(self, manifest: Manifest) -> None:
    method add_test_edges_2 (line 310) | def add_test_edges_2(self, manifest: Manifest):
    method _get_test_edges_2 (line 317) | def _get_test_edges_2(
    method _get_multi_test_edges (line 374) | def _get_multi_test_edges(
    method get_graph (line 443) | def get_graph(self, manifest: Manifest) -> Graph:
    method get_graph_summary (line 447) | def get_graph_summary(self, manifest: Manifest) -> Dict[int, Dict[str,...
  class Compiler (line 467) | class Compiler:
    method __init__ (line 468) | def __init__(self, config) -> None:
    method initialize (line 475) | def initialize(self):
    method _create_node_context (line 480) | def _create_node_context(
    method add_ephemeral_prefix (line 498) | def add_ephemeral_prefix(self, name: str):
    method _recursively_prepend_ctes (line 503) | def _recursively_prepend_ctes(
    method _compile_code (line 623) | def _compile_code(
    method _compile_relation_for_foreign_key_constraint_to (line 675) | def _compile_relation_for_foreign_key_constraint_to(
    method compile (line 708) | def compile(self, manifest: Manifest, write=True, add_test_edges=False...
    method write_graph_file (line 752) | def write_graph_file(self, linker: Linker, manifest: Manifest):
    method _write_node (line 760) | def _write_node(
    method compile_node (line 774) | def compile_node(
  function inject_ctes_into_sql (line 807) | def inject_ctes_into_sql(sql: str, ctes: List[InjectedCTE]) -> str:

FILE: core/dbt/config/catalogs.py
  function load_catalogs_yml (line 14) | def load_catalogs_yml(project_dir: str, project_name: str) -> Dict[str, ...
  function load_single_catalog (line 32) | def load_single_catalog(raw_catalog: Dict[str, Any], renderer: SecretRen...
  function load_catalogs (line 79) | def load_catalogs(project_dir: str, project_name: str, cli_vars: Dict[st...
  function get_active_write_integration (line 86) | def get_active_write_integration(catalog: Catalog) -> Optional[CatalogWr...

FILE: core/dbt/config/profile.py
  function read_profile (line 33) | def read_profile(profiles_dir: str) -> Dict[str, Any]:
  class Profile (line 56) | class Profile(HasCredentials):
    method __init__ (line 64) | def __init__(
    method to_profile_info (line 85) | def to_profile_info(self, serialize_credentials: bool = False) -> Dict...
    method to_target_dict (line 104) | def to_target_dict(self) -> Dict[str, Any]:
    method __eq__ (line 117) | def __eq__(self, other: object) -> bool:
    method validate (line 122) | def validate(self):
    method _credentials_from_profile (line 133) | def _credentials_from_profile(
    method pick_profile_name (line 165) | def pick_profile_name(
    method _get_profile_data (line 200) | def _get_profile_data(
    method from_credentials (line 228) | def from_credentials(
    method render_profile (line 256) | def render_profile(
    method from_raw_profile_info (line 291) | def from_raw_profile_info(
    method from_raw_profiles (line 338) | def from_raw_profiles(
    method render (line 379) | def render(

FILE: core/dbt/config/project.py
  class IsFQNResource (line 89) | class IsFQNResource(Protocol):
  function _load_yaml (line 95) | def _load_yaml(path, validate: bool = False):
  function load_yml_dict (line 105) | def load_yml_dict(file_path):
  function vars_data_from_root (line 112) | def vars_data_from_root(project_root: str) -> Dict[str, Any]:
  function validate_vars_not_in_both (line 124) | def validate_vars_not_in_both(
  function package_and_project_data_from_root (line 137) | def package_and_project_data_from_root(project_root):
  function package_config_from_data (line 159) | def package_config_from_data(
  function load_package_lock_config (line 182) | def load_package_lock_config(project_root: str) -> PackageConfig:
  function _parse_versions (line 188) | def _parse_versions(versions: Union[List[str], str]) -> List[VersionSpec...
  function _all_source_paths (line 203) | def _all_source_paths(*args: List[str]) -> List[str]:
  function flag_or (line 213) | def flag_or(flag: Optional[T], value: Optional[T], default: T) -> T:
  function value_or (line 220) | def value_or(value: Optional[T], default: T) -> T:
  function load_raw_project (line 227) | def load_raw_project(project_root: str, validate: bool = False) -> Dict[...
  function _query_comment_from_cfg (line 257) | def _query_comment_from_cfg(
  function validate_version (line 272) | def validate_version(dbt_version: List[VersionSpecifier], project_name: ...
  function _get_required_version (line 290) | def _get_required_version(
  class RenderComponents (line 316) | class RenderComponents:
  class PartialProject (line 323) | class PartialProject(RenderComponents):
    method render_profile_name (line 345) | def render_profile_name(self, renderer) -> Optional[str]:
    method get_rendered (line 350) | def get_rendered(
    method render (line 367) | def render(
    method render_package_metadata (line 380) | def render_package_metadata(self, renderer: PackageRenderer) -> Projec...
    method check_config_path (line 387) | def check_config_path(
    method create_project (line 409) | def create_project(
    method from_dicts (line 604) | def from_dicts(
    method from_project_root (line 631) | def from_project_root(
  class VarProvider (line 652) | class VarProvider:
    method __init__ (line 655) | def __init__(self, vars: Dict[str, Dict[str, Any]]) -> None:
    method vars_for (line 658) | def vars_for(self, node: IsFQNResource, adapter_type: str) -> Mapping[...
    method to_dict (line 664) | def to_dict(self):
  class Project (line 671) | class Project:
    method all_source_paths (line 720) | def all_source_paths(self) -> List[str]:
    method generic_test_paths (line 732) | def generic_test_paths(self):
    method fixture_paths (line 739) | def fixture_paths(self):
    method __str__ (line 745) | def __str__(self):
    method __eq__ (line 749) | def __eq__(self, other):
    method to_project_config (line 756) | def to_project_config(self, with_packages=False):
    method validate (line 811) | def validate(self):
    method from_project_root (line 821) | def from_project_root(
    method hashed_name (line 839) | def hashed_name(self):
    method get_selector (line 842) | def get_selector(self, name: str) -> Union[SelectionSpec, bool]:
    method get_default_selector_name (line 849) | def get_default_selector_name(self) -> Union[str, None]:
    method get_macro_search_order (line 860) | def get_macro_search_order(self, macro_namespace: str):
    method project_target_path (line 867) | def project_target_path(self):
  function read_project_flags (line 872) | def read_project_flags(project_dir: str, profiles_dir: str) -> ProjectFl...

FILE: core/dbt/config/renderer.py
  class BaseRenderer (line 21) | class BaseRenderer:
    method __init__ (line 22) | def __init__(self, context: Dict[str, Any]) -> None:
    method name (line 26) | def name(self):
    method should_render_keypath (line 29) | def should_render_keypath(self, keypath: Keypath) -> bool:
    method render_entry (line 32) | def render_entry(self, value: Any, keypath: Keypath) -> Any:
    method render_value (line 38) | def render_value(self, value: Any, keypath: Optional[Keypath] = None) ...
    method render_data (line 50) | def render_data(self, data: Dict[str, Any]) -> Dict[str, Any]:
  function _list_if_none (line 59) | def _list_if_none(value):
  function _dict_if_none (line 65) | def _dict_if_none(value):
  function _list_if_none_or_string (line 71) | def _list_if_none_or_string(value):
  class ProjectPostprocessor (line 78) | class ProjectPostprocessor(Dict[Keypath, Callable[[Any], Any]]):
    method __init__ (line 79) | def __init__(self) -> None:
    method postprocess (line 92) | def postprocess(self, value: Any, key: Keypath) -> Any:
  class DbtProjectYamlRenderer (line 100) | class DbtProjectYamlRenderer(BaseRenderer):
    method __init__ (line 103) | def __init__(
    method name (line 132) | def name(self):
    method get_package_renderer (line 136) | def get_package_renderer(self) -> BaseRenderer:
    method render_project (line 139) | def render_project(
    method render_packages (line 149) | def render_packages(self, packages: Dict[str, Any], packages_specified...
    method render_selectors (line 159) | def render_selectors(self, selectors: Dict[str, Any]):
    method render_entry (line 162) | def render_entry(self, value: Any, keypath: Keypath) -> Any:
    method should_render_keypath (line 166) | def should_render_keypath(self, keypath: Keypath) -> bool:
  class SecretRenderer (line 189) | class SecretRenderer(BaseRenderer):
    method __init__ (line 190) | def __init__(self, cli_vars: Dict[str, Any] = {}) -> None:
    method name (line 198) | def name(self):
    method render_value (line 201) | def render_value(self, value: Any, keypath: Optional[Keypath] = None) ...
  class ProfileRenderer (line 234) | class ProfileRenderer(SecretRenderer):
    method name (line 236) | def name(self):
  class PackageRenderer (line 240) | class PackageRenderer(SecretRenderer):
    method name (line 242) | def name(self):

FILE: core/dbt/config/runtime.py
  function load_project (line 53) | def load_project(
  function load_profile (line 86) | def load_profile(
  function _project_quoting_dict (line 105) | def _project_quoting_dict(proj: Project, profile: Profile) -> Dict[Compo...
  class RuntimeConfig (line 117) | class RuntimeConfig(Project, Profile, AdapterRequiredConfig):
    method __post_init__ (line 123) | def __post_init__(self):
    method get_profile (line 127) | def get_profile(
    method from_parts (line 143) | def from_parts(
    method new_project (line 224) | def new_project(self, project_root: str) -> "RuntimeConfig":
    method serialize (line 254) | def serialize(self) -> Dict[str, Any]:
    method validate (line 268) | def validate(self):
    method collect_parts (line 280) | def collect_parts(cls: Type["RuntimeConfig"], args: Any) -> Tuple[Proj...
    method from_args (line 302) | def from_args(cls, args: Any) -> "RuntimeConfig":
    method get_metadata (line 320) | def get_metadata(self) -> ManifestMetadata:
    method _get_v2_config_paths (line 340) | def _get_v2_config_paths(
    method _get_config_paths (line 353) | def _get_config_paths(
    method get_resource_config_paths (line 369) | def get_resource_config_paths(self) -> Dict[str, PathSet]:
    method warn_for_unused_resource_config_paths (line 388) | def warn_for_unused_resource_config_paths(
    method load_dependencies (line 414) | def load_dependencies(self, base_only=False) -> Mapping[str, "RuntimeC...
    method clear_dependencies (line 455) | def clear_dependencies(self):
    method load_projects (line 459) | def load_projects(self, paths: Iterable[Path]) -> Iterator[Tuple[str, ...
    method _get_project_directories (line 472) | def _get_project_directories(self) -> Iterator[Path]:
  class UnsetCredentials (line 481) | class UnsetCredentials(Credentials):
    method __init__ (line 482) | def __init__(self) -> None:
    method type (line 486) | def type(self):
    method unique_field (line 490) | def unique_field(self):
    method connection_info (line 493) | def connection_info(self, *args, **kwargs):
    method _connection_keys (line 496) | def _connection_keys(self):
  class UnsetProfile (line 502) | class UnsetProfile(Profile):
    method __init__ (line 503) | def __init__(self):
    method to_target_dict (line 509) | def to_target_dict(self):
    method __getattribute__ (line 512) | def __getattribute__(self, name):
  function _is_config_used (line 527) | def _is_config_used(path, fqns):

FILE: core/dbt/config/selectors.py
  class SelectorConfig (line 32) | class SelectorConfig(Dict[str, Dict[str, Union[SelectionSpec, bool]]]):
    method selectors_from_dict (line 34) | def selectors_from_dict(cls, data: Dict[str, Any]) -> "SelectorConfig":
    method render_from_dict (line 59) | def render_from_dict(
    method from_path (line 74) | def from_path(
  function selector_data_from_root (line 97) | def selector_data_from_root(project_root: str) -> Optional[Dict[str, Any]]:
  function selector_config_from_data (line 107) | def selector_config_from_data(selectors_data: Dict[str, Any]) -> Selecto...
  function validate_selector_default (line 121) | def validate_selector_default(selector_file: SelectorFile) -> None:
  class SelectorDict (line 145) | class SelectorDict:
    method parse_dict_definition (line 147) | def parse_dict_definition(cls, definition, selector_dict={}):
    method parse_a_definition (line 163) | def parse_a_definition(cls, def_type, definition, selector_dict={}):
    method parse_from_definition (line 178) | def parse_from_definition(cls, definition, selector_dict={}):
    method parse_from_selectors_list (line 194) | def parse_from_selectors_list(cls, selectors):

FILE: core/dbt/config/utils.py
  function parse_cli_vars (line 11) | def parse_cli_vars(var_string: str) -> Dict[str, Any]:
  function parse_cli_yaml_string (line 15) | def parse_cli_yaml_string(var_string: str, cli_option_name: str) -> Dict...
  function exclusive_primary_alt_value_setting (line 28) | def exclusive_primary_alt_value_setting(
  function normalize_warn_error_options (line 58) | def normalize_warn_error_options(warn_error_options: Dict[str, Any]) -> ...

FILE: core/dbt/context/base.py
  function get_pytz_module_context (line 48) | def get_pytz_module_context() -> Dict[str, Any]:
  function get_datetime_module_context (line 54) | def get_datetime_module_context() -> Dict[str, Any]:
  function get_re_module_context (line 60) | def get_re_module_context() -> Dict[str, Any]:
  function get_itertools_module_context (line 67) | def get_itertools_module_context() -> Dict[str, Any]:
  function get_context_modules (line 97) | def get_context_modules() -> Dict[str, Dict[str, Any]]:
  class ContextMember (line 106) | class ContextMember:
    method __init__ (line 107) | def __init__(self, value: Any, name: Optional[str] = None) -> None:
    method key (line 111) | def key(self, default: str) -> str:
  function contextmember (line 117) | def contextmember(value: Optional[str] = None) -> Callable:
  function contextproperty (line 121) | def contextproperty(value: Optional[str] = None) -> Callable:
  class ContextMeta (line 125) | class ContextMeta(type):
    method __new__ (line 126) | def __new__(mcls, name, bases, dct: Dict[str, Any]) -> ContextMeta:
  class Var (line 147) | class Var:
    method __init__ (line 150) | def __init__(
    method _generate_merged (line 163) | def _generate_merged(self) -> Mapping[str, Any]:
    method node_name (line 167) | def node_name(self) -> str:
    method get_missing_var (line 173) | def get_missing_var(self, var_name: str) -> None:
    method has_var (line 179) | def has_var(self, var_name: str) -> bool:
    method get_rendered_var (line 182) | def get_rendered_var(self, var_name: str) -> Any:
    method __call__ (line 190) | def __call__(self, var_name: str, default: Any = _VAR_NOTSET) -> Any:
  class BaseContext (line 199) | class BaseContext(metaclass=ContextMeta):
    method __init__ (line 205) | def __init__(self, cli_vars: Dict[str, Any], require_vars: bool = True...
    method generate_builtins (line 211) | def generate_builtins(self) -> Dict[str, Any]:
    method to_dict (line 221) | def to_dict(self) -> Dict[str, Any]:
    method dbt_version (line 229) | def dbt_version(self) -> str:
    method var (line 249) | def var(self) -> Var:
    method env_var (line 318) | def env_var(self, var: str, default: Optional[str] = None) -> str:
    method debug (line 348) | def debug():
    method _return (line 360) | def _return(data: Any) -> NoReturn:
    method fromjson (line 388) | def fromjson(string: str, default: Any = None) -> Any:
    method tojson (line 409) | def tojson(value: Any, default: Any = None, sort_keys: bool = False) -...
    method fromyaml (line 432) | def fromyaml(value: str, default: Any = None) -> Any:
    method toyaml (line 463) | def toyaml(
    method _set (line 488) | def _set(value: Iterable[Any], default: Any = None) -> Optional[Set[An...
    method set_strict (line 508) | def set_strict(value: Iterable[Any]) -> Set[Any]:
    method _zip (line 528) | def _zip(*args: Iterable[Any], default: Any = None) -> Optional[Iterab...
    method zip_strict (line 550) | def zip_strict(*args: Iterable[Any]) -> Iterable[Any]:
    method log (line 572) | def log(msg: str, info: bool = False) -> str:
    method run_started_at (line 604) | def run_started_at(self) -> Optional[datetime.datetime]:
    method invocation_id (line 632) | def invocation_id(self) -> Optional[str]:
    method thread_id (line 639) | def thread_id(self) -> str:
    method modules (line 644) | def modules(self) -> Dict[str, Any]:
    method flags (line 669) | def flags(self) -> Any:
    method print (line 687) | def print(msg: str) -> str:
    method diff_of_two_dicts (line 706) | def diff_of_two_dicts(
    method local_md5 (line 735) | def local_md5(value: str) -> str:
  function generate_base_context (line 747) | def generate_base_context(cli_vars: Dict[str, Any]) -> Dict[str, Any]:

FILE: core/dbt/context/configured.py
  class ConfiguredContext (line 14) | class ConfiguredContext(TargetContext):
    method __init__ (line 18) | def __init__(self, config: AdapterRequiredConfig, require_vars: bool =...
    method project_name (line 23) | def project_name(self) -> str:
  class FQNLookup (line 27) | class FQNLookup:
    method __init__ (line 28) | def __init__(self, package_name: str):
  class ConfiguredVar (line 34) | class ConfiguredVar(Var):
    method __init__ (line 35) | def __init__(
    method __call__ (line 45) | def __call__(self, var_name, default=Var._VAR_NOTSET):
  class SchemaYamlVars (line 70) | class SchemaYamlVars:
    method __init__ (line 71) | def __init__(self):
  class SchemaYamlContext (line 76) | class SchemaYamlContext(ConfiguredContext):
    method __init__ (line 78) | def __init__(self, config, project_name: str, schema_yaml_vars: Option...
    method var (line 84) | def var(self) -> ConfiguredVar:
    method env_var (line 88) | def env_var(self, var: str, default: Optional[str] = None) -> str:
  class MacroResolvingContext (line 113) | class MacroResolvingContext(ConfiguredContext):
    method __init__ (line 114) | def __init__(self, config):
    method var (line 118) | def var(self) -> ConfiguredVar:
  function generate_schema_yml_context (line 122) | def generate_schema_yml_context(
  function generate_macro_context (line 131) | def generate_macro_context(

FILE: core/dbt/context/context_config.py
  class ModelParts (line 19) | class ModelParts(IsFQNResource):
  class ConfigSource (line 29) | class ConfigSource:
    method __init__ (line 30) | def __init__(self, project):
    method get_config_dict (line 33) | def get_config_dict(self, resource_type: NodeType): ...
  class UnrenderedConfig (line 36) | class UnrenderedConfig(ConfigSource):
    method __init__ (line 37) | def __init__(self, project: Project):
    method get_config_dict (line 40) | def get_config_dict(self, resource_type: NodeType) -> Dict[str, Any]:
  class RenderedConfig (line 68) | class RenderedConfig(ConfigSource):
    method __init__ (line 69) | def __init__(self, project: Project):
    method get_config_dict (line 72) | def get_config_dict(self, resource_type: NodeType) -> Dict[str, Any]:
  class BaseContextConfigGenerator (line 98) | class BaseContextConfigGenerator(Generic[T]):
    method __init__ (line 99) | def __init__(self, active_project: RuntimeConfig):
    method get_config_source (line 102) | def get_config_source(self, project: Project) -> ConfigSource:
    method get_node_project (line 105) | def get_node_project(self, project_name: str):
    method _project_configs (line 116) | def _project_configs(
    method _active_project_configs (line 131) | def _active_project_configs(
    method _update_from_config (line 137) | def _update_from_config(
    method initial_result (line 142) | def initial_result(self, resource_type: NodeType, base: bool) -> T: ...
    method calculate_node_config (line 144) | def calculate_node_config(
    method calculate_node_config_dict (line 184) | def calculate_node_config_dict(
  class ContextConfigGenerator (line 195) | class ContextConfigGenerator(BaseContextConfigGenerator[C]):
    method __init__ (line 196) | def __init__(self, active_project: RuntimeConfig):
    method get_config_source (line 199) | def get_config_source(self, project: Project) -> ConfigSource:
    method initial_result (line 202) | def initial_result(self, resource_type: NodeType, base: bool) -> C:
    method _update_from_config (line 211) | def _update_from_config(self, result: C, partial: Dict[str, Any], vali...
    method translate_hook_names (line 221) | def translate_hook_names(self, project_dict):
    method calculate_node_config_dict (line 231) | def calculate_node_config_dict(
  class UnrenderedConfigGenerator (line 256) | class UnrenderedConfigGenerator(BaseContextConfigGenerator[Dict[str, Any...
    method get_config_source (line 257) | def get_config_source(self, project: Project) -> ConfigSource:
    method calculate_node_config_dict (line 260) | def calculate_node_config_dict(
    method initial_result (line 279) | def initial_result(self, resource_type: NodeType, base: bool) -> Dict[...
    method _update_from_config (line 282) | def _update_from_config(
  class ContextConfig (line 293) | class ContextConfig:
    method __init__ (line 294) | def __init__(
    method add_config_call (line 308) | def add_config_call(self, opts: Dict[str, Any]) -> None:
    method add_unrendered_config_call (line 312) | def add_unrendered_config_call(self, opts: Dict[str, Any]) -> None:
    method build_config_dict (line 316) | def build_config_dict(

FILE: core/dbt/context/docs.py
  class DocsRuntimeContext (line 11) | class DocsRuntimeContext(SchemaYamlContext):
    method __init__ (line 12) | def __init__(
    method doc (line 24) | def doc(self, *args: str) -> str:
  function generate_runtime_docs_context (line 74) | def generate_runtime_docs_context(

FILE: core/dbt/context/exceptions_jinja.py
  function warn (line 36) | def warn(msg, node=None):
  function missing_config (line 41) | def missing_config(model, name) -> NoReturn:
  function missing_materialization (line 45) | def missing_materialization(model, adapter_type) -> NoReturn:
  function missing_relation (line 51) | def missing_relation(relation, model=None) -> NoReturn:
  function raise_ambiguous_alias (line 55) | def raise_ambiguous_alias(node_1, node_2, duped_name=None) -> NoReturn:
  function raise_ambiguous_catalog_match (line 59) | def raise_ambiguous_catalog_match(unique_id, match_1, match_2) -> NoReturn:
  function raise_cache_inconsistent (line 63) | def raise_cache_inconsistent(message) -> NoReturn:
  function raise_dataclass_not_dict (line 67) | def raise_dataclass_not_dict(obj) -> NoReturn:
  function raise_compiler_error (line 71) | def raise_compiler_error(msg, node=None) -> NoReturn:
  function raise_contract_error (line 75) | def raise_contract_error(yaml_columns, sql_columns) -> NoReturn:
  function raise_database_error (line 79) | def raise_database_error(msg, node=None) -> NoReturn:
  function raise_dep_not_found (line 83) | def raise_dep_not_found(node, node_description, required_pkg) -> NoReturn:
  function raise_dependency_error (line 87) | def raise_dependency_error(msg) -> NoReturn:
  function raise_duplicate_patch_name (line 91) | def raise_duplicate_patch_name(patch_1, existing_patch_path) -> NoReturn:
  function raise_duplicate_resource_name (line 95) | def raise_duplicate_resource_name(node_1, node_2) -> NoReturn:
  function raise_invalid_property_yml_version (line 99) | def raise_invalid_property_yml_version(path, issue) -> NoReturn:
  function raise_not_implemented (line 103) | def raise_not_implemented(msg) -> NoReturn:
  function relation_wrong_type (line 107) | def relation_wrong_type(relation, expected_type, model=None) -> NoReturn:
  function column_type_missing (line 111) | def column_type_missing(column_names) -> NoReturn:
  function raise_fail_fast_error (line 115) | def raise_fail_fast_error(msg, node=None) -> NoReturn:
  function warn_snapshot_timestamp_data_types (line 119) | def warn_snapshot_timestamp_data_types(
  function wrapper (line 161) | def wrapper(model):
  function wrapped_exports (line 176) | def wrapped_exports(model):

FILE: core/dbt/context/macro_resolver.py
  class MacroResolver (line 22) | class MacroResolver:
    method __init__ (line 23) | def __init__(
    method _build_internal_packages_namespace (line 44) | def _build_internal_packages_namespace(self) -> None:
    method _build_macros_by_name (line 60) | def _build_macros_by_name(self) -> None:
    method _add_macro_to (line 78) | def _add_macro_to(
    method add_macro (line 93) | def add_macro(self, macro: Macro) -> None:
    method add_macros (line 107) | def add_macros(self) -> None:
    method get_macro (line 111) | def get_macro(self, local_package, macro_name) -> Optional[Macro]:
    method get_macro_id (line 129) | def get_macro_id(self, local_package, macro_name) -> Optional[str]:
  class TestMacroNamespace (line 143) | class TestMacroNamespace:
    method __init__ (line 144) | def __init__(self, macro_resolver, ctx, node, thread_ctx, depends_on_m...
    method recursively_get_depends_on_macros (line 172) | def recursively_get_depends_on_macros(self, depends_on_macros, dep_mac...
    method get_from_package (line 182) | def get_from_package(self, package_name: Optional[str], name: str) -> ...

FILE: core/dbt/context/macros.py
  class MacroNamespace (line 21) | class MacroNamespace(Mapping):
    method __init__ (line 22) | def __init__(
    method _search_order (line 34) | def _search_order(self) -> Iterable[Union[FullNamespace, FlatNamespace]]:
    method _keys (line 48) | def _keys(self) -> Set[str]:
    method __iter__ (line 55) | def __iter__(self) -> Iterator[str]:
    method __len__ (line 59) | def __len__(self):
    method __getitem__ (line 62) | def __getitem__(self, key: str) -> NamespaceMember:
    method get_from_package (line 68) | def get_from_package(self, package_name: Optional[str], name: str) -> ...
  class MacroNamespaceBuilder (line 83) | class MacroNamespaceBuilder:
    method __init__ (line 84) | def __init__(
    method _add_macro_to (line 110) | def _add_macro_to(
    method add_macro (line 126) | def add_macro(self, macro: Macro, ctx: Dict[str, Any]) -> None:
    method add_macros (line 148) | def add_macros(self, macros: Iterable[Macro], ctx: Dict[str, Any]) -> ...
    method build_namespace (line 152) | def build_namespace(

FILE: core/dbt/context/manifest.py
  class ManifestContext (line 13) | class ManifestContext(ConfiguredContext):
    method __init__ (line 22) | def __init__(
    method _build_namespace (line 38) | def _build_namespace(self) -> MacroNamespace:
    method _get_namespace_builder (line 44) | def _get_namespace_builder(self) -> MacroNamespaceBuilder:
    method to_dict (line 58) | def to_dict(self):
    method context_macro_stack (line 71) | def context_macro_stack(self):

FILE: core/dbt/context/providers.py
  class RelationProxy (line 117) | class RelationProxy:
    method __init__ (line 118) | def __init__(self, adapter):
    method __getattr__ (line 122) | def __getattr__(self, key):
    method create (line 125) | def create(self, *args, **kwargs):
  class BaseDatabaseWrapper (line 130) | class BaseDatabaseWrapper:
    method __init__ (line 136) | def __init__(self, adapter, namespace: MacroNamespace):
    method __getattr__ (line 141) | def __getattr__(self, name):
    method config (line 145) | def config(self):
    method type (line 148) | def type(self):
    method commit (line 151) | def commit(self):
    method _get_adapter_macro_prefixes (line 154) | def _get_adapter_macro_prefixes(self) -> List[str]:
    method _get_search_packages (line 162) | def _get_search_packages(self, namespace: Optional[str] = None) -> Lis...
    method dispatch (line 181) | def dispatch(
  class BaseResolver (line 230) | class BaseResolver(metaclass=abc.ABCMeta):
    method __init__ (line 231) | def __init__(self, db_wrapper, model, config, manifest):
    method current_project (line 238) | def current_project(self):
    method Relation (line 242) | def Relation(self):
    method resolve_limit (line 246) | def resolve_limit(self) -> Optional[int]:
    method _resolve_event_time_field_name (line 249) | def _resolve_event_time_field_name(self, target: ManifestNode) -> str:
    method resolve_event_time_filter (line 298) | def resolve_event_time_filter(self, target: ManifestNode) -> Optional[...
    method __call__ (line 358) | def __call__(self, *args: str) -> Union[str, RelationProxy, MetricRefe...
  class BaseRefResolver (line 362) | class BaseRefResolver(BaseResolver):
    method resolve (line 364) | def resolve(
    method _repack_args (line 368) | def _repack_args(
    method validate_args (line 373) | def validate_args(self, name: str, package: Optional[str], version: Op...
    method __call__ (line 389) | def __call__(self, *args: str, **kwargs) -> RelationProxy:
  class BaseSourceResolver (line 406) | class BaseSourceResolver(BaseResolver):
    method resolve (line 408) | def resolve(self, source_name: str, table_name: str):
    method validate_args (line 411) | def validate_args(self, source_name: str, table_name: str):
    method __call__ (line 423) | def __call__(self, *args: str) -> RelationProxy:
  class BaseMetricResolver (line 430) | class BaseMetricResolver(BaseResolver):
    method resolve (line 432) | def resolve(self, name: str, package: Optional[str] = None) -> MetricR...
    method _repack_args (line 434) | def _repack_args(self, name: str, package: Optional[str]) -> List[str]:
    method validate_args (line 440) | def validate_args(self, name: str, package: Optional[str]):
    method __call__ (line 451) | def __call__(self, *args: str) -> MetricReference:
  class BaseFunctionResolver (line 465) | class BaseFunctionResolver(BaseResolver):
    method resolve (line 467) | def resolve(self, name: str, package: Optional[str] = None): ...
    method _repack_args (line 469) | def _repack_args(self, name: str, package: Optional[str]) -> List[str]:
    method validate_args (line 475) | def validate_args(self, name: str, package: Optional[str]):
    method __call__ (line 486) | def __call__(self, *args: str):
  class Config (line 500) | class Config(Protocol):
    method __init__ (line 501) | def __init__(self, model, context_config: Optional[ContextConfig]): ...
  class ParseConfigObject (line 505) | class ParseConfigObject(Config):
    method __init__ (line 506) | def __init__(self, model, context_config: Optional[ContextConfig]):
    method _transform_config (line 510) | def _transform_config(self, config):
    method __call__ (line 519) | def __call__(self, *args, **kwargs):
    method set (line 544) | def set(self, name, value):
    method require (line 547) | def require(self, name, validator=None):
    method meta_require (line 550) | def meta_require(self, name, validator=None):
    method get (line 553) | def get(self, name, default=None, validator=None):
    method meta_get (line 556) | def meta_get(self, name, default=None, validator=None):
    method persist_relation_docs (line 559) | def persist_relation_docs(self) -> bool:
    method persist_column_docs (line 562) | def persist_column_docs(self) -> bool:
  class RuntimeConfigObject (line 566) | class RuntimeConfigObject(Config):
    method __init__ (line 567) | def __init__(self, model, context_config: Optional[ContextConfig] = No...
    method __call__ (line 571) | def __call__(self, *args, **kwargs):
    method set (line 574) | def set(self, name, value):
    method _validate (line 577) | def _validate(self, validator, value):
    method _lookup (line 580) | def _lookup(self, name, default=_MISSING):
    method _lookup_meta (line 590) | def _lookup_meta(self, name, default=_MISSING):
    method require (line 600) | def require(self, name, validator=None):
    method meta_require (line 608) | def meta_require(self, name, validator=None):
    method get (line 616) | def get(self, name, default=None, validator=None):
    method meta_get (line 624) | def meta_get(self, name, default=None, validator=None):
    method persist_relation_docs (line 632) | def persist_relation_docs(self) -> bool:
    method persist_column_docs (line 639) | def persist_column_docs(self) -> bool:
  class ParseDatabaseWrapper (line 648) | class ParseDatabaseWrapper(BaseDatabaseWrapper):
    method __getattr__ (line 653) | def __getattr__(self, name):
  class RuntimeDatabaseWrapper (line 666) | class RuntimeDatabaseWrapper(BaseDatabaseWrapper):
    method __getattr__ (line 671) | def __getattr__(self, name):
  class ParseRefResolver (line 681) | class ParseRefResolver(BaseRefResolver):
    method resolve (line 682) | def resolve(
  class RuntimeRefResolver (line 694) | class RuntimeRefResolver(BaseRefResolver):
    method resolve (line 695) | def resolve(
    method create_relation (line 744) | def create_relation(self, target_model: ManifestNode) -> RelationProxy:
    method validate (line 782) | def validate(
  class OperationRefResolver (line 794) | class OperationRefResolver(RuntimeRefResolver):
    method validate (line 795) | def validate(
    method create_relation (line 804) | def create_relation(self, target_model: ManifestNode) -> RelationProxy:
  class RuntimeUnitTestRefResolver (line 813) | class RuntimeUnitTestRefResolver(RuntimeRefResolver):
    method resolve_limit (line 815) | def resolve_limit(self) -> Optional[int]:
    method resolve (line 819) | def resolve(
  class ParseSourceResolver (line 829) | class ParseSourceResolver(BaseSourceResolver):
    method resolve (line 830) | def resolve(self, source_name: str, table_name: str):
  class RuntimeSourceResolver (line 836) | class RuntimeSourceResolver(BaseSourceResolver):
    method resolve (line 837) | def resolve(self, source_name: str, table_name: str):
  class RuntimeUnitTestSourceResolver (line 867) | class RuntimeUnitTestSourceResolver(BaseSourceResolver):
    method resolve_limit (line 869) | def resolve_limit(self) -> Optional[int]:
    method resolve (line 873) | def resolve(self, source_name: str, table_name: str):
  class ParseMetricResolver (line 901) | class ParseMetricResolver(BaseMetricResolver):
    method resolve (line 902) | def resolve(self, name: str, package: Optional[str] = None) -> MetricR...
  class RuntimeMetricResolver (line 908) | class RuntimeMetricResolver(BaseMetricResolver):
    method resolve (line 909) | def resolve(self, target_name: str, target_package: Optional[str] = No...
  class ModelConfiguredVar (line 929) | class ModelConfiguredVar(Var):
    method __init__ (line 930) | def __init__(
    method packages_for_node (line 940) | def packages_for_node(self) -> Iterable[Project]:
    method _generate_merged (line 949) | def _generate_merged(self) -> Mapping[str, Any]:
  class ParseVar (line 965) | class ParseVar(ModelConfiguredVar):
    method get_missing_var (line 966) | def get_missing_var(self, var_name):
  class RuntimeVar (line 971) | class RuntimeVar(ModelConfiguredVar):
  class UnitTestVar (line 975) | class UnitTestVar(RuntimeVar):
    method __init__ (line 976) | def __init__(
  class ParseFunctionResolver (line 992) | class ParseFunctionResolver(BaseFunctionResolver):
    method resolve (line 993) | def resolve(self, name: str, package: Optional[str] = None):
  class RuntimeFunctionResolver (line 999) | class RuntimeFunctionResolver(BaseFunctionResolver):
    method resolve (line 1000) | def resolve(self, name: str, package: Optional[str] = None):
  class Provider (line 1055) | class Provider(Protocol):
  class ParseProvider (line 1066) | class ParseProvider(Provider):
  class GenerateNameProvider (line 1077) | class GenerateNameProvider(Provider):
  class RuntimeProvider (line 1088) | class RuntimeProvider(Provider):
  class RuntimeUnitTestProvider (line 1099) | class RuntimeUnitTestProvider(Provider):
  class OperationProvider (line 1110) | class OperationProvider(RuntimeProvider):
  class ProviderContext (line 1118) | class ProviderContext(ManifestContext):
    method __init__ (line 1120) | def __init__(
    method _get_namespace_builder (line 1143) | def _get_namespace_builder(self):
    method dbt_metadata_envs (line 1154) | def dbt_metadata_envs(self) -> Dict[str, str]:
    method invocation_args_dict (line 1158) | def invocation_args_dict(self):
    method _sql_results (line 1162) | def _sql_results(self) -> Dict[str, Optional[AttrDict]]:
    method load_result (line 1166) | def load_result(self, name: str) -> Optional[AttrDict]:
    method store_result (line 1187) | def store_result(
    method store_raw_result (line 1205) | def store_raw_result(
    method validation (line 1217) | def validation(self):
    method write (line 1238) | def write(self, payload: str) -> str:
    method render (line 1261) | def render(self, string: str) -> str:
    method try_or_compiler_error (line 1265) | def try_or_compiler_error(
    method _read_csv_header (line 1274) | def _read_csv_header(path: str, delimiter: str) -> Optional[Set[str]]:
    method load_agate_table (line 1285) | def load_agate_table(self) -> "agate.Table":
    method ref (line 1336) | def ref(self) -> Callable:
    method source (line 1377) | def source(self) -> Callable:
    method metric (line 1381) | def metric(self) -> Callable:
    method function (line 1385) | def function(self) -> Callable:
    method ctx_config (line 1389) | def ctx_config(self) -> Config:
    method execute (line 1446) | def execute(self) -> bool:
    method exceptions (line 1507) | def exceptions(self) -> Dict[str, Any]:
    method database (line 1545) | def database(self) -> str:
    method schema (line 1549) | def schema(self) -> str:
    method var (line 1553) | def var(self) -> ModelConfiguredVar:
    method ctx_adapter (line 1561) | def ctx_adapter(self) -> BaseDatabaseWrapper:
    method api (line 1570) | def api(self) -> Dict[str, Any]:
    method column (line 1577) | def column(self) -> Type[Column]:
    method env (line 1581) | def env(self) -> Dict[str, Any]:
    method graph (line 1585) | def graph(self) -> Dict[str, Any]:
    method ctx_model (line 1692) | def ctx_model(self) -> Dict[str, Any]:
    method pre_hooks (line 1713) | def pre_hooks(self) -> Optional[List[Dict[str, Any]]]:
    method post_hooks (line 1717) | def post_hooks(self) -> Optional[List[Dict[str, Any]]]:
    method sql (line 1721) | def sql(self) -> Optional[str]:
    method sql_now (line 1725) | def sql_now(self) -> str:
    method adapter_macro (line 1729) | def adapter_macro(self, name: str, *args, **kwargs):
    method env_var (line 1741) | def env_var(self, var: str, default: Optional[str] = None) -> str:
    method selected_resources (line 1788) | def selected_resources(self) -> List[str]:
    method submit_python_job (line 1797) | def submit_python_job(self, parsed_model: Dict, compiled_code: str) ->...
  class MacroContext (line 1810) | class MacroContext(ProviderContext):
    method __init__ (line 1819) | def __init__(
  class SourceContext (line 1836) | class SourceContext(ProviderContext):
    method this (line 1842) | def this(self) -> Optional[RelationProxy]:
    method source_node (line 1846) | def source_node(self) -> SourceDefinition:
  class ModelContext (line 1850) | class ModelContext(ProviderContext):
    method pre_hooks (line 1854) | def pre_hooks(self) -> List[Dict[str, Any]]:
    method post_hooks (line 1863) | def post_hooks(self) -> List[Dict[str, Any]]:
    method compiled_code (line 1872) | def compiled_code(self) -> Optional[str]:
    method sql (line 1884) | def sql(self) -> Optional[str]:
    method database (line 1892) | def database(self) -> str:
    method schema (line 1896) | def schema(self) -> str:
    method this (line 1900) | def this(self) -> Optional[RelationProxy]:
    method defer_relation (line 1935) | def defer_relation(self) -> Optional[RelationProxy]:
  class UnitTestContext (line 1949) | class UnitTestContext(ModelContext):
    method env_var (line 1953) | def env_var(self, var: str, default: Optional[str] = None) -> str:
    method this (line 1968) | def this(self) -> Optional[str]:
  class FunctionContext (line 1976) | class FunctionContext(ModelContext):
    method this (line 1980) | def this(self) -> Optional[RelationProxy]:
  function generate_parser_model_context (line 1985) | def generate_parser_model_context(
  function generate_parser_unit_test_context (line 2000) | def generate_parser_unit_test_context(
  function generate_generate_name_macro_context (line 2015) | def generate_generate_name_macro_context(
  function generate_runtime_model_context (line 2024) | def generate_runtime_model_context(
  function generate_runtime_macro_context (line 2033) | def generate_runtime_macro_context(
  function generate_runtime_unit_test_context (line 2043) | def generate_runtime_unit_test_context(
  function generate_runtime_function_context (line 2096) | def generate_runtime_function_context(
  class ExposureRefResolver (line 2105) | class ExposureRefResolver(BaseResolver):
    method __call__ (line 2106) | def __call__(self, *args, **kwargs) -> str:
  class ExposureSourceResolver (line 2121) | class ExposureSourceResolver(BaseResolver):
    method __call__ (line 2122) | def __call__(self, *args) -> str:
  class ExposureMetricResolver (line 2129) | class ExposureMetricResolver(BaseResolver):
    method __call__ (line 2130) | def __call__(self, *args) -> str:
  function generate_parse_exposure (line 2137) | def generate_parse_exposure(
  class SemanticModelRefResolver (line 2167) | class SemanticModelRefResolver(BaseResolver):
    method __call__ (line 2168) | def __call__(self, *args, **kwargs) -> str:
    method validate_args (line 2184) | def validate_args(self, name, package, version):
  function generate_parse_semantic_models (line 2193) | def generate_parse_semantic_models(
  class TestContext (line 2213) | class TestContext(ProviderContext):
    method __init__ (line 2214) | def __init__(
    method _build_namespace (line 2233) | def _build_namespace(self):
    method _build_test_namespace (line 2240) | def _build_test_namespace(self):
    method env_var (line 2273) | def env_var(self, var: str, default: Optional[str] = None) -> str:
  function generate_test_context (line 2307) | def generate_test_context(

FILE: core/dbt/context/query_header.py
  class QueryHeaderContext (line 6) | class QueryHeaderContext(ManifestContext):
    method __init__ (line 7) | def __init__(self, config: AdapterRequiredConfig, manifest: Manifest) ...
  function generate_query_header_context (line 11) | def generate_query_header_context(config: AdapterRequiredConfig, manifes...

FILE: core/dbt/context/secret.py
  class SecretContext (line 11) | class SecretContext(BaseContext):
    method env_var (line 16) | def env_var(self, var: str, default: Optional[str] = None) -> str:
  function generate_secret_context (line 55) | def generate_secret_context(cli_vars: Dict[str, Any]) -> Dict[str, Any]:

FILE: core/dbt/context/target.py
  class TargetContext (line 6) | class TargetContext(BaseContext):
    method __init__ (line 8) | def __init__(
    method target (line 15) | def target(self) -> Dict[str, Any]:

FILE: core/dbt/contracts/files.py
  class ParseFileType (line 14) | class ParseFileType(StrEnum):
  class FilePath (line 46) | class FilePath(dbtClassMixin):
    method search_key (line 53) | def search_key(self) -> str:
    method full_path (line 58) | def full_path(self) -> str:
    method absolute_path (line 63) | def absolute_path(self) -> str:
    method original_file_path (line 67) | def original_file_path(self) -> str:
    method seed_too_large (line 70) | def seed_too_large(self) -> bool:
  class RemoteFile (line 76) | class RemoteFile(dbtClassMixin):
    method __init__ (line 77) | def __init__(self, language) -> None:
    method searched_path (line 87) | def searched_path(self) -> str:
    method relative_path (line 91) | def relative_path(self) -> str:
    method absolute_path (line 95) | def absolute_path(self) -> str:
    method original_file_path (line 99) | def original_file_path(self):
    method modification_time (line 103) | def modification_time(self):
  class BaseSourceFile (line 108) | class BaseSourceFile(dbtClassMixin, SerializableType):
    method file_id (line 121) | def file_id(self):
    method original_file_path (line 127) | def original_file_path(self):
    method _serialize (line 130) | def _serialize(self):
    method _deserialize (line 135) | def _deserialize(cls, dct: Dict[str, int]):
    method __post_serialize__ (line 144) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
  class SourceFile (line 159) | class SourceFile(BaseSourceFile):
    method big_seed (line 167) | def big_seed(cls, path: FilePath) -> "SourceFile":
    method add_node (line 173) | def add_node(self, value):
    method remote (line 180) | def remote(cls, contents: str, project_name: str, language: str) -> "S...
  class SchemaSourceFile (line 191) | class SchemaSourceFile(BaseSourceFile):
    method dict_from_yaml (line 227) | def dict_from_yaml(self):
    method node_patches (line 231) | def node_patches(self):
    method macro_patches (line 235) | def macro_patches(self):
    method source_patches (line 239) | def source_patches(self):
    method __post_serialize__ (line 242) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
    method append_patch (line 250) | def append_patch(self, yaml_key, unique_id):
    method add_test (line 253) | def add_test(self, node_unique_id, test_from):
    method remove_tests (line 263) | def remove_tests(self, yaml_key, name):
    method get_tests (line 269) | def get_tests(self, yaml_key, name):
    method add_metrics_from_measures (line 275) | def add_metrics_from_measures(self, semantic_model_name: str, metric_u...
    method fix_metrics_from_measures (line 284) | def fix_metrics_from_measures(self):
    method get_key_and_name_for_test (line 309) | def get_key_and_name_for_test(self, test_unique_id):
    method get_all_test_ids (line 321) | def get_all_test_ids(self):
    method add_unrendered_config (line 328) | def add_unrendered_config(self, unrendered_config, yaml_key, name, ver...
    method get_unrendered_config (line 337) | def get_unrendered_config(self, yaml_key, name, version=None) -> Optio...
    method delete_from_unrendered_configs (line 347) | def delete_from_unrendered_configs(self, yaml_key, name):
    method add_env_var (line 363) | def add_env_var(self, var, yaml_key, name):
    method delete_from_env_vars (line 371) | def delete_from_env_vars(self, yaml_key, name):
    method add_unrendered_database (line 379) | def add_unrendered_database(self, yaml_key: str, name: str, unrendered...
    method get_unrendered_database (line 385) | def get_unrendered_database(self, yaml_key: str, name: str) -> Optiona...
    method add_unrendered_schema (line 391) | def add_unrendered_schema(self, yaml_key: str, name: str, unrendered_s...
    method get_unrendered_schema (line 397) | def get_unrendered_schema(self, yaml_key: str, name: str) -> Optional[...
  class FixtureSourceFile (line 405) | class FixtureSourceFile(BaseSourceFile):
    method add_unit_test (line 409) | def add_unit_test(self, value):

FILE: core/dbt/contracts/graph/manifest.py
  function find_unique_id_for_package (line 101) | def find_unique_id_for_package(storage, key, package: Optional[PackageNa...
  class DocLookup (line 118) | class DocLookup(dbtClassMixin):
    method __init__ (line 119) | def __init__(self, manifest: "Manifest") -> None:
    method get_unique_id (line 123) | def get_unique_id(self, key, package: Optional[PackageName]):
    method find (line 126) | def find(self, key, package: Optional[PackageName], manifest: "Manifes...
    method add_doc (line 132) | def add_doc(self, doc: Documentation):
    method populate (line 137) | def populate(self, manifest):
    method perform_lookup (line 141) | def perform_lookup(self, unique_id: UniqueID, manifest) -> Documentation:
  class SourceLookup (line 149) | class SourceLookup(dbtClassMixin):
    method __init__ (line 150) | def __init__(self, manifest: "Manifest") -> None:
    method get_unique_id (line 154) | def get_unique_id(self, search_name, package: Optional[PackageName]):
    method find (line 157) | def find(self, search_name, package: Optional[PackageName], manifest: ...
    method add_source (line 163) | def add_source(self, source: SourceDefinition):
    method populate (line 169) | def populate(self, manifest):
    method perform_lookup (line 174) | def perform_lookup(self, unique_id: UniqueID, manifest: "Manifest") ->...
  class FunctionLookup (line 182) | class FunctionLookup(dbtClassMixin):
    method __init__ (line 183) | def __init__(self, manifest: "Manifest") -> None:
    method get_unique_id (line 187) | def get_unique_id(self, search_name, package: Optional[PackageName]):
    method find (line 190) | def find(self, search_name, package: Optional[PackageName], manifest: ...
    method add_function (line 196) | def add_function(self, function: FunctionNode):
    method populate (line 202) | def populate(self, manifest):
    method perform_lookup (line 207) | def perform_lookup(self, unique_id: UniqueID, manifest: "Manifest") ->...
  class RefableLookup (line 215) | class RefableLookup(dbtClassMixin):
    method __init__ (line 220) | def __init__(self, manifest: "Manifest") -> None:
    method get_unique_id (line 224) | def get_unique_id(
    method find (line 240) | def find(
    method add_node (line 286) | def add_node(self, node: ManifestNode):
    method populate (line 300) | def populate(self, manifest):
    method perform_lookup (line 304) | def perform_lookup(self, unique_id: UniqueID, manifest) -> ManifestNode:
    method _find_unique_ids_for_package (line 313) | def _find_unique_ids_for_package(self, key, package: Optional[PackageN...
  class MetricLookup (line 330) | class MetricLookup(dbtClassMixin):
    method __init__ (line 331) | def __init__(self, manifest: "Manifest") -> None:
    method get_unique_id (line 335) | def get_unique_id(self, search_name, package: Optional[PackageName]):
    method find (line 338) | def find(self, search_name, package: Optional[PackageName], manifest: ...
    method add_metric (line 344) | def add_metric(self, metric: Metric):
    method populate (line 350) | def populate(self, manifest):
    method perform_lookup (line 355) | def perform_lookup(self, unique_id: UniqueID, manifest: "Manifest") ->...
  class SavedQueryLookup (line 363) | class SavedQueryLookup(dbtClassMixin):
    method __init__ (line 366) | def __init__(self, manifest: "Manifest") -> None:
    method get_unique_id (line 370) | def get_unique_id(self, search_name, package: Optional[PackageName]):
    method find (line 373) | def find(self, search_name, package: Optional[PackageName], manifest: ...
    method add_saved_query (line 379) | def add_saved_query(self, saved_query: SavedQuery):
    method populate (line 385) | def populate(self, manifest):
    method perform_lookup (line 390) | def perform_lookup(self, unique_id: UniqueID, manifest: "Manifest") ->...
  class SemanticModelByMeasureLookup (line 398) | class SemanticModelByMeasureLookup(dbtClassMixin):
    method __init__ (line 405) | def __init__(self, manifest: "Manifest") -> None:
    method get_unique_id (line 409) | def get_unique_id(self, search_name: str, package: Optional[PackageNam...
    method find (line 412) | def find(
    method add (line 421) | def add(self, semantic_model: SemanticModel):
    method populate (line 426) | def populate(self, manifest: "Manifest"):
    method perform_lookup (line 435) | def perform_lookup(self, unique_id: UniqueID, manifest: "Manifest") ->...
  class DisabledLookup (line 453) | class DisabledLookup(dbtClassMixin):
    method __init__ (line 454) | def __init__(self, manifest: "Manifest") -> None:
    method populate (line 458) | def populate(self, manifest: "Manifest"):
    method add_node (line 462) | def add_node(self, node: GraphMemberNode) -> None:
    method find (line 471) | def find(
  class AnalysisLookup (line 510) | class AnalysisLookup(RefableLookup):
  class SingularTestLookup (line 515) | class SingularTestLookup(dbtClassMixin):
    method __init__ (line 516) | def __init__(self, manifest: "Manifest") -> None:
    method get_unique_id (line 520) | def get_unique_id(self, search_name, package: Optional[PackageName]) -...
    method find (line 523) | def find(
    method add_singular_test (line 531) | def add_singular_test(self, source: SingularTestNode) -> None:
    method populate (line 537) | def populate(self, manifest: "Manifest") -> None:
    method perform_lookup (line 542) | def perform_lookup(self, unique_id: UniqueID, manifest: "Manifest") ->...
  function _packages_to_search (line 552) | def _packages_to_search(
  function _sort_values (line 568) | def _sort_values(dct):
  function build_node_edges (line 575) | def build_node_edges(nodes: List[ManifestNode]):
  function build_macro_edges (line 592) | def build_macro_edges(nodes: List[Any]):
  function _deepcopy (line 603) | def _deepcopy(value):
  class Locality (line 607) | class Locality(enum.IntEnum):
  class MacroCandidate (line 614) | class MacroCandidate:
    method __eq__ (line 618) | def __eq__(self, other: object) -> bool:
    method __lt__ (line 623) | def __lt__(self, other: object) -> bool:
  class MaterializationCandidate (line 634) | class MaterializationCandidate(MacroCandidate):
    method from_macro (line 642) | def from_macro(cls, candidate: MacroCandidate, specificity: int) -> "M...
    method __eq__ (line 649) | def __eq__(self, other: object) -> bool:
    method __lt__ (line 658) | def __lt__(self, other: object) -> bool:
  class CandidateList (line 675) | class CandidateList(List[M]):
    method last_candidate (line 676) | def last_candidate(
    method last (line 696) | def last(self) -> Optional[Macro]:
  function _get_locality (line 701) | def _get_locality(macro: Macro, root_project_name: str, internal_package...
  class Searchable (line 710) | class Searchable(Protocol):
    method search_name (line 715) | def search_name(self) -> str:
  class Disabled (line 723) | class Disabled(Generic[D]):
  class MacroMethods (line 755) | class MacroMethods:
    method __init__ (line 757) | def __init__(self):
    method find_macro_candidate_by_name (line 763) | def find_macro_candidate_by_name(
    method find_macro_by_name (line 786) | def find_macro_by_name(
    method find_generate_macro_by_name (line 794) | def find_generate_macro_by_name(
    method _find_macros_by_name (line 827) | def _find_macros_by_name(
    method get_macros_by_name (line 851) | def get_macros_by_name(self) -> Dict[str, List[Macro]]:
    method _build_macros_by_name (line 860) | def _build_macros_by_name(macros: Mapping[str, Macro]) -> Dict[str, Li...
    method get_macros_by_package (line 873) | def get_macros_by_package(self) -> Dict[str, Dict[str, Macro]]:
    method _build_macros_by_package (line 882) | def _build_macros_by_package(macros: Mapping[str, Macro]) -> Dict[str,...
  class ParsingInfo (line 896) | class ParsingInfo:
  class ManifestStateCheck (line 902) | class ManifestStateCheck(dbtClassMixin):
  class Manifest (line 915) | class Manifest(MacroMethods, dbtClassMixin):
    method __pre_serialize__ (line 989) | def __pre_serialize__(self, context: Optional[Dict] = None):
    method __post_deserialize__ (line 996) | def __post_deserialize__(cls, obj):
    method build_flat_graph (line 1000) | def build_flat_graph(self):
    method build_disabled_by_file_id (line 1022) | def build_disabled_by_file_id(self):
    method _get_parent_adapter_types (line 1029) | def _get_parent_adapter_types(self, adapter_type: str) -> List[str]:
    method _materialization_candidates_for (line 1040) | def _materialization_candidates_for(
    method find_materialization_macro_by_name (line 1057) | def find_materialization_macro_by_name(
    method get_resource_fqns (line 1099) | def get_resource_fqns(self) -> Mapping[str, PathSet]:
    method get_used_schemas (line 1118) | def get_used_schemas(self, resource_types=None):
    method get_used_databases (line 1127) | def get_used_databases(self):
    method deepcopy (line 1130) | def deepcopy(self):
    method build_parent_and_child_maps (line 1152) | def build_parent_and_child_maps(self):
    method build_macro_child_map (line 1169) | def build_macro_child_map(self):
    method build_group_map (line 1179) | def build_group_map(self):
    method fill_tracking_metadata (line 1201) | def fill_tracking_metadata(self):
    method from_writable_manifest (line 1206) | def from_writable_manifest(cls, writable_manifest: WritableManifest) -...
    method _map_nodes_to_map_resources (line 1229) | def _map_nodes_to_map_resources(cls, nodes_map: MutableMapping[str, No...
    method _map_list_nodes_to_map_list_resources (line 1232) | def _map_list_nodes_to_map_list_resources(
    method _map_resources_to_map_nodes (line 1241) | def _map_resources_to_map_nodes(cls, resources_map: Mapping[str, Resou...
    method _map_list_resources_to_map_list_nodes (line 1248) | def _map_list_resources_to_map_list_nodes(
    method writable_manifest (line 1262) | def writable_manifest(self) -> "WritableManifest":
    method write (line 1287) | def write(self, path):
    method expect (line 1294) | def expect(self, unique_id: str) -> GraphMemberNode:
    method doc_lookup (line 1318) | def doc_lookup(self) -> DocLookup:
    method rebuild_doc_lookup (line 1323) | def rebuild_doc_lookup(self):
    method source_lookup (line 1327) | def source_lookup(self) -> SourceLookup:
    method rebuild_source_lookup (line 1332) | def rebuild_source_lookup(self):
    method ref_lookup (line 1336) | def ref_lookup(self) -> RefableLookup:
    method metric_lookup (line 1342) | def metric_lookup(self) -> MetricLookup:
    method saved_query_lookup (line 1348) | def saved_query_lookup(self) -> SavedQueryLookup:
    method semantic_model_by_measure_lookup (line 1355) | def semantic_model_by_measure_lookup(self) -> SemanticModelByMeasureLo...
    method rebuild_ref_lookup (line 1361) | def rebuild_ref_lookup(self):
    method disabled_lookup (line 1365) | def disabled_lookup(self) -> DisabledLookup:
    method rebuild_disabled_lookup (line 1370) | def rebuild_disabled_lookup(self):
    method analysis_lookup (line 1374) | def analysis_lookup(self) -> AnalysisLookup:
    method singular_test_lookup (line 1380) | def singular_test_lookup(self) -> SingularTestLookup:
    method function_lookup (line 1386) | def function_lookup(self) -> FunctionLookup:
    method external_node_unique_ids (line 1392) | def external_node_unique_ids(self):
    method resolve_ref (line 1396) | def resolve_ref(
    method resolve_source (line 1433) | def resolve_source(
    method resolve_function (line 1460) | def resolve_function(
    method resolve_metric (line 1483) | def resolve_metric(
    method resolve_saved_query (line 1508) | def resolve_saved_query(
    method resolve_semantic_model_for_measure (line 1537) | def resolve_semantic_model_for_measure(
    method resolve_doc (line 1558) | def resolve_doc(
    method is_invalid_private_ref (line 1577) | def is_invalid_private_ref(
    method is_invalid_protected_ref (line 1605) | def is_invalid_protected_ref(
    method merge_from_artifact (line 1628) | def merge_from_artifact(self, other: "Manifest") -> None:
    method add_macro (line 1683) | def add_macro(self, source_file: SourceFile, macro: Macro):
    method has_file (line 1708) | def has_file(self, source_file: SourceFile) -> bool:
    method add_source (line 1717) | def add_source(self, source_file: SchemaSourceFile, source: UnpatchedS...
    method add_node_nofile (line 1723) | def add_node_nofile(self, node: ManifestNode):
    method add_node (line 1728) | def add_node(self, source_file: AnySourceFile, node: ManifestNode, tes...
    method add_exposure (line 1747) | def add_exposure(self, source_file: SchemaSourceFile, exposure: Exposu...
    method add_function (line 1752) | def add_function(self, source_file: SourceFile, function: FunctionNode):
    method add_metric (line 1757) | def add_metric(
    method add_group (line 1767) | def add_group(self, source_file: SchemaSourceFile, group: Group):
    method add_disabled_nofile (line 1772) | def add_disabled_nofile(self, node: GraphMemberNode):
    method add_disabled (line 1779) | def add_disabled(self, source_file: AnySourceFile, node: GraphMemberNo...
    method add_doc (line 1802) | def add_doc(self, source_file: SourceFile, doc: Documentation):
    method add_semantic_model (line 1807) | def add_semantic_model(self, source_file: SchemaSourceFile, semantic_m...
    method add_unit_test (line 1812) | def add_unit_test(self, source_file: SchemaSourceFile, unit_test: Unit...
    method add_fixture (line 1818) | def add_fixture(self, source_file: FixtureSourceFile, fixture: UnitTes...
    method add_saved_query (line 1824) | def add_saved_query(self, source_file: SchemaSourceFile, saved_query: ...
    method find_node_from_ref_or_source (line 1831) | def find_node_from_ref_or_source(
    method __reduce_ex__ (line 1854) | def __reduce_ex__(self, protocol):
    method _microbatch_macro_is_core (line 1886) | def _microbatch_macro_is_core(self, project_name: str) -> bool:
    method use_microbatch_batches (line 1898) | def use_microbatch_batches(self, project_name: str) -> bool:
  class MacroManifest (line 1905) | class MacroManifest(MacroMethods):
    method __init__ (line 1906) | def __init__(self, macros) -> None:
  function _check_duplicates (line 1924) | def _check_duplicates(value: BaseNode, src: Mapping[str, BaseNode]):
  function _expect_value (line 1933) | def _expect_value(key: K_T, src: Mapping[K_T, V_T], old_file: SourceFile...

FILE: core/dbt/contracts/graph/metrics.py
  class MetricReference (line 10) | class MetricReference(object):
    method __init__ (line 11) | def __init__(self, metric_name, package_name=None) -> None:
    method __str__ (line 15) | def __str__(self):
  class ResolvedMetricReference (line 19) | class ResolvedMetricReference(MetricReference):
    method __init__ (line 26) | def __init__(self, node: Metric, manifest: Manifest) -> None:
    method __getattr__ (line 31) | def __getattr__(self, key) -> Any:
    method __str__ (line 34) | def __str__(self) -> str:
    method parent_metrics (line 38) | def parent_metrics(cls, metric_node: Metric, manifest: Manifest) -> It...
    method parent_metrics_names (line 48) | def parent_metrics_names(cls, metric_node: Metric, manifest: Manifest)...
    method reverse_dag_parsing (line 54) | def reverse_dag_parsing(
    method full_metric_dependency (line 69) | def full_metric_dependency(self):
    method base_metric_dependency (line 74) | def base_metric_dependency(self) -> List[str]:
    method derived_metric_dependency (line 83) | def derived_metric_dependency(self) -> List[str]:
    method derived_metric_dependency_depth (line 92) | def derived_metric_dependency_depth(self) -> List[Dict[str, int]]:

FILE: core/dbt/contracts/graph/model_config.py
  function metas (line 24) | def metas(*metas: Metadata) -> Dict[str, Any]:
  function insensitive_patterns (line 31) | def insensitive_patterns(*patterns: str):
  class UnitTestNodeConfig (line 39) | class UnitTestNodeConfig(NodeConfig):
  function get_config_for (line 65) | def get_config_for(resource_type: NodeType, base=False) -> Type[BaseConf...

FILE: core/dbt/contracts/graph/node_args.py
  class ModelNodeArgs (line 10) | class ModelNodeArgs:
    method unique_id (line 28) | def unique_id(self) -> str:
    method fqn (line 36) | def fqn(self) -> List[str]:

FILE: core/dbt/contracts/graph/nodes.py
  class BaseNode (line 131) | class BaseNode(BaseResource):
    method resource_class (line 139) | def resource_class(cls) -> Type[BaseResource]:
    method search_name (line 144) | def search_name(self):
    method file_id (line 148) | def file_id(self):
    method is_refable (line 152) | def is_refable(self):
    method should_store_failures (line 156) | def should_store_failures(self):
    method is_relational (line 161) | def is_relational(self):
    method is_versioned (line 165) | def is_versioned(self):
    method is_ephemeral (line 169) | def is_ephemeral(self):
    method is_ephemeral_model (line 173) | def is_ephemeral_model(self):
    method get_materialization (line 176) | def get_materialization(self):
    method from_resource (line 180) | def from_resource(cls, resource_instance: BaseResource):
    method to_resource (line 184) | def to_resource(self):
  class GraphNode (line 189) | class GraphNode(GraphResource, BaseNode):
    method same_fqn (line 192) | def same_fqn(self, other) -> bool:
  class HasRelationMetadata (line 197) | class HasRelationMetadata(HasRelationMetadataResource):
    method __pre_deserialize__ (line 199) | def __pre_deserialize__(cls, data):
    method quoting_dict (line 206) | def quoting_dict(self) -> Dict[str, bool]:
  class ParsedNodeMandatory (line 214) | class ParsedNodeMandatory(ParsedResourceMandatory, GraphNode, HasRelatio...
  class NodeInfoMixin (line 222) | class NodeInfoMixin:
    method node_info (line 226) | def node_info(self):
    method update_event_status (line 247) | def update_event_status(self, **kwargs):
    method clear_event_status (line 252) | def clear_event_status(self):
  class ParsedNode (line 257) | class ParsedNode(ParsedResource, NodeInfoMixin, ParsedNodeMandatory, Ser...
    method get_target_write_path (line 258) | def get_target_write_path(
    method write_node (line 280) | def write_node(self, project_root: str, compiled_path, compiled_code: ...
    method _serialize (line 287) | def _serialize(self):
    method __post_serialize__ (line 290) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
    method _deserialize (line 297) | def _deserialize(cls, dct: Dict[str, int]):
    method _persist_column_docs (line 324) | def _persist_column_docs(self) -> bool:
    method _persist_relation_docs (line 330) | def _persist_relation_docs(self) -> bool:
    method same_persisted_description (line 336) | def same_persisted_description(self, other) -> bool:
    method same_body (line 353) | def same_body(self, other) -> bool:
    method same_database_representation (line 356) | def same_database_representation(self, other) -> bool:
    method same_config (line 369) | def same_config(self, old) -> bool:
    method build_contract_checksum (line 375) | def build_contract_checksum(self):
    method same_contract (line 378) | def same_contract(self, old, adapter_type=None) -> bool:
    method same_contents (line 382) | def same_contents(self, old, adapter_type) -> bool:
    method is_external_node (line 400) | def is_external_node(self):
  class CompiledNode (line 405) | class CompiledNode(CompiledResource, ParsedNode):
    method __post_init__ (line 409) | def __post_init__(self):
    method __getstate__ (line 412) | def __getstate__(self):
    method __setstate__ (line 417) | def __setstate__(self, state):
    method empty (line 422) | def empty(self):
    method set_cte (line 425) | def set_cte(self, cte_id: str, sql: str):
    method depends_on_nodes (line 439) | def depends_on_nodes(self):
    method depends_on_macros (line 443) | def depends_on_macros(self):
  class AnalysisNode (line 453) | class AnalysisNode(AnalysisResource, CompiledNode):
    method resource_class (line 455) | def resource_class(cls) -> Type[AnalysisResource]:
  class HookNode (line 460) | class HookNode(HookNodeResource, CompiledNode):
    method resource_class (line 462) | def resource_class(cls) -> Type[HookNodeResource]:
  class BatchContext (line 467) | class BatchContext(dbtClassMixin):
    method __post_serialize__ (line 472) | def __post_serialize__(self, data, context):
  class ModelNode (line 487) | class ModelNode(ModelResource, CompiledNode):
    method __post_serialize__ (line 492) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
    method resource_class (line 501) | def resource_class(cls) -> Type[ModelResource]:
    method from_args (line 505) | def from_args(cls, args: ModelNodeArgs) -> "ModelNode":
    method is_external_node (line 538) | def is_external_node(self) -> bool:
    method is_latest_version (line 542) | def is_latest_version(self) -> bool:
    method is_past_deprecation_date (line 546) | def is_past_deprecation_date(self) -> bool:
    method search_name (line 553) | def search_name(self):
    method materialization_enforces_constraints (line 560) | def materialization_enforces_constraints(self) -> bool:
    method all_constraints (line 564) | def all_constraints(self) -> List[Union[ModelLevelConstraint, ColumnLe...
    method has_this (line 576) | def has_this(self) -> bool:
    method infer_primary_key (line 581) | def infer_primary_key(self, data_tests: List["GenericTestNode"]) -> Li...
    method same_contents (line 644) | def same_contents(self, old, adapter_type) -> bool:
    method same_ref_representation (line 647) | def same_ref_representation(self, old) -> bool:
    method build_contract_checksum (line 656) | def build_contract_checksum(self):
    method same_contract_removed (line 680) | def same_contract_removed(self) -> bool:
    method _normalize_data_type_for_comparison (line 717) | def _normalize_data_type_for_comparison(data_type: Optional[str]) -> O...
    method same_contract (line 746) | def same_contract(self, old, adapter_type=None) -> bool:
  class SqlNode (line 941) | class SqlNode(SqlOperationResource, CompiledNode):
    method resource_class (line 943) | def resource_class(cls) -> Type[SqlOperationResource]:
  class SeedNode (line 953) | class SeedNode(SeedResource, ParsedNode):  # No SQLDefaults!
    method resource_class (line 955) | def resource_class(cls) -> Type[SeedResource]:
    method same_seeds (line 958) | def same_seeds(self, other: "SeedNode") -> bool:
    method empty (line 994) | def empty(self):
    method _disallow_implicit_dependencies (line 998) | def _disallow_implicit_dependencies(self):
    method refs (line 1020) | def refs(self):
    method sources (line 1024) | def sources(self):
    method metrics (line 1028) | def metrics(self):
    method same_body (line 1031) | def same_body(self, other) -> bool:
    method depends_on_nodes (line 1035) | def depends_on_nodes(self):
    method depends_on_macros (line 1039) | def depends_on_macros(self) -> List[str]:
    method extra_ctes (line 1043) | def extra_ctes(self):
    method extra_ctes_injected (line 1047) | def extra_ctes_injected(self):
    method language (line 1051) | def language(self):
  class TestShouldStoreFailures (line 1065) | class TestShouldStoreFailures:
    method should_store_failures (line 1067) | def should_store_failures(self):
    method is_relational (line 1073) | def is_relational(self):
  class SingularTestNode (line 1080) | class SingularTestNode(SingularTestResource, TestShouldStoreFailures, Co...
    method resource_class (line 1082) | def resource_class(cls) -> Type[SingularTestResource]:
    method test_node_type (line 1086) | def test_node_type(self):
  class GenericTestNode (line 1096) | class GenericTestNode(GenericTestResource, TestShouldStoreFailures, Comp...
    method resource_class (line 1098) | def resource_class(cls) -> Type[GenericTestResource]:
    method same_contents (line 1101) | def same_contents(self, other, adapter_type: Optional[str]) -> bool:
    method test_node_type (line 1108) | def test_node_type(self):
  class UnitTestSourceDefinition (line 1113) | class UnitTestSourceDefinition(ModelNode):
    method cte_name (line 1118) | def cte_name(self):
    method search_name (line 1122) | def search_name(self):
  class UnitTestNode (line 1127) | class UnitTestNode(CompiledNode):
  class UnitTestDefinition (line 1136) | class UnitTestDefinition(NodeInfoMixin, GraphNode, UnitTestDefinitionRes...
    method resource_class (line 1138) | def resource_class(cls) -> Type[UnitTestDefinitionResource]:
    method depends_on_nodes (line 1142) | def depends_on_nodes(self):
    method tags (line 1146) | def tags(self) -> List[str]:
    method versioned_name (line 1151) | def versioned_name(self) -> str:
    method build_unit_test_checksum (line 1157) | def build_unit_test_checksum(self):
    method same_contents (line 1168) | def same_contents(self, other: Optional["UnitTestDefinition"]) -> bool:
  class UnitTestFileFixture (line 1176) | class UnitTestFileFixture(BaseNode):
  class SnapshotNode (line 1187) | class SnapshotNode(SnapshotResource, CompiledNode):
    method resource_class (line 1189) | def resource_class(cls) -> Type[SnapshotResource]:
  class Macro (line 1199) | class Macro(MacroResource, BaseNode):
    method resource_class (line 1201) | def resource_class(cls) -> Type[MacroResource]:
    method same_contents (line 1204) | def same_contents(self, other: Optional["Macro"]) -> bool:
    method depends_on_macros (line 1212) | def depends_on_macros(self):
  class Documentation (line 1222) | class Documentation(DocumentationResource, BaseNode):
    method resource_class (line 1224) | def resource_class(cls) -> Type[DocumentationResource]:
    method search_name (line 1228) | def search_name(self):
    method same_contents (line 1231) | def same_contents(self, other: Optional["Documentation"]) -> bool:
  function normalize_test (line 1244) | def normalize_test(testdef: TestDef) -> Dict[str, Any]:
  class UnpatchedSourceDefinition (line 1252) | class UnpatchedSourceDefinition(BaseNode):
    method get_full_source_name (line 1259) | def get_full_source_name(self):
    method get_source_representation (line 1262) | def get_source_representation(self):
    method validate_data_tests (line 1265) | def validate_data_tests(self, is_root_project: bool):
    method quote_columns (line 1290) | def quote_columns(self) -> Optional[bool]:
    method columns (line 1299) | def columns(self) -> Sequence[UnparsedColumn]:
    method get_tests (line 1302) | def get_tests(self) -> Iterator[Tuple[Dict[str, Any], Optional[Unparse...
    method data_tests (line 1312) | def data_tests(self) -> List[TestDef]:
    method tests (line 1320) | def tests(self) -> List[TestDef]:
  class SourceDefinition (line 1328) | class SourceDefinition(
    method resource_class (line 1335) | def resource_class(cls) -> Type[SourceDefinitionResource]:
    method same_database_representation (line 1338) | def same_database_representation(self, other: "SourceDefinition") -> b...
    method same_quoting (line 1350) | def same_quoting(self, other: "SourceDefinition") -> bool:
    method same_freshness (line 1353) | def same_freshness(self, other: "SourceDefinition") -> bool:
    method same_external (line 1360) | def same_external(self, other: "SourceDefinition") -> bool:
    method same_config (line 1363) | def same_config(self, old: "SourceDefinition") -> bool:
    method same_contents (line 1369) | def same_contents(self, old: Optional["SourceDefinition"]) -> bool:
    method get_full_source_name (line 1392) | def get_full_source_name(self):
    method get_source_representation (line 1395) | def get_source_representation(self):
    method is_refable (line 1399) | def is_refable(self):
    method is_ephemeral (line 1403) | def is_ephemeral(self):
    method is_ephemeral_model (line 1407) | def is_ephemeral_model(self):
    method depends_on_nodes (line 1411) | def depends_on_nodes(self):
    method depends_on (line 1415) | def depends_on(self):
    method refs (line 1419) | def refs(self):
    method sources (line 1423) | def sources(self):
    method has_freshness (line 1427) | def has_freshness(self) -> bool:
    method search_name (line 1431) | def search_name(self):
    method group (line 1435) | def group(self):
  class Exposure (line 1445) | class Exposure(NodeInfoMixin, GraphNode, ExposureResource):
    method depends_on_nodes (line 1447) | def depends_on_nodes(self):
    method search_name (line 1451) | def search_name(self):
    method resource_class (line 1455) | def resource_class(cls) -> Type[ExposureResource]:
    method same_depends_on (line 1458) | def same_depends_on(self, old: "Exposure") -> bool:
    method same_description (line 1461) | def same_description(self, old: "Exposure") -> bool:
    method same_label (line 1464) | def same_label(self, old: "Exposure") -> bool:
    method same_maturity (line 1467) | def same_maturity(self, old: "Exposure") -> bool:
    method same_owner (line 1470) | def same_owner(self, old: "Exposure") -> bool:
    method same_exposure_type (line 1473) | def same_exposure_type(self, old: "Exposure") -> bool:
    method same_url (line 1476) | def same_url(self, old: "Exposure") -> bool:
    method same_config (line 1479) | def same_config(self, old: "Exposure") -> bool:
    method same_contents (line 1485) | def same_contents(self, old: Optional["Exposure"]) -> bool:
    method group (line 1505) | def group(self):
    method __post_serialize__ (line 1508) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
  class Metric (line 1521) | class Metric(GraphNode, MetricResource):
    method depends_on_nodes (line 1523) | def depends_on_nodes(self):
    method search_name (line 1527) | def search_name(self):
    method resource_class (line 1531) | def resource_class(cls) -> Type[MetricResource]:
    method same_description (line 1534) | def same_description(self, old: "Metric") -> bool:
    method same_label (line 1537) | def same_label(self, old: "Metric") -> bool:
    method same_config (line 1540) | def same_config(self, old: "Metric") -> bool:
    method same_filter (line 1546) | def same_filter(self, old: "Metric") -> bool:
    method same_metadata (line 1549) | def same_metadata(self, old: "Metric") -> bool:
    method same_type (line 1552) | def same_type(self, old: "Metric") -> bool:
    method same_type_params (line 1555) | def same_type_params(self, old: "Metric") -> bool:
    method same_contents (line 1558) | def same_contents(self, old: Optional["Metric"]) -> bool:
    method add_input_measure (line 1575) | def add_input_measure(self, input_measure: MetricInputMeasure) -> None:
  class Group (line 1588) | class Group(GroupResource, BaseNode):
    method resource_class (line 1590) | def resource_class(cls) -> Type[GroupResource]:
    method to_logging_dict (line 1593) | def to_logging_dict(self) -> Dict[str, Union[str, Dict[str, str]]]:
  class FunctionNode (line 1607) | class FunctionNode(CompiledNode, FunctionResource):
    method resource_class (line 1610) | def resource_class(cls) -> Type[FunctionResource]:
  class SemanticModel (line 1620) | class SemanticModel(GraphNode, SemanticModelResource):
    method depends_on_nodes (line 1622) | def depends_on_nodes(self):
    method depends_on_macros (line 1626) | def depends_on_macros(self):
    method resource_class (line 1630) | def resource_class(cls) -> Type[SemanticModelResource]:
    method same_model (line 1633) | def same_model(self, old: "SemanticModel") -> bool:
    method same_description (line 1636) | def same_description(self, old: "SemanticModel") -> bool:
    method same_defaults (line 1639) | def same_defaults(self, old: "SemanticModel") -> bool:
    method same_entities (line 1642) | def same_entities(self, old: "SemanticModel") -> bool:
    method same_dimensions (line 1645) | def same_dimensions(self, old: "SemanticModel") -> bool:
    method same_measures (line 1648) | def same_measures(self, old: "SemanticModel") -> bool:
    method same_config (line 1651) | def same_config(self, old: "SemanticModel") -> bool:
    method same_primary_entity (line 1654) | def same_primary_entity(self, old: "SemanticModel") -> bool:
    method same_group (line 1657) | def same_group(self, old: "SemanticModel") -> bool:
    method same_contents (line 1660) | def same_contents(self, old: Optional["SemanticModel"]) -> bool:
  class SavedQuery (line 1686) | class SavedQuery(NodeInfoMixin, GraphNode, SavedQueryResource):
    method resource_class (line 1688) | def resource_class(cls) -> Type[SavedQueryResource]:
    method same_metrics (line 1691) | def same_metrics(self, old: "SavedQuery") -> bool:
    method same_group_by (line 1694) | def same_group_by(self, old: "SavedQuery") -> bool:
    method same_description (line 1697) | def same_description(self, old: "SavedQuery") -> bool:
    method same_where (line 1700) | def same_where(self, old: "SavedQuery") -> bool:
    method same_label (line 1703) | def same_label(self, old: "SavedQuery") -> bool:
    method same_config (line 1706) | def same_config(self, old: "SavedQuery") -> bool:
    method same_group (line 1709) | def same_group(self, old: "SavedQuery") -> bool:
    method same_exports (line 1712) | def same_exports(self, old: "SavedQuery") -> bool:
    method same_tags (line 1727) | def same_tags(self, old: "SavedQuery") -> bool:
    method same_contents (line 1730) | def same_contents(self, old: Optional["SavedQuery"]) -> bool:
    method __post_serialize__ (line 1749) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
  class ParsedPatch (line 1762) | class ParsedPatch(HasYamlMetadata):
  class ParsedNodePatch (line 1774) | class ParsedNodePatch(ParsedPatch):
  class ParsedFunctionPatchRequired (line 1791) | class ParsedFunctionPatchRequired:
  class ParsedFunctionPatch (line 1800) | class ParsedFunctionPatch(ParsedNodePatch, ParsedFunctionPatchRequired):
  class ParsedMacroPatch (line 1805) | class ParsedMacroPatch(ParsedPatch):
  class ParsedSingularTestPatch (line 1810) | class ParsedSingularTestPatch(ParsedPatch):

FILE: core/dbt/contracts/graph/semantic_manifest.py
  class SemanticManifest (line 46) | class SemanticManifest:
    method __init__ (line 47) | def __init__(self, manifest: Manifest) -> None:
    method validate (line 50) | def validate(self) -> bool:
    method write_json_to_file (line 141) | def write_json_to_file(self, file_path: str):
    method _get_pydantic_semantic_manifest (line 147) | def _get_pydantic_semantic_manifest(self) -> PydanticSemanticManifest:

FILE: core/dbt/contracts/graph/unparsed.py
  class UnparsedBaseNode (line 58) | class UnparsedBaseNode(dbtClassMixin):
    method file_id (line 64) | def file_id(self):
  class HasCode (line 69) | class HasCode(dbtClassMixin):
    method empty (line 74) | def empty(self):
  class UnparsedMacro (line 79) | class UnparsedMacro(UnparsedBaseNode, HasCode):
  class UnparsedGenericTest (line 84) | class UnparsedGenericTest(UnparsedBaseNode, HasCode):
  class UnparsedNode (line 89) | class UnparsedNode(UnparsedBaseNode, HasCode):
    method search_name (line 94) | def search_name(self):
  class UnparsedRunHook (line 99) | class UnparsedRunHook(UnparsedNode):
  class HasColumnProps (line 105) | class HasColumnProps(AdditionalPropertiesMixin, ExtensibleDbtClassMixin):
  class HasColumnAndTestProps (line 120) | class HasColumnAndTestProps(HasColumnProps):
  class HasColumnDocs (line 128) | class HasColumnDocs(dbtClassMixin):
  class HasYamlMetadata (line 133) | class HasYamlMetadata(dbtClassMixin):
    method file_id (line 139) | def file_id(self):
  class HasConfig (line 144) | class HasConfig:
  class UnparsedDimensionBase (line 149) | class UnparsedDimensionBase(dbtClassMixin):
  class UnparsedDimensionTypeParams (line 160) | class UnparsedDimensionTypeParams(dbtClassMixin):
  class UnparsedDimension (line 168) | class UnparsedDimension(UnparsedDimensionBase):
  class UnparsedDimensionV2 (line 177) | class UnparsedDimensionV2(UnparsedDimensionBase):
  class UnparsedDerivedDimensionV2 (line 184) | class UnparsedDerivedDimensionV2(UnparsedDimensionV2):
    method validate (line 193) | def validate(cls, data):
  class UnparsedEntityBase (line 205) | class UnparsedEntityBase(dbtClassMixin):
  class UnparsedEntity (line 214) | class UnparsedEntity(UnparsedEntityBase):
  class UnparsedColumnEntityV2 (line 222) | class UnparsedColumnEntityV2(UnparsedEntityBase):
  class UnparsedDerivedEntityV2 (line 230) | class UnparsedDerivedEntityV2(UnparsedEntityBase):
  class UnparsedColumn (line 237) | class UnparsedColumn(HasConfig, HasColumnAndTestProps):
    method validate (line 252) | def validate(cls, data):
  class HasColumnTests (line 283) | class HasColumnTests(dbtClassMixin):
  class MetricFilter (line 288) | class MetricFilter(dbtClassMixin):
  class MetricTimePeriod (line 295) | class MetricTimePeriod(StrEnum):
    method plural (line 301) | def plural(self) -> str:
  class MetricTime (line 306) | class MetricTime(dbtClassMixin, Mergeable):
    method __bool__ (line 310) | def __bool__(self):
  class UnparsedMetricInputMeasure (line 315) | class UnparsedMetricInputMeasure(dbtClassMixin):
  class UnparsedMetricInput (line 325) | class UnparsedMetricInput(dbtClassMixin):
  class UnparsedConversionTypeParams (line 335) | class UnparsedConversionTypeParams(dbtClassMixin):
  class UnparsedCumulativeTypeParams (line 349) | class UnparsedCumulativeTypeParams(dbtClassMixin):
  class UnparsedMetricTypeParams (line 358) | class UnparsedMetricTypeParams(dbtClassMixin):
  class UnparsedMetricBase (line 373) | class UnparsedMetricBase(dbtClassMixin):
    method validate (line 386) | def validate(cls, data):
  class UnparsedMetric (line 408) | class UnparsedMetric(UnparsedMetricBase):
  class UnparsedNonAdditiveDimensionV2 (line 420) | class UnparsedNonAdditiveDimensionV2(dbtClassMixin):
  class UnparsedMetricV2 (line 427) | class UnparsedMetricV2(UnparsedMetricBase):
    method validate (line 463) | def validate(cls, data):
  class UnparsedVersion (line 470) | class UnparsedVersion(dbtClassMixin):
    method __lt__ (line 485) | def __lt__(self, other):
    method include_exclude (line 492) | def include_exclude(self) -> dbt_common.helper_types.IncludeExclude:
    method unparsed_columns (line 496) | def unparsed_columns(self) -> List:
    method formatted_v (line 500) | def formatted_v(self) -> str:
    method __post_init__ (line 503) | def __post_init__(self):
  class UnparsedAnalysisUpdate (line 521) | class UnparsedAnalysisUpdate(HasConfig, HasColumnDocs, HasColumnProps, H...
  class UnparsedSingularTestUpdate (line 526) | class UnparsedSingularTestUpdate(HasConfig, HasColumnProps, HasYamlMetad...
  class UnparsedNodeUpdate (line 531) | class UnparsedNodeUpdate(HasConfig, HasColumnTests, HasColumnAndTestProp...
  class UnparsedDerivedSemantics (line 537) | class UnparsedDerivedSemantics(dbtClassMixin):
  class UnparsedSemanticResourceConfig (line 543) | class UnparsedSemanticResourceConfig(dbtClassMixin):
  class UnparsedSemanticModelConfig (line 548) | class UnparsedSemanticModelConfig(dbtClassMixin):
  class UnparsedModelUpdate (line 556) | class UnparsedModelUpdate(UnparsedNodeUpdate):
    method __post_init__ (line 573) | def __post_init__(self) -> None:
    method get_columns_for_version (line 628) | def get_columns_for_version(self, version: NodeVersion) -> List[Unpars...
    method get_tests_for_version (line 645) | def get_tests_for_version(self, version: NodeVersion) -> List[TestDef]:
  class UnparsedMacroUpdate (line 659) | class UnparsedMacroUpdate(HasConfig, HasColumnProps, HasYamlMetadata):
  class UnparsedSourceTableDefinition (line 664) | class UnparsedSourceTableDefinition(HasColumnTests, HasColumnAndTestProps):
    method __post_serialize__ (line 675) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
  class UnparsedSourceDefinition (line 683) | class UnparsedSourceDefinition(dbtClassMixin):
    method validate (line 702) | def validate(cls, data):
    method yaml_key (line 713) | def yaml_key(self) -> "str":
    method __post_serialize__ (line 716) | def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None):
  class SourceTablePatch (line 724) | class SourceTablePatch(dbtClassMixin):
    method to_patch_dict (line 742) | def to_patch_dict(self) -> Dict[str, Any]:
  class SourcePatch (line 756) | class SourcePatch(dbtClassMixin):
    method to_patch_dict (line 780) | def to_patch_dict(self) -> Dict[str, Any]:
    method get_table_named (line 792) | def get_table_named(self, name: str) -> Optional[SourceTablePatch]:
  class UnparsedDocumentation (line 801) | class UnparsedDocumentation(dbtClassMixin):
    method file_id (line 807) | def file_id(self):
    method resource_type (line 811) | def resource_type(self):
  class UnparsedDocumentationFile (line 816) | class UnparsedDocumentationFile(UnparsedDocumentation):
  class Maturity (line 822) | class Maturity(StrEnum):
    method __lt__ (line 827) | def __lt__(self, other):
    method __gt__ (line 833) | def __gt__(self, other):
    method __ge__ (line 838) | def __ge__(self, other):
    method __le__ (line 843) | def __le__(self, other):
  class UnparsedExposure (line 850) | class UnparsedExposure(dbtClassMixin):
    method validate (line 864) | def validate(cls, data):
  class UnparsedGroup (line 876) | class UnparsedGroup(dbtClassMixin):
    method validate (line 883) | def validate(cls, data):
  class UnparsedFunctionReturns (line 898) | class UnparsedFunctionReturns(dbtClassMixin):
  class UnparsedFunctionUpdate (line 903) | class UnparsedFunctionUpdate(HasConfig, HasColumnProps, HasYamlMetadata,...
  class UnparsedNonAdditiveDimension (line 914) | class UnparsedNonAdditiveDimension(dbtClassMixin):
  class PercentileType (line 920) | class PercentileType(str, Enum):
  class UnparsedMeasure (line 926) | class UnparsedMeasure(dbtClassMixin):
  class UnparsedSemanticModel (line 940) | class UnparsedSemanticModel(dbtClassMixin):
  class UnparsedQueryParams (line 954) | class UnparsedQueryParams(dbtClassMixin):
  class UnparsedExport (line 964) | class UnparsedExport(dbtClassMixin):
  class UnparsedSavedQuery (line 972) | class UnparsedSavedQuery(dbtClassMixin):
  function normalize_date (line 987) | def normalize_date(d: Optional[datetime.date]) -> Optional[datetime.date...
  class UnparsedUnitTest (line 1003) | class UnparsedUnitTest(dbtClassMixin):
    method validate (line 1014) | def validate(cls, data):

FILE: core/dbt/contracts/project.py
  class SemverString (line 22) | class SemverString(str, SerializableType):
    method _serialize (line 23) | def _serialize(self) -> str:
    method _deserialize (line 27) | def _deserialize(cls, value: str) -> "SemverString":
  class Quoting (line 36) | class Quoting(dbtClassMixin, Mergeable):
  class Package (line 45) | class Package(dbtClassMixin):
    method __post_serialize__ (line 49) | def __post_serialize__(self, data, context: Optional[Dict]):
  class LocalPackage (line 57) | class LocalPackage(Package):
  class TarballPackage (line 68) | class TarballPackage(Package):
  class GitPackage (line 75) | class GitPackage(Package):
    method get_revisions (line 83) | def get_revisions(self) -> List[str]:
  class PrivatePackage (line 91) | class PrivatePackage(Package):
  class RegistryPackage (line 102) | class RegistryPackage(Package):
    method get_versions (line 109) | def get_versions(self) -> List[str]:
  class PackageConfig (line 120) | class PackageConfig(dbtClassMixin):
    method validate (line 124) | def validate(cls, data):
  class ProjectPackageMetadata (line 155) | class ProjectPackageMetadata:
    method from_project (line 160) | def from_project(cls, project):
  class Downloads (line 165) | class Downloads(ExtensibleDbtClassMixin):
  class RegistryPackageMetadata (line 170) | class RegistryPackageMetadata(
  class Project (line 223) | class Project(dbtClassMixin):
    class Config (line 277) | class Config(dbtMashConfig):
    method validate (line 308) | def validate(cls, data):
  class ProjectFlags (line 333) | class ProjectFlags(ExtensibleDbtClassMixin):
    method project_only_flags (line 376) | def project_only_flags(self) -> Dict[str, Any]:
  class ProfileConfig (line 399) | class ProfileConfig(dbtClassMixin):
  class ConfiguredQuoting (line 408) | class ConfiguredQuoting(Quoting):
  class Configuration (line 417) | class Configuration(Project, ProfileConfig):
  class ProjectList (line 426) | class ProjectList(dbtClassMixin):

FILE: core/dbt/contracts/selection.py
  class SelectorDefinition (line 8) | class SelectorDefinition(dbtClassMixin):
  class SelectorFile (line 16) | class SelectorFile(dbtClassMixin):

FILE: core/dbt/contracts/sql.py
  class RemoteCompileResultMixin (line 21) | class RemoteCompileResultMixin(VersionedSchema):
  class RemoteCompileResult (line 30) | class RemoteCompileResult(RemoteCompileResultMixin):
    method error (line 36) | def error(self) -> None:
  class RemoteExecutionResult (line 43) | class RemoteExecutionResult(ExecutionResult):
    method write (line 50) | def write(self, path: str) -> None:
    method from_local_result (line 61) | def from_local_result(
  class ResultTable (line 74) | class ResultTable(dbtClassMixin):
  class RemoteRunResult (line 81) | class RemoteRunResult(RemoteCompileResultMixin):

FILE: core/dbt/contracts/state.py
  function load_result_state (line 14) | def load_result_state(results_path) -> Optional[RunResultsArtifact]:
  class PreviousState (line 24) | class PreviousState:
    method __init__ (line 25) | def __init__(self, state_path: Path, target_path: Path, project_root: ...

FILE: core/dbt/contracts/util.py
  function list_str (line 10) | def list_str() -> List[str]:
  class Identifier (line 26) | class Identifier(ValidatedStringMixin):
    method is_valid (line 37) | def is_valid(cls, value: Any) -> bool:

FILE: core/dbt/deprecations.py
  class DBTDeprecation (line 14) | class DBTDeprecation:
    method name (line 20) | def name(self) -> str:
    method track_deprecation_warn (line 25) | def track_deprecation_warn(self) -> None:
    method event (line 30) | def event(self) -> abc.ABCMeta:
    method preview (line 42) | def preview(self, base_event: abc.ABCMeta) -> None:
    method show (line 46) | def show(self, *args, **kwargs) -> None:
  class PackageRedirectDeprecation (line 60) | class PackageRedirectDeprecation(DBTDeprecation):
  class PackageInstallPathDeprecation (line 65) | class PackageInstallPathDeprecation(DBTDeprecation):
  class ConfigSourcePathDeprecation (line 72) | class ConfigSourcePathDeprecation(DBTDeprecation):
  class ConfigDataPathDeprecation (line 77) | class ConfigDataPathDeprecation(DBTDeprecation):
  class ConfigLogPathDeprecation (line 82) | class ConfigLogPathDeprecation(DBTDeprecation):
  class ConfigTargetPathDeprecation (line 87) | class ConfigTargetPathDeprecation(DBTDeprecation):
  function renamed_method (line 92) | def renamed_method(old_name: str, new_name: str):
  class MetricAttributesRenamed (line 102) | class MetricAttributesRenamed(DBTDeprecation):
  class ExposureNameDeprecation (line 107) | class ExposureNameDeprecation(DBTDeprecation):
  class CollectFreshnessReturnSignature (line 112) | class CollectFreshnessReturnSignature(DBTDeprecation):
  class ProjectFlagsMovedDeprecation (line 117) | class ProjectFlagsMovedDeprecation(DBTDeprecation):
  class PackageMaterializationOverrideDeprecation (line 122) | class PackageMaterializationOverrideDeprecation(DBTDeprecation):
  class ResourceNamesWithSpacesDeprecation (line 127) | class ResourceNamesWithSpacesDeprecation(DBTDeprecation):
  class SourceFreshnessProjectHooksNotRun (line 132) | class SourceFreshnessProjectHooksNotRun(DBTDeprecation):
  class MFTimespineWithoutYamlConfigurationDeprecation (line 137) | class MFTimespineWithoutYamlConfigurationDeprecation(DBTDeprecation):
  class MFCumulativeTypeParamsDeprecation (line 142) | class MFCumulativeTypeParamsDeprecation(DBTDeprecation):
  class MicrobatchMacroOutsideOfBatchesDeprecation (line 147) | class MicrobatchMacroOutsideOfBatchesDeprecation(DBTDeprecation):
  class GenericJSONSchemaValidationDeprecation (line 152) | class GenericJSONSchemaValidationDeprecation(DBTDeprecation):
  class UnexpectedJinjaBlockDeprecation (line 158) | class UnexpectedJinjaBlockDeprecation(DBTDeprecation):
  class DuplicateYAMLKeysDeprecation (line 163) | class DuplicateYAMLKeysDeprecation(DBTDeprecation):
  class CustomTopLevelKeyDeprecation (line 168) | class CustomTopLevelKeyDeprecation(DBTDeprecation):
  class CustomKeyInConfigDeprecation (line 173) | class CustomKeyInConfigDeprecation(DBTDeprecation):
  class CustomKeyInObjectDeprecation (line 178) | class CustomKeyInObjectDeprecation(DBTDeprecation):
  class WEOInlcudeExcludeDeprecation (line 183) | class WEOInlcudeExcludeDeprecation(DBTDeprecation):
  class CustomOutputPathInSourceFreshnessDeprecation (line 188) | class CustomOutputPathInSourceFreshnessDeprecation(DBTDeprecation):
  class SourceOverrideDeprecation (line 193) | class SourceOverrideDeprecation(DBTDeprecation):
  class PropertyMovedToConfigDeprecation (line 198) | class PropertyMovedToConfigDeprecation(DBTDeprecation):
  class ModelParamUsageDeprecation (line 203) | class ModelParamUsageDeprecation(DBTDeprecation):
  class EnvironmentVariableNamespaceDeprecation (line 208) | class EnvironmentVariableNamespaceDeprecation(DBTDeprecation):
  class MissingPlusPrefixDeprecation (line 213) | class MissingPlusPrefixDeprecation(DBTDeprecation):
  class ArgumentsPropertyInGenericTestDeprecation (line 218) | class ArgumentsPropertyInGenericTestDeprecation(DBTDeprecation):
  class MissingArgumentsPropertyInGenericTestDeprecation (line 223) | class MissingArgumentsPropertyInGenericTestDeprecation(DBTDeprecation):
  class ModulesItertoolsUsageDeprecation (line 228) | class ModulesItertoolsUsageDeprecation(DBTDeprecation):
  class DuplicateNameDistinctNodeTypesDeprecation (line 233) | class DuplicateNameDistinctNodeTypesDeprecation(DBTDeprecation):
  class TimeDimensionsRequireGranularityDeprecation (line 238) | class TimeDimensionsRequireGranularityDeprecation(DBTDeprecation):
  class GenericSemanticLayerDeprecation (line 243) | class GenericSemanticLayerDeprecation(DBTDeprecation):
  class GenerateSchemaNameNullValueDeprecation (line 248) | class GenerateSchemaNameNullValueDeprecation(DBTDeprecation):
  function renamed_env_var (line 253) | def renamed_env_var(old_name: str, new_name: str):
  function warn (line 268) | def warn(name: str, *args, **kwargs) -> None:
  function buffer (line 276) | def buffer(name: str, *args, **kwargs):
  function show_deprecations_summary (line 283) | def show_deprecations_summary() -> None:
  function reset_deprecations (line 350) | def reset_deprecations():
  function fire_buffered_deprecations (line 354) | def fire_buffered_deprecations():
  class DeprecationSummary (line 360) | class DeprecationSummary(dbtClassMixin):
    method to_msg_dict (line 365) | def to_msg_dict(self) -> Dict[str, Any]:

FILE: core/dbt/deps/base.py
  function get_downloads_path (line 18) | def get_downloads_path():
  function downloads_directory (line 23) | def downloads_directory():
  class BasePackage (line 47) | class BasePackage(metaclass=abc.ABCMeta):
    method name (line 49) | def name(self) -> str:
    method all_names (line 52) | def all_names(self) -> List[str]:
    method source_type (line 56) | def source_type(self) -> str:
  class PinnedPackage (line 60) | class PinnedPackage(BasePackage):
    method __init__ (line 61) | def __init__(self) -> None:
    method __str__ (line 64) | def __str__(self) -> str:
    method get_version (line 72) | def get_version(self) -> Optional[str]:
    method _fetch_metadata (line 76) | def _fetch_metadata(self, project, renderer):
    method install (line 80) | def install(self, project, renderer):
    method nice_version_name (line 84) | def nice_version_name(self):
    method to_dict (line 88) | def to_dict(self) -> Dict[str, str]:
    method fetch_metadata (line 91) | def fetch_metadata(self, project, renderer):
    method get_project_name (line 96) | def get_project_name(self, project, renderer):
    method get_installation_path (line 100) | def get_installation_path(self, project, renderer):
    method get_subdirectory (line 104) | def get_subdirectory(self):
    method _install (line 107) | def _install(self, project, renderer):
    method download_and_untar (line 123) | def download_and_untar(self, download_url, tar_path, deps_path, packag...
  class UnpinnedPackage (line 140) | class UnpinnedPackage(Generic[SomePinned], BasePackage):
    method from_contract (line 143) | def from_contract(cls, contract):
    method incorporate (line 147) | def incorporate(self: SomeUnpinned, other: SomeUnpinned) -> SomeUnpinned:
    method resolved (line 151) | def resolved(self) -> SomePinned:

FILE: core/dbt/deps/git.py
  function md5sum (line 22) | def md5sum(s: str):
  class GitPackageMixin (line 26) | class GitPackageMixin:
    method __init__ (line 27) | def __init__(
    method name (line 39) | def name(self):
    method source_type (line 42) | def source_type(self) -> str:
  class GitPinnedPackage (line 46) | class GitPinnedPackage(GitPackageMixin, PinnedPackage):
    method __init__ (line 47) | def __init__(
    method to_dict (line 61) | def to_dict(self) -> Dict[str, str]:
    method get_version (line 73) | def get_version(self):
    method get_subdirectory (line 76) | def get_subdirectory(self):
    method nice_version_name (line 79) | def nice_version_name(self):
    method _checkout (line 85) | def _checkout(self):
    method _fetch_metadata (line 104) | def _fetch_metadata(
    method install (line 119) | def install(self, project, renderer):
  class GitUnpinnedPackage (line 130) | class GitUnpinnedPackage(GitPackageMixin, UnpinnedPackage[GitPinnedPacka...
    method __init__ (line 131) | def __init__(
    method from_contract (line 145) | def from_contract(cls, contract: GitPackage) -> "GitUnpinnedPackage":
    method all_names (line 158) | def all_names(self) -> List[str]:
    method incorporate (line 172) | def incorporate(self, other: "GitUnpinnedPackage") -> "GitUnpinnedPack...
    method resolved (line 183) | def resolved(self) -> GitPinnedPackage:

FILE: core/dbt/deps/local.py
  class LocalPackageMixin (line 13) | class LocalPackageMixin:
    method __init__ (line 14) | def __init__(self, local: str) -> None:
    method name (line 19) | def name(self):
    method source_type (line 22) | def source_type(self):
  class LocalPinnedPackage (line 26) | class LocalPinnedPackage(LocalPackageMixin, PinnedPackage):
    method __init__ (line 27) | def __init__(self, local: str) -> None:
    method to_dict (line 30) | def to_dict(self) -> Dict[str, str]:
    method get_version (line 35) | def get_version(self):
    method nice_version_name (line 38) | def nice_version_name(self):
    method resolve_path (line 41) | def resolve_path(self, project):
    method _fetch_metadata (line 47) | def _fetch_metadata(
    method install (line 53) | def install(self, project, renderer):
  class LocalUnpinnedPackage (line 70) | class LocalUnpinnedPackage(LocalPackageMixin, UnpinnedPackage[LocalPinne...
    method from_contract (line 72) | def from_contract(cls, contract: LocalPackage) -> "LocalUnpinnedPackage":
    method incorporate (line 75) | def incorporate(self, other: "LocalUnpinnedPackage") -> "LocalUnpinned...
    method resolved (line 78) | def resolved(self) -> LocalPinnedPackage:

FILE: core/dbt/deps/registry.py
  class RegistryPackageMixin (line 17) | class RegistryPackageMixin:
    method __init__ (line 18) | def __init__(self, package: str) -> None:
    method name (line 23) | def name(self):
    method source_type (line 26) | def source_type(self) -> str:
  class RegistryPinnedPackage (line 30) | class RegistryPinnedPackage(RegistryPackageMixin, PinnedPackage):
    method __init__ (line 31) | def __init__(self, package: str, version: str, version_latest: str) ->...
    method name (line 37) | def name(self):
    method to_dict (line 40) | def to_dict(self) -> Dict[str, str]:
    method source_type (line 46) | def source_type(self):
    method get_version (line 49) | def get_version(self):
    method get_version_latest (line 52) | def get_version_latest(self):
    method nice_version_name (line 55) | def nice_version_name(self):
    method _fetch_metadata (line 58) | def _fetch_metadata(self, project, renderer) -> RegistryPackageMetadata:
    method install (line 62) | def install(self, project, renderer):
  class RegistryUnpinnedPackage (line 66) | class RegistryUnpinnedPackage(RegistryPackageMixin, UnpinnedPackage[Regi...
    method __init__ (line 67) | def __init__(
    method _check_in_index (line 74) | def _check_in_index(self):
    method from_contract (line 80) | def from_contract(cls, contract: RegistryPackage) -> "RegistryUnpinned...
    method incorporate (line 90) | def incorporate(self, other: "RegistryUnpinnedPackage") -> "RegistryUn...
    method resolved (line 97) | def resolved(self) -> RegistryPinnedPackage:

FILE: core/dbt/deps/resolver.py
  class PackageListing (line 28) | class PackageListing:
    method __len__ (line 31) | def __len__(self):
    method __bool__ (line 34) | def __bool__(self):
    method _pick_key (line 37) | def _pick_key(self, key: BasePackage) -> str:
    method __contains__ (line 43) | def __contains__(self, key: BasePackage):
    method __getitem__ (line 48) | def __getitem__(self, key: BasePackage):
    method __setitem__ (line 52) | def __setitem__(self, key: BasePackage, value):
    method _mismatched_types (line 56) | def _mismatched_types(self, old: UnpinnedPackage, new: UnpinnedPackage...
    method incorporate (line 59) | def incorporate(self, package: UnpinnedPackage):
    method update_from (line 69) | def update_from(self, src: List[PackageSpec]) -> None:
    method from_contracts (line 89) | def from_contracts(cls: Type["PackageListing"], src: List[PackageSpec]...
    method resolved (line 94) | def resolved(self) -> List[PinnedPackage]:
    method __iter__ (line 97) | def __iter__(self) -> Iterator[UnpinnedPackage]:
  function _check_for_duplicate_project_names (line 101) | def _check_for_duplicate_project_names(
  function resolve_packages (line 116) | def resolve_packages(
  function resolve_lock_packages (line 140) | def resolve_lock_packages(packages: List[PackageSpec]) -> List[PinnedPac...

FILE: core/dbt/deps/tarball.py
  class TarballPackageMixin (line 16) | class TarballPackageMixin:
    method __init__ (line 17) | def __init__(self, tarball: str, tarball_unrendered: str) -> None:
    method name (line 23) | def name(self):
    method source_type (line 26) | def source_type(self) -> str:
  class TarballPinnedPackage (line 30) | class TarballPinnedPackage(TarballPackageMixin, PinnedPackage):
    method __init__ (line 31) | def __init__(self, tarball: str, tarball_unrendered: str, package: str...
    method name (line 39) | def name(self):
    method to_dict (line 42) | def to_dict(self) -> Dict[str, str]:
    method get_version (line 51) | def get_version(self):
    method nice_version_name (line 54) | def nice_version_name(self):
    method _fetch_metadata (line 57) | def _fetch_metadata(self, project, renderer):
    method install (line 78) | def install(self, project, renderer):
  class TarballUnpinnedPackage (line 92) | class TarballUnpinnedPackage(TarballPackageMixin, UnpinnedPackage[Tarbal...
    method __init__ (line 93) | def __init__(
    method from_contract (line 105) | def from_contract(cls, contract: TarballPackage) -> "TarballUnpinnedPa...
    method incorporate (line 112) | def incorporate(self, other: "TarballUnpinnedPackage") -> "TarballUnpi...
    method resolved (line 117) | def resolved(self) -> TarballPinnedPackage:

FILE: core/dbt/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js
  function highlight (line 62) | function highlight(node, addItems) {

FILE: core/dbt/docs/build/html/_static/doctools.js
  constant BLACKLISTED_KEY_CONTROL_ELEMENTS (line 13) | const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([

FILE: core/dbt/docs/build/html/_static/jquery-3.6.0.js
  function DOMEval (line 107) | function DOMEval( code, node, doc ) {
  function toType (line 137) | function toType( obj ) {
  function isArrayLike (line 507) | function isArrayLike( obj ) {
  function Sizzle (line 759) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 907) | function createCache() {
  function markFunction (line 927) | function markFunction( fn ) {
  function assert (line 936) | function assert( fn ) {
  function addHandle (line 960) | function addHandle( attrs, handler ) {
  function siblingCheck (line 975) | function siblingCheck( a, b ) {
  function createInputPseudo (line 1001) | function createInputPseudo( type ) {
  function createButtonPseudo (line 1012) | function createButtonPseudo( type ) {
  function createDisabledPseudo (line 1023) | function createDisabledPseudo( disabled ) {
  function createPositionalPseudo (line 1079) | function createPositionalPseudo( fn ) {
  function testContext (line 1102) | function testContext( context ) {
  function setFilters (line 2313) | function setFilters() {}
  function toSelector (line 2387) | function toSelector( tokens ) {
  function addCombinator (line 2397) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2464) | function elementMatcher( matchers ) {
  function multipleContexts (line 2478) | function multipleContexts( selector, contexts, results ) {
  function condense (line 2487) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2508) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2608) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2671) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function nodeName (line 3029) | function nodeName( elem, name ) {
  function winnow (line 3039) | function winnow( elements, qualifier, not ) {
  function sibling (line 3334) | function sibling( cur, dir ) {
  function createOptions (line 3427) | function createOptions( options ) {
  function Identity (line 3652) | function Identity( v ) {
  function Thrower (line 3655) | function Thrower( ex ) {
  function adoptValue (line 3659) | function adoptValue( value, resolve, reject, noValue ) {
  function resolve (line 3752) | function resolve( depth, deferred, handler, special ) {
  function completed (line 4117) | function completed() {
  function fcamelCase (line 4212) | function fcamelCase( _all, letter ) {
  function camelCase (line 4219) | function camelCase( string ) {
  function Data (line 4236) | function Data() {
  function getData (line 4405) | function getData( data ) {
  function dataAttr (line 4430) | function dataAttr( elem, key, data ) {
  function adjustCSS (line 4742) | function adjustCSS( elem, prop, valueParts, tween ) {
  function getDefaultDisplay (line 4810) | function getDefaultDisplay( elem ) {
  function showHide (line 4833) | function showHide( elements, show ) {
  function getAll (line 4965) | function getAll( context, tag ) {
  function setGlobalEval (line 4990) | function setGlobalEval( elems, refElements ) {
  function buildFragment (line 5006) | function buildFragment( elems, context, scripts, selection, ignored ) {
  function returnTrue (line 5098) | function returnTrue() {
  function returnFalse (line 5102) | function returnFalse() {
  function expectSync (line 5112) | function expectSync( elem, type ) {
  function safeActiveElement (line 5119) | function safeActiveElement() {
  function on (line 5125) | function on( elem, types, selector, data, fn, one ) {
  function leverageNative (line 5613) | function leverageNative( el, type, expectSync ) {
  function manipulationTarget (line 5962) | function manipulationTarget( elem, content ) {
  function disableScript (line 5973) | function disableScript( elem ) {
  function restoreScript (line 5977) | function restoreScript( elem ) {
  function cloneCopyEvent (line 5987) | function cloneCopyEvent( src, dest ) {
  function fixInput (line 6020) | function fixInput( src, dest ) {
  function domManip (line 6033) | function domManip( collection, args, callback, ignored ) {
  function remove (line 6125) | function remove( elem, selector, keepData ) {
  function computeStyleTests (line 6439) | function computeStyleTests() {
  function roundPixelMeasures (line 6483) | function roundPixelMeasures( measure ) {
  function curCSS (line 6576) | function curCSS( elem, name, computed ) {
  function addGetHookIf (line 6629) | function addGetHookIf( conditionFn, hookFn ) {
  function vendorPropName (line 6654) | function vendorPropName( name ) {
  function finalPropName (line 6669) | function finalPropName( name ) {
  function setPositiveNumber (line 6695) | function setPositiveNumber( _elem, value, subtract ) {
  function boxModelAdjustment (line 6707) | function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, ...
  function getWidthOrHeight (line 6775) | function getWidthOrHeight( elem, dimension, extra ) {
  function Tween (line 7151) | function Tween( elem, options, prop, end, easing ) {
  function schedule (line 7274) | function schedule() {
  function createFxNow (line 7287) | function createFxNow() {
  function genFx (line 7295) | function genFx( type, includeWidth ) {
  function createTween (line 7315) | function createTween( value, prop, animation ) {
  function defaultPrefilter (line 7329) | function defaultPrefilter( elem, props, opts ) {
  function propFilter (line 7501) | function propFilter( props, specialEasing ) {
  function Animation (line 7538) | function Animation( elem, properties, options ) {
  function stripAndCollapse (line 8254) | function stripAndCollapse( value ) {
  function getClass (line 8260) | function getClass( elem ) {
  function classesToArray (line 8264) | function classesToArray( value ) {
  function buildParams (line 8894) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 9047) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 9081) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 9110) | function ajaxExtend( target, src ) {
  function ajaxHandleResponses (line 9130) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 9188) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function done (line 9704) | function done( status, nativeStatusText, responses, headers ) {

FILE: core/dbt/docs/build/html/_static/jquery.js
  function b (line 2) | function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e...
  function w (line 2) | function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof...
  function p (line 2) | function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e...
  function se (line 2) | function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeTy...
  function ue (line 2) | function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cac...
  function le (line 2) | function le(e){return e[S]=!0,e}
  function ce (line 2) | function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(...
  function fe (line 2) | function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[...
  function pe (line 2) | function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourc...
  function de (line 2) | function de(t){return function(e){return"input"===e.nodeName.toLowerCase...
  function he (line 2) | function he(n){return function(e){var t=e.nodeName.toLowerCase();return(...
  function ge (line 2) | function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e....
  function ve (line 2) | function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,...
  function ye (line 2) | function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
  function me (line 2) | function me(){}
  function xe (line 2) | function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
  function be (line 2) | function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r...
  function we (line 2) | function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r-...
  function Te (line 2) | function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(...
  function Ce (line 2) | function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)...
  function Ee (line 2) | function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.r...
  function A (line 2) | function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerC...
  function j (line 2) | function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,...
  function O (line 2) | function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}
  function R (line 2) | function R(e){return e}
  function M (line 2) | function M(e){throw e}
  function I (line 2) | function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n...
  function l (line 2) | function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(...
  function B (line 2) | function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventLi...
  function U (line 2) | function U(e,t){return t.toUpperCase()}
  function X (line 2) | function X(e){return e.replace(_,"ms-").replace(z,U)}
  function G (line 2) | function G(){this.expando=S.expando+G.uid++}
  function Z (line 2) | function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.r...
  function se (line 2) | function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:functio...
  function le (line 2) | function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[...
  function ve (line 2) | function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNa...
  function ye (line 2) | function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",...
  function xe (line 2) | function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),...
  function we (line 2) | function we(){return!0}
  function Te (line 2) | function Te(){return!1}
  function Ce (line 2) | function Ce(e,t){return e===function(){try{return E.activeElement}catch(...
  function Ee (line 2) | function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"...
  function Se (line 2) | function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handle...
  function je (line 2) | function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"...
  function De (line 2) | function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
  function qe (line 2) | function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.sli...
  function Le (line 2) | function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=...
  function He (line 2) | function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],...
  function Oe (line 2) | function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)...
  function We (line 2) | function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n....
  function Fe (line 2) | function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(...
  function e (line 2) | function e(){if(l){u.style.cssText="position:absolute;left:-11111px;widt...
  function t (line 2) | function t(e){return Math.round(parseFloat(e))}
  function ze (line 2) | function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=fun...
  function Ye (line 2) | function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[...
  function Qe (line 2) | function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border...
  function Je (line 2) | function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-bo...
  function Ke (line 2) | function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}
  function ot (line 2) | function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnima...
  function at (line 2) | function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}
  function st (line 2) | function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin...
  function ut (line 2) | function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["...
  function lt (line 2) | function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().alw...
  function ht (line 2) | function ht(e){return(e.match(P)||[]).join(" ")}
  function gt (line 2) | function gt(e){return e.getAttribute&&e.getAttribute("class")||""}
  function vt (line 2) | function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)|...
  function At (line 2) | function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r|...
  function It (line 2) | function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var ...
  function Wt (line 2) | function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!...
  function Ft (line 2) | function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)voi...
  function l (line 2) | function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=vo...

FILE: core/dbt/docs/build/html/_static/sphinx_highlight.js
  constant SPHINX_HIGHLIGHT_ENABLED (line 4) | const SPHINX_HIGHLIGHT_ENABLED = true

FILE: core/dbt/docs/build/html/_static/underscore-1.13.1.js
  function restArguments (line 64) | function restArguments(func, startIndex) {
  function isObject (line 88) | function isObject(obj) {
  function isNull (line 94) | function isNull(obj) {
  function isUndefined (line 99) | function isUndefined(obj) {
  function isBoolean (line 104) | function isBoolean(obj) {
  function isElement (line 109) | function isElement(obj) {
  function tagTester (line 114) | function tagTester(name) {
  function ie10IsDataView (line 162) | function ie10IsDataView(obj) {
  function has$1 (line 173) | function has$1(obj, key) {
  function isFinite$1 (line 192) | function isFinite$1(obj) {
  function isNaN$1 (line 197) | function isNaN$1(obj) {
  function constant (line 202) | function constant(value) {
  function createSizePropertyCheck (line 209) | function createSizePropertyCheck(getSizeProperty) {
  function shallowProperty (line 217) | function shallowProperty(key) {
  function isTypedArray (line 232) | function isTypedArray(obj) {
  function emulatedSet (line 248) | function emulatedSet(keys) {
  function collectNonEnumProps (line 263) | function collectNonEnumProps(obj, keys) {
  function keys (line 283) | function keys(obj) {
  function isEmpty (line 295) | function isEmpty(obj) {
  function isMatch (line 307) | function isMatch(object, attrs) {
  function _$1 (line 321) | function _$1(obj) {
  function toBufferView (line 344) | function toBufferView(bufferSource) {
  function eq (line 356) | function eq(a, b, aStack, bStack) {
  function deepEq (line 371) | function deepEq(a, b, aStack, bStack) {
  function isEqual (line 476) | function isEqual(a, b) {
  function allKeys (line 481) | function allKeys(obj) {
  function ie11fingerprint (line 494) | function ie11fingerprint(methods) {
  function values (line 533) | function values(obj) {
  function pairs (line 545) | function pairs(obj) {
  function invert (line 556) | function invert(obj) {
  function functions (line 566) | function functions(obj) {
  function createAssigner (line 575) | function createAssigner(keysFunc, defaults) {
  function ctor (line 605) | function ctor() {
  function baseCreate (line 610) | function baseCreate(prototype) {
  function create (line 623) | function create(prototype, props) {
  function clone (line 630) | function clone(obj) {
  function tap (line 638) | function tap(obj, interceptor) {
  function toPath$1 (line 645) | function toPath$1(path) {
  function toPath (line 652) | function toPath(path) {
  function deepGet (line 657) | function deepGet(obj, path) {
  function get (line 670) | function get(object, path, defaultValue) {
  function has (line 678) | function has(obj, path) {
  function identity (line 690) | function identity(value) {
  function matcher (line 696) | function matcher(attrs) {
  function property (line 705) | function property(path) {
  function optimizeCb (line 715) | function optimizeCb(func, context, argCount) {
  function baseIteratee (line 737) | function baseIteratee(value, context, argCount) {
  function iteratee (line 747) | function iteratee(value, context) {
  function cb (line 754) | function cb(value, context, argCount) {
  function mapObject (line 761) | function mapObject(obj, iteratee, context) {
  function noop (line 774) | function noop(){}
  function propertyOf (line 777) | function propertyOf(obj) {
  function times (line 785) | function times(n, iteratee, context) {
  function random (line 793) | function random(min, max) {
  function createEscaper (line 808) | function createEscaper(map) {
  function escapeChar (line 867) | function escapeChar(match) {
  function template (line 882) | function template(text, settings, oldSettings) {
  function result (line 950) | function result(obj, path, fallback) {
  function uniqueId (line 970) | function uniqueId(prefix) {
  function chain (line 976) | function chain(obj) {
  function executeBound (line 985) | function executeBound(sourceFunc, boundFunc, context, callingContext, ar...
  function flatten$1 (line 1030) | function flatten$1(input, depth, strict, output) {
  function memoize (line 1071) | function memoize(func, hasher) {
  function throttle (line 1099) | function throttle(func, wait, options) {
  function debounce (line 1144) | function debounce(func, wait, immediate) {
  function wrap (line 1181) | function wrap(func, wrapper) {
  function negate (line 1186) | function negate(predicate) {
  function compose (line 1194) | function compose() {
  function after (line 1206) | function after(times, func) {
  function before (line 1216) | function before(times, func) {
  function findKey (line 1232) | function findKey(obj, predicate, context) {
  function createPredicateIndexFinder (line 1242) | function createPredicateIndexFinder(dir) {
  function sortedIndex (line 1262) | function sortedIndex(array, obj, iteratee, context) {
  function createIndexFinder (line 1274) | function createIndexFinder(dir, predicateFind, sortedIndex) {
  function find (line 1309) | function find(obj, predicate, context) {
  function findWhere (line 1317) | function findWhere(obj, attrs) {
  function each (line 1325) | function each(obj, iteratee, context) {
  function map (line 1342) | function map(obj, iteratee, context) {
  function createReduce (line 1355) | function createReduce(dir) {
  function filter (line 1387) | function filter(obj, predicate, context) {
  function reject (line 1397) | function reject(obj, predicate, context) {
  function every (line 1402) | function every(obj, predicate, context) {
  function some (line 1414) | function some(obj, predicate, context) {
  function contains (line 1426) | function contains(obj, item, fromIndex, guard) {
  function pluck (line 1456) | function pluck(obj, key) {
  function where (line 1462) | function where(obj, attrs) {
  function max (line 1467) | function max(obj, iteratee, context) {
  function min (line 1492) | function min(obj, iteratee, context) {
  function sample (line 1520) | function sample(obj, n, guard) {
  function shuffle (line 1539) | function shuffle(obj) {
  function sortBy (line 1544) | function sortBy(obj, iteratee, context) {
  function group (line 1565) | function group(behavior, partition) {
  function toArray (line 1604) | function toArray(obj) {
  function size (line 1616) | function size(obj) {
  function keyInObj (line 1623) | function keyInObj(value, key, obj) {
  function initial (line 1665) | function initial(array, n, guard) {
  function first (line 1671) | function first(array, n, guard) {
  function rest (line 1680) | function rest(array, n, guard) {
  function last (line 1686) | function last(array, n, guard) {
  function compact (line 1693) | function compact(array) {
  function flatten (line 1699) | function flatten(array, depth) {
  function uniq (line 1722) | function uniq(array, isSorted, iteratee, context) {
  function intersection (line 1757) | function intersection(array) {
  function unzip (line 1774) | function unzip(array) {
  function object (line 1791) | function object(list, values) {
  function range (line 1806) | function range(start, stop, step) {
  function chunk (line 1827) | function chunk(array, count) {
  function chainResult (line 1838) | function chainResult(instance, obj) {
  function mixin (line 1843) | function mixin(obj) {

FILE: core/dbt/docs/build/html/_static/underscore.js
  function j (line 6) | function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math...
  function _ (line 6) | function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}
  function w (line 6) | function w(n){return void 0===n}
  function A (line 6) | function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}
  function x (line 6) | function x(n){var r="[object "+n+"]";return function(n){return a.call(n)...
  function W (line 6) | function W(n,r){return null!=n&&f.call(n,r)}
  function $ (line 6) | function $(n){return O(n)&&y(n)}
  function C (line 6) | function C(n){return function(){return n}}
  function K (line 6) | function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>...
  function J (line 6) | function J(n){return function(r){return null==r?void 0:r[n]}}
  function Z (line 6) | function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]...
  function nn (line 6) | function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in ...
  function rn (line 6) | function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Ob...
  function tn (line 6) | function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wr...
  function en (line 6) | function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}
  function on (line 6) | function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r...
  function an (line 6) | function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);retur...
  function fn (line 6) | function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=a...
  function jn (line 6) | function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[...
  function _n (line 6) | function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[...
  function wn (line 6) | function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}
  function An (line 6) | function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Obje...
  function Mn (line 6) | function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.p...
  function En (line 6) | function En(n){return _(n)?U(n)?n.slice():xn({},n):n}
  function Bn (line 6) | function Bn(n){return U(n)?n:[n]}
  function Nn (line 6) | function Nn(n){return tn.toPath(n)}
  function In (line 6) | function In(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r...
  function Tn (line 6) | function Tn(n,r,t){var e=In(n,Nn(r));return w(e)?t:e}
  function kn (line 6) | function kn(n){return n}
  function Dn (line 6) | function Dn(n){return n=Sn({},n),function(r){return rn(r,n)}}
  function Rn (line 6) | function Rn(n){return n=Nn(n),function(r){return In(r,n)}}
  function Fn (line 6) | function Fn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:ret...
  function Vn (line 6) | function Vn(n,r,t){return null==n?kn:D(n)?Fn(n,r,t):_(n)&&!U(n)?Dn(n):Rn...
  function Pn (line 6) | function Pn(n,r){return Vn(n,r,1/0)}
  function qn (line 6) | function qn(n,r,t){return tn.iteratee!==Pn?tn.iteratee(n,r):Vn(n,r,t)}
  function Un (line 6) | function Un(){}
  function Wn (line 6) | function Wn(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r...
  function Ln (line 6) | function Ln(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")...
  function Xn (line 6) | function Xn(n){return"\\"+Hn[n]}
  function nr (line 6) | function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn...
  function ur (line 6) | function ur(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}els...
  function fr (line 6) | function fr(n){return function(){return!n.apply(this,arguments)}}
  function cr (line 6) | function cr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,ar...
  function sr (line 6) | function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if...
  function pr (line 6) | function pr(n){return function(r,t,e){t=qn(t,e);for(var u=Y(r),o=n>0?0:u...
  function yr (line 6) | function yr(n,r,t,e){for(var u=(t=qn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=M...
  function dr (line 6) | function dr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==ty...
  function mr (line 6) | function mr(n,r,t){var e=(er(n)?vr:sr)(n,r,t);if(void 0!==e&&-1!==e)retu...
  function jr (line 6) | function jr(n,r,t){var e,u;if(r=Fn(r,t),er(n))for(e=0,u=n.length;e<u;e++...
  function _r (line 6) | function _r(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=A...
  function wr (line 6) | function wr(n){var r=function(r,t,e,u){var o=!er(r)&&nn(r),i=(o||r).leng...
  function Sr (line 6) | function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t...
  function Or (line 6) | function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0...
  function Mr (line 6) | function Mr(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0...
  function Er (line 6) | function Er(n,r,t,e){return er(n)||(n=jn(n)),("number"!=typeof t||e)&&(t...
  function Nr (line 6) | function Nr(n,r){return _r(n,Rn(r))}
  function Ir (line 6) | function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&...
  function Tr (line 6) | function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1...
  function kr (line 6) | function kr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=qn(e...
  function qr (line 6) | function qr(n,r,t){return r in t}
  function zr (line 6) | function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r...
  function Lr (line 6) | function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null=...
  function $r (line 6) | function $r(n,r,t){return i.call(n,null==r||t?1:r)}
  function Jr (line 6) | function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u...
  function Hr (line 6) | function Hr(n){for(var r=n&&Ir(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e...
  function Xr (line 6) | function Xr(n,r){return n._chain?tn(r).chain():r}
  function Yr (line 6) | function Yr(n){return jr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototyp...

FILE: core/dbt/docs/source/_ext/dbt_click.py
  function format_command (line 21) | def format_command(cmd) -> nodes.section:
  function format_params (line 33) | def format_params(cmd) -> t.List[nodes.section]:
  function load_module (line 55) | def load_module(module_path: str, error) -> t.Union[click.Command, click...
  class DBTClick (line 82) | class DBTClick(Directive):
    method run (line 86) | def run(self):
    method _get_commands (line 98) | def _get_commands(self, module: str) -> t.List[click.Command]:
  function setup (line 112) | def setup(app) -> t.Dict[str, t.Any]:

FILE: core/dbt/env_vars.py
  function validate_engine_env_vars (line 31) | def validate_engine_env_vars() -> None:

FILE: core/dbt/event_time/event_time.py
  function offset_timestamp (line 9) | def offset_timestamp(timestamp=datetime, batch_size=BatchSize, offset=in...

FILE: core/dbt/event_time/sample_window.py
  class SampleWindow (line 15) | class SampleWindow(dbtClassMixin):
    method __post_serialize__ (line 19) | def __post_serialize__(self, data, context):
    method from_relative_string (line 33) | def from_relative_string(cls, relative_string: str) -> SampleWindow:

FILE: core/dbt/events/base_types.py
  class CoreBaseEvent (line 11) | class CoreBaseEvent(BaseEvent):
  class DynamicLevel (line 15) | class DynamicLevel(CommonDyanicLevel, CoreBaseEvent):
  class TestLevel (line 19) | class TestLevel(CommonTestLevel, CoreBaseEvent):
  class DebugLevel (line 23) | class DebugLevel(CommonDebugLevel, CoreBaseEvent):
  class InfoLevel (line 27) | class InfoLevel(CommonInfoLevel, CoreBaseEvent):
  class WarnLevel (line 31) | class WarnLevel(CommonWarnLevel, CoreBaseEvent):
  class ErrorLevel (line 35) | class ErrorLevel(CommonErrorLevel, CoreBaseEvent):

FILE: core/dbt/events/logging.py
  function _line_format_from_str (line 30) | def _line_format_from_str(format_str: str, default: LineFormat) -> LineF...
  function _get_logfile_config (line 41) | def _get_logfile_config(
  function _logfile_filter (line 62) | def _logfile_filter(log_cache_events: bool, line_format: LineFormat, msg...
  function setup_event_logger (line 68) | def setup_event_logger(flags, callbacks: List[Callable[[EventMsg], None]...

FILE: core/dbt/events/types.py
  function _deprecation_tag (line 25) | def _deprecation_tag(description: str, event_name: str) -> str:
  class MainReportVersion (line 51) | class MainReportVersion(InfoLevel):
    method code (line 52) | def code(self) -> str:
    method message (line 55) | def message(self) -> str:
  class MainReportArgs (line 59) | class MainReportArgs(DebugLevel):
    method code (line 60) | def code(self) -> str:
    method message (line 63) | def message(self) -> str:
  class MainTrackingUserState (line 67) | class MainTrackingUserState(DebugLevel):
    method code (line 68) | def code(self) -> str:
    method message (line 71) | def message(self) -> str:
  class MissingProfileTarget (line 78) | class MissingProfileTarget(InfoLevel):
    method code (line 79) | def code(self) -> str:
    method message (line 82) | def message(self) -> str:
  class InvalidOptionYAML (line 89) | class InvalidOptionYAML(ErrorLevel):
    method code (line 90) | def code(self) -> str:
    method message (line 93) | def message(self) -> str:
  class LogDbtProjectError (line 97) | class LogDbtProjectError(ErrorLevel):
    method code (line 98) | def code(self) -> str:
    method message (line 101) | def message(self) -> str:
  class LogDbtProfileError (line 111) | class LogDbtProfileError(ErrorLevel):
    method code (line 112) | def code(self) -> str:
    method message (line 115) | def message(self) -> str:
  class StarterProjectPath (line 132) | class StarterProjectPath(DebugLevel):
    method code (line 133) | def code(self) -> str:
    method message (line 136) | def message(self) -> str:
  class ConfigFolderDirectory (line 140) | class ConfigFolderDirectory(InfoLevel):
    method code (line 141) | def code(self) -> str:
    method message (line 144) | def message(self) -> str:
  class NoSampleProfileFound (line 148) | class NoSampleProfileFound(InfoLevel):
    method code (line 149) | def code(self) -> str:
    method message (line 152) | def message(self) -> str:
  class ProfileWrittenWithSample (line 156) | class ProfileWrittenWithSample(InfoLevel):
    method code (line 157) | def code(self) -> str:
    method message (line 160) | def message(self) -> str:
  class ProfileWrittenWithTargetTemplateYAML (line 168) | class ProfileWrittenWithTargetTemplateYAML(InfoLevel):
    method code (line 169) | def code(self) -> str:
    method message (line 172) | def message(self) -> str:
  class ProfileWrittenWithProjectTemplateYAML (line 179) | class ProfileWrittenWithProjectTemplateYAML(InfoLevel):
    method code (line 180) | def code(self) -> str:
    method message (line 183) | def message(self) -> str:
  class SettingUpProfile (line 190) | class SettingUpProfile(InfoLevel):
    method code (line 191) | def code(self) -> str:
    method message (line 194) | def message(self) -> str:
  class InvalidProfileTemplateYAML (line 198) | class InvalidProfileTemplateYAML(InfoLevel):
    method code (line 199) | def code(self) -> str:
    method message (line 202) | def message(self) -> str:
  class ProjectNameAlreadyExists (line 206) | class ProjectNameAlreadyExists(InfoLevel):
    method code (line 207) | def code(self) -> str:
    method message (line 210) | def message(self) -> str:
  class ProjectCreated (line 214) | class ProjectCreated(InfoLevel):
    method code (line 215) | def code(self) -> str:
    method message (line 218) | def message(self) -> str:
  function require_event_names_in_deprecations (line 242) | def require_event_names_in_deprecations():
  class DeprecatedModel (line 249) | class DeprecatedModel(WarnLevel):
    method code (line 250) | def code(self) -> str:
    method message (line 253) | def message(self) -> str:
  class PackageRedirectDeprecation (line 266) | class PackageRedirectDeprecation(WarnLevel):
    method code (line 267) | def code(self) -> str:
    method message (line 270) | def message(self) -> str:
  class PackageInstallPathDeprecation (line 282) | class PackageInstallPathDeprecation(WarnLevel):
    method code (line 283) | def code(self) -> str:
    method message (line 286) | def message(self) -> str:
  class ConfigSourcePathDeprecation (line 299) | class ConfigSourcePathDeprecation(WarnLevel):
    method code (line 300) | def code(self) -> str:
    method message (line 303) | def message(self) -> str:
  class ConfigDataPathDeprecation (line 315) | class ConfigDataPathDeprecation(WarnLevel):
    method code (line 316) | def code(self) -> str:
    method message (line 319) | def message(self) -> str:
  class MetricAttributesRenamed (line 331) | class MetricAttributesRenamed(WarnLevel):
    method code (line 332) | def code(self) -> str:
    method message (line 335) | def message(self) -> str:
  class ExposureNameDeprecation (line 351) | class ExposureNameDeprecation(WarnLevel):
    method code (line 352) | def code(self) -> str:
    method message (line 355) | def message(self) -> str:
  class InternalDeprecation (line 370) | class InternalDeprecation(WarnLevel):
    method code (line 371) | def code(self) -> str:
    method message (line 374) | def message(self) -> str:
  class EnvironmentVariableRenamed (line 389) | class EnvironmentVariableRenamed(WarnLevel):
    method code (line 390) | def code(self) -> str:
    method message (line 393) | def message(self) -> str:
  class ConfigLogPathDeprecation (line 407) | class ConfigLogPathDeprecation(WarnLevel):
    method code (line 408) | def code(self) -> str:
    method message (line 411) | def message(self) -> str:
  class ConfigTargetPathDeprecation (line 428) | class ConfigTargetPathDeprecation(WarnLevel):
    method code (line 429) | def code(self) -> str:
    method message (line 432) | def message(self) -> str:
  class TestsConfigDeprecation (line 452) | class TestsConfigDeprecation(WarnLevel):
    method code (line 453) | def code(self) -> str:
    method message (line 456) | def message(self) -> str:
  class ProjectFlagsMovedDeprecation (line 468) | class ProjectFlagsMovedDeprecation(WarnLevel):
    method code (line 469) | def code(self) -> str:
    method message (line 472) | def message(self) -> str:
  class SpacesInResourceNameDeprecation (line 484) | class SpacesInResourceNameDeprecation(DynamicLevel):
    method code (line 485) | def code(self) -> str:
    method message (line 488) | def message(self) -> str:
  class ResourceNamesWithSpacesDeprecation (line 502) | class ResourceNamesWithSpacesDeprecation(WarnLevel):
    method code (line 503) | def code(self) -> str:
    method message (line 506) | def message(self) -> str:
  class PackageMaterializationOverrideDeprecation (line 520) | class PackageMaterializationOverrideDeprecation(WarnLevel):
    method code (line 521) | def code(self) -> str:
    method message (line 524) | def message(self) -> str:
  class SourceFreshnessProjectHooksNotRun (line 533) | class SourceFreshnessProjectHooksNotRun(WarnLevel):
    method code (line 534) | def code(self) -> str:
    method message (line 537) | def message(self) -> str:
  class MFTimespineWithoutYamlConfigurationDeprecation (line 546) | class MFTimespineWithoutYamlConfigurationDeprecation(WarnLevel):
    method code (line 547) | def code(self) -> str:
    method message (line 550) | def message(self) -> str:
  class MFCumulativeTypeParamsDeprecation (line 559) | class MFCumulativeTypeParamsDeprecation(WarnLevel):
    method code (line 560) | def code(self) -> str:
    method message (line 563) | def message(self) -> str:
  class MicrobatchMacroOutsideOfBatchesDeprecation (line 572) | class MicrobatchMacroOutsideOfBatchesDeprecation(WarnLevel):
    method code (line 573) | def code(self) -> str:
    method message (line 576) | def message(self) -> str:
  class GenericJSONSchemaValidationDeprecation (line 588) | class GenericJSONSchemaValidationDeprecation(WarnLevel):
    method code (line 589) | def code(self) -> str:
    method message (line 592) | def message(self) -> str:
  class UnexpectedJinjaBlockDeprecation (line 603) | class UnexpectedJinjaBlockDeprecation(WarnLevel):
    method code (line 604) | def code(self) -> str:
    method message (line 607) | def message(self) -> str:
  class DuplicateYAMLKeysDeprecation (line 612) | class DuplicateYAMLKeysDeprecation(WarnLevel):
    method code (line 613) | def code(self) -> str:
    method message (line 616) | def message(self) -> str:
  class CustomTopLevelKeyDeprecation (line 621) | class CustomTopLevelKeyDeprecation(WarnLevel):
    method code (line 622) | def code(self) -> str:
    method message (line 625) | def message(self) -> str:
  class CustomKeyInConfigDeprecation (line 630) | class CustomKeyInConfigDeprecation(WarnLevel):
    method code (line 631) | def code(self) -> str:
    method message (line 634) | def message(self) -> str:
  class CustomKeyInObjectDeprecation (line 643) | class CustomKeyInObjectDeprecation(WarnLevel):
    method code (line 644) | def code(self) -> str:
    method message (line 647) | def message(self) -> str:
  class DeprecationsSummary (line 652) | class DeprecationsSummary(WarnLevel):
    method code (line 653) | def code(self) -> str:
    method message (line 656) | def message(self) -> str:
  class CustomOutputPathInSourceFreshnessDeprecation (line 669) | class CustomOutputPathInSourceFreshnessDeprecation(WarnLevel):
    method code (line 670) | def code(self) -> str:
    method message (line 673) | def message(self) -> str:
  class PropertyMovedToConfigDeprecation (line 678) | class PropertyMovedToConfigDeprecation(WarnLevel):
    method code (line 679) | def code(self) -> str:
    method message (line 682) | def message(self) -> str:
  class WEOIncludeExcludeDeprecation (line 687) | class WEOIncludeExcludeDeprecation(WarnLevel):
    method code (line 688) | def code(self) -> str:
    method message (line 691) | def message(self) -> str:
  class ModelParamUsageDeprecation (line 707) | class ModelParamUsageDeprecation(WarnLevel):
    method code (line 708) | def code(self) -> str:
    method message (line 711) | def message(self) -> str:
  class ModulesItertoolsUsageDeprecation (line 716) | class ModulesItertoolsUsageDeprecation(WarnLevel):
    method code (line 717) | def code(self) -> str:
    method message (line 720) | def message(self) -> str:
  class SourceOverrideDeprecation (line 727) | class SourceOverrideDeprecation(WarnLevel):
    method code (line 728) | def code(self) -> str:
    method message (line 731) | def message(self) -> str:
  class EnvironmentVariableNamespaceDeprecation (line 736) | class EnvironmentVariableNamespaceDeprecation(WarnLevel):
    method code (line 737) | def code(self) -> str:
    method message (line 740) | def message(self) -> str:
  class MissingPlusPrefixDeprecation (line 745) | class MissingPlusPrefixDeprecation(WarnLevel):
    method code (line 746) | def code(self) -> str:
    method message (line 749) | def message(self) -> str:
  class ArgumentsPropertyInGenericTestDeprecation (line 754) | class ArgumentsPropertyInGenericTestDeprecation(WarnLevel):
    method code (line 755) | def code(self) -> str:
    method message (line 758) | def message(self) -> str:
  class MissingArgumentsPropertyInGenericTestDeprecation (line 763) | class MissingArgumentsPropertyInGenericTestDeprecation(WarnLevel):
    method code (line 764) | def code(self) -> str:
    method message (line 767) | def message(self) -> str:
  class DuplicateNameDistinctNodeTypesDeprecation (line 772) | class DuplicateNameDistinctNodeTypesDeprecation(WarnLevel):
    method code (line 773) | def code(self) -> str:
    method message (line 776) | def message(self) -> str:
  class TimeDimensionsRequireGranularityDeprecation (line 781) | class TimeDimensionsRequireGranularityDeprecation(WarnLevel):
    method code (line 782) | def code(self) -> str:
    method message (line 785) | def message(self) -> str:
  class GenericSemanticLayerDeprecation (line 789) | class GenericSemanticLayerDeprecation(WarnLevel):
    method code (line 790) | def code(self) -> str:
    method message (line 793) | def message(self) -> str:
  class GenerateSchemaNameNullValueDeprecation (line 797) | class GenerateSchemaNameNullValueDeprecation(WarnLevel):
    method code (line 798) | def code(self) -> str:
    method message (line 801) | def message(self) -> str:
  class InputFileDiffError (line 811) | class InputFileDiffError(DebugLevel):
    method code (line 812) | def code(self) -> str:
    method message (line 815) | def message(self) -> str:
  class InvalidValueForField (line 822) | class InvalidValueForField(WarnLevel):
    method code (line 823) | def code(self) -> str:
    method message (line 826) | def message(self) -> str:
  class ValidationWarning (line 830) | class ValidationWarning(WarnLevel):
    method code (line 831) | def code(self) -> str:
    method message (line 834) | def message(self) -> str:
  class ParsePerfInfoPath (line 840) | class ParsePerfInfoPath(InfoLevel):
    method code (line 841) | def code(self) -> str:
    method message (line 844) | def message(self) -> str:
  class PartialParsingErrorProcessingFile (line 857) | class PartialParsingErrorProcessingFile(DebugLevel):
    method code (line 858) | def code(self) -> str:
    method message (line 861) | def message(self) -> str:
  class PartialParsingError (line 868) | class PartialParsingError(DebugLevel):
    method code (line 869) | def code(self) -> str:
    method message (line 872) | def message(self) -> str:
  class PartialParsingSkipParsing (line 876) | class PartialParsingSkipParsing(DebugLevel):
    method code (line 877) | def code(self) -> str:
    method message (line 880) | def message(self) -> str:
  class UnableToPartialParse (line 887) | class UnableToPartialParse(InfoLevel):
    method code (line 888) | def code(self) -> str:
    method message (line 891) | def message(self) -> str:
  class StateCheckVarsHash (line 895) | class StateCheckVarsHash(DebugLevel):
    method code (line 896) | def code(self) -> str:
    method message (line 899) | def message(self) -> str:
  class PartialParsingNotEnabled (line 906) | class PartialParsingNotEnabled(DebugLevel):
    method code (line 907) | def code(self) -> str:
    method message (line 910) | def message(self) -> str:
  class ParsedFileLoadFailed (line 914) | class ParsedFileLoadFailed(DebugLevel):
    method code (line 915) | def code(self) -> str:
    method message (line 918) | def message(self) -> str:
  class PartialParsingEnabled (line 925) | class PartialParsingEnabled(DebugLevel):
    method code (line 926) | def code(self) -> str:
    method message (line 929) | def message(self) -> str:
  class PartialParsingFile (line 938) | class PartialParsingFile(DebugLevel):
    method code (line 939) | def code(self) -> str:
    method message (line 942) | def message(self) -> str:
  class InvalidDisabledTargetInTestNode (line 949) | class InvalidDisabledTargetInTestNode(DebugLevel):
    method code (line 950) | def code(self) -> str:
    method message (line 953) | def message(self) -> str:
  class UnusedResourceConfigPath (line 968) | class UnusedResourceConfigPath(WarnLevel):
    method code (line 969) | def code(self) -> str:
    method message (line 972) | def message(self) -> str:
  class SeedIncreased (line 982) | class SeedIncreased(WarnLevel):
    method code (line 983) | def code(self) -> str:
    method message (line 986) | def message(self) -> str:
  class SeedExceedsLimitSamePath (line 995) | class SeedExceedsLimitSamePath(WarnLevel):
    method code (line 996) | def code(self) -> str:
    method message (line 999) | def message(self) -> str:
  class SeedExceedsLimitAndPathChanged (line 1008) | class SeedExceedsLimitAndPathChanged(WarnLevel):
    method code (line 1009) | def code(self) -> str:
    method message (line 1012) | def message(self) -> str:
  class SeedExceedsLimitChecksumChanged (line 1021) | class SeedExceedsLimitChecksumChanged(WarnLevel):
    method code (line 1022) | def code(self) -> str:
    method message (line 1025) | def message(self) -> str:
  class UnusedTables (line 1034) | class UnusedTables(WarnLevel):
    method code (line 1035) | def code(self) -> str:
    method message (line 1038) | def message(self) -> str:
  class WrongResourceSchemaFile (line 1047) | class WrongResourceSchemaFile(WarnLevel):
    method code (line 1048) | def code(self) -> str:
    method message (line 1051) | def message(self) -> str:
  class NoNodeForYamlKey (line 1064) | class NoNodeForYamlKey(WarnLevel):
    method code (line 1065) | def code(self) -> str:
    method message (line 1068) | def message(self) -> str:
  class MacroNotFoundForPatch (line 1077) | class MacroNotFoundForPatch(WarnLevel):
    method code (line 1078) | def code(self) -> str:
    method message (line 1081) | def message(self) -> str:
  class NodeNotFoundOrDisabled (line 1086) | class NodeNotFoundOrDisabled(WarnLevel):
    method code (line 1087) | def code(self) -> str:
    method message (line 1090) | def message(self) -> str:
  class JinjaLogWarning (line 1115) | class JinjaLogWarning(WarnLevel):
    method code (line 1116) | def code(self) -> str:
    method message (line 1119) | def message(self) -> str:
  class JinjaLogInfo (line 1123) | class JinjaLogInfo(InfoLevel):
    method code (line 1124) | def code(self) -> str:
    method message (line 1127) | def message(self) -> str:
  class JinjaLogDebug (line 1132) | class JinjaLogDebug(DebugLevel):
    method code (line 1133) | def code(self) -> str:
    method message (line 1136) | def message(self) -> str:
  class UnpinnedRefNewVersionAvailable (line 1141) | class UnpinnedRefNewVersionAvailable(InfoLevel):
    method code (line 1142) | def code(self) -> str:
    method message (line 1145) | def message(self) -> str:
  class UpcomingReferenceDeprecation (line 1158) | class UpcomingReferenceDeprecation(WarnLevel):
    method code (line 1159) | def code(self) -> str:
    method message (line 1162) | def message(self) -> str:
  class DeprecatedReference (line 1180) | class DeprecatedReference(WarnLevel):
    method code (line 1181) | def code(self) -> str:
    method message (line 1184) | def message(self) -> str:
  class UnsupportedConstraintMaterialization (line 1202) | class UnsupportedConstraintMaterialization(WarnLevel):
    method code (line 1203) | def code(self) -> str:
    method message (line 1206) | def message(self) -> str:
  class ParseInlineNodeError (line 1215) | class ParseInlineNodeError(ErrorLevel):
    method code (line 1216) | def code(self) -> str:
    method message (line 1219) | def message(self) -> str:
  class SemanticValidationFailure (line 1223) | class SemanticValidationFailure(WarnLevel):
    method code (line 1224) | def code(self) -> str:
    method message (line 1227) | def message(self) -> str:
  class UnversionedBreakingChange (line 1231) | class UnversionedBreakingChange(WarnLevel):
    method code (line 1232) | def code(self) -> str:
    method message (line 1235) | def message(self) -> str:
  class WarnStateTargetEqual (line 1247) | class WarnStateTargetEqual(WarnLevel):
    method code (line 1248) | def code(self) -> str:
    method message (line 1251) | def message(self) -> str:
  class FreshnessConfigProblem (line 1258) | class FreshnessConfigProblem(WarnLevel):
    method code (line 1259) | def code(self) -> str:
    method message (line 1262) | def message(self) -> str:
  class MicrobatchModelNoEventTimeInputs (line 1266) | class MicrobatchModelNoEventTimeInputs(WarnLevel):
    method code (line 1267) | def code(self) -> str:
    method message (line 1270) | def message(self) -> str:
  class InvalidConcurrentBatchesConfig (line 1279) | class InvalidConcurrentBatchesConfig(WarnLevel):
    method code (line 1280) | def code(self) -> str:
    method message (line 1283) | def message(self) -> str:
  class InvalidMacroAnnotation (line 1289) | class InvalidMacroAnnotation(WarnLevel):
    method code (line 1290) | def code(self) -> str:
    method message (line 1293) | def message(self) -> str:
  class PackageNodeDependsOnRootProjectNode (line 1297) | class PackageNodeDependsOnRootProjectNode(WarnLevel):
    method code (line 1298) | def code(self) -> str:
    method message (line 1301) | def message(self) -> str:
  class GitSparseCheckoutSubdirectory (line 1315) | class GitSparseCheckoutSubdirectory(DebugLevel):
    method code (line 1316) | def code(self) -> str:
    method message (line 1319) | def message(self) -> str:
  class GitProgressCheckoutRevision (line 1323) | class GitProgressCheckoutRevision(DebugLevel):
    method code (line 1324) | def code(self) -> str:
    method message (line 1327) | def message(self) -> str:
  class GitProgressUpdatingExistingDependency (line 1331) | class GitProgressUpdatingExistingDependency(DebugLevel):
    method code (line 1332) | def code(self) -> str:
    method message (line 1335) | def message(self) -> str:
  class GitProgressPullingNewDependency (line 1339) | class GitProgressPullingNewDependency(DebugLevel):
    method code (line 1340) | def code(self) -> str:
    method message (line 1343) | def message(self) -> str:
  class GitNothingToDo (line 1347) | class GitNothingToDo(DebugLevel):
    method code (line 1348) | def code(self) -> str:
    method message (line 1351) | def message(self) -> str:
  class GitProgressUpdatedCheckoutRange (line 1355) | class GitProgressUpdatedCheckoutRange(DebugLevel):
    method code (line 1356) | def code(self) -> str:
    method message (line 1359) | def message(self) -> str:
  class GitProgressCheckedOutAt (line 1363) | class GitProgressCheckedOutAt(DebugLevel):
    method code (line 1364) | def code(self) -> str:
    method message (line 1367) | def message(self) -> str:
  class RegistryProgressGETRequest (line 1371) | class RegistryProgressGETRequest(DebugLevel):
    method code (line 1372) | def code(self) -> str:
    method message (line 1375) | def message(self) -> str:
  class RegistryProgressGETResponse (line 1379) | class RegistryProgressGETResponse(DebugLevel):
    method code (line 1380) | def code(self) -> str:
    method message (line 1383) | def message(self) -> str:
  class SelectorReportInvalidSelector (line 1387) | class SelectorReportInvalidSelector(InfoLevel):
    method code (line 1388) | def code(self) -> str:
    method message (line 1391) | def message(self) -> str:
  class DepsNoPackagesFound (line 1398) | class DepsNoPackagesFound(InfoLevel):
    method code (line 1399) | def code(self) -> str:
    method message (line 1402) | def message(self) -> str:
  class DepsStartPackageInstall (line 1406) | class DepsStartPackageInstall(InfoLevel):
    method code (line 1407) | def code(self) -> str:
    method message (line 1410) | def message(self) -> str:
  class DepsInstallInfo (line 1414) | class DepsInstallInfo(InfoLevel):
    method code (line 1415) | def code(self) -> str:
    method message (line 1418) | def message(self) -> str:
  class DepsUpdateAvailable (line 1422) | class DepsUpdateAvailable(InfoLevel):
    method code (line 1423) | def code(self) -> str:
    method message (line 1426) | def message(self) -> str:
  class DepsUpToDate (line 1430) | class DepsUpToDate(InfoLevel):
    method code (line 1431) | def code(self) -> str:
    method message (line 1434) | def message(self) -> str:
  class DepsListSubdirectory (line 1438) | class DepsListSubdirectory(InfoLevel):
    method code (line 1439) | def code(self) -> str:
    method message (line 1442) | def message(self) -> str:
  class DepsNotifyUpdatesAvailable (line 1446) | class DepsNotifyUpdatesAvailable(InfoLevel):
    method code (line 1447) | def code(self) -> str:
    method message (line 1450) | def message(self) -> str:
  class RegistryIndexProgressGETRequest (line 1455) | class RegistryIndexProgressGETRequest(DebugLevel):
    method code (line 1456) | def code(self) -> str:
    method message (line 1459) | def message(self) -> str:
  class RegistryIndexProgressGETResponse (line 1463) | class RegistryIndexProgressGETResponse(DebugLevel):
    method code (line 1464) | def code(self) -> str:
    method message (line 1467) | def message(self) -> str:
  class RegistryResponseUnexpectedType (line 1471) | class RegistryResponseUnexpectedType(DebugLevel):
    method code (line 1472) | def code(self) -> str:
    method message (line 1475) | def message(self) -> str:
  class RegistryResponseMissingTopKeys (line 1479) | class RegistryResponseMissingTopKeys(DebugLevel):
    method code (line 1480) | def code(self) -> str:
    method message (line 1483) | def message(self) -> str:
  class RegistryResponseMissingNestedKeys (line 1488) | class RegistryResponseMissingNestedKeys(DebugLevel):
    method code (line 1489) | def code(self) -> str:
    method message (line 1492) | def message(self) -> str:
  class RegistryResponseExtraNestedKeys (line 1497) | class RegistryResponseExtraNestedKeys(DebugLevel):
    method code (line 1498) | def code(self) -> str:
    method message (line 1501) | def message(self) -> str:
  class DepsSetDownloadDirectory (line 1506) | class DepsSetDownloadDirectory(DebugLevel):
    method code (lin
Copy disabled (too large) Download .json
Condensed preview — 1075 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (14,082K chars).
[
  {
    "path": ".changes/0.0.0.md",
    "chars": 1783,
    "preview": "## Previous Releases\n\nFor information on prior major and minor releases, see their changelogs:\n\n\n* [1.10](https://github"
  },
  {
    "path": ".changes/README.md",
    "chars": 3720,
    "preview": "# CHANGELOG Automation\n\nWe use [changie](https://changie.dev/) to automate `CHANGELOG` generation.  For installation and"
  },
  {
    "path": ".changes/header.tpl.md",
    "chars": 628,
    "preview": "# dbt Core Changelog\n\n- This file provides a full account of all changes to `dbt-core`\n- Changes are listed under the (p"
  },
  {
    "path": ".changes/unreleased/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".changes/unreleased/Dependencies-20251118-155354.yaml",
    "chars": 178,
    "preview": "kind: Dependencies\nbody: Use EventCatcher from dbt-common instead of maintaining a local copy\ntime: 2025-11-18T15:53:54."
  },
  {
    "path": ".changes/unreleased/Dependencies-20251217-151349.yaml",
    "chars": 155,
    "preview": "kind: Dependencies\nbody: Upgrading dbt-semantic-interfaces to 0.10.x\ntime: 2025-12-17T15:13:49.721737-05:00\ncustom:\n    "
  },
  {
    "path": ".changes/unreleased/Dependencies-20251219-153804.yaml",
    "chars": 136,
    "preview": "kind: Dependencies\nbody: Bump minimum click to 8.2.0\ntime: 2025-12-19T15:38:04.785842-06:00\ncustom:\n  Author: QMalcolm\n "
  },
  {
    "path": ".changes/unreleased/Dependencies-20260113-135442.yaml",
    "chars": 130,
    "preview": "kind: Dependencies\nbody: Bump DSI minimum to 0.10.2\ntime: 2026-01-13T13:54:42.340193-06:00\ncustom:\n  Author: QMalcolm\n  "
  },
  {
    "path": ".changes/unreleased/Dependencies-20260113-143057.yaml",
    "chars": 138,
    "preview": "kind: Dependencies\nbody: Bump dbt-protos minimum to 1.0.418\ntime: 2026-01-13T14:30:57.311017-06:00\ncustom:\n  Author: QMa"
  },
  {
    "path": ".changes/unreleased/Dependencies-20260121-171712.yaml",
    "chars": 138,
    "preview": "kind: Dependencies\nbody: Move `click` minimum to 8.3.0\ntime: 2026-01-21T17:17:12.251254-06:00\ncustom:\n  Author: QMalcolm"
  },
  {
    "path": ".changes/unreleased/Dependencies-20260302-130425.yaml",
    "chars": 152,
    "preview": "kind: Dependencies\nbody: Bump minimum version of dbt-common to 1.37.3\ntime: 2026-03-02T13:04:25.495699-05:00\ncustom:\n  A"
  },
  {
    "path": ".changes/unreleased/Docs-20240311-140344.yaml",
    "chars": 125,
    "preview": "kind: Docs\nbody: Enable display of unit tests\ntime: 2024-03-11T14:03:44.490834-04:00\ncustom:\n  Author: gshank\n  Issue: \""
  },
  {
    "path": ".changes/unreleased/Docs-20240501-021050.yaml",
    "chars": 121,
    "preview": "kind: Docs\nbody: Unit tests not rendering\ntime: 2024-05-01T02:10:50.987412+02:00\ncustom:\n  Author: aranke\n  Issue: \"506\""
  },
  {
    "path": ".changes/unreleased/Docs-20240516-223036.yaml",
    "chars": 133,
    "preview": "kind: Docs\nbody: Add support for Saved Query node\ntime: 2024-05-16T22:30:36.206492-07:00\ncustom:\n  Author: ChenyuLInx\n  "
  },
  {
    "path": ".changes/unreleased/Docs-20240613-151048.yaml",
    "chars": 149,
    "preview": "kind: Docs\nbody: Fix npm security vulnerabilities as of June 2024\ntime: 2024-06-13T15:10:48.301989+01:00\ncustom:\n    Aut"
  },
  {
    "path": ".changes/unreleased/Docs-20250728-162542.yaml",
    "chars": 140,
    "preview": "kind: Docs\nbody: Bump form-data from 3.0.1 to 3.0.4\ntime: 2025-07-28T16:25:42.452808-04:00\ncustom:\n    Author: michellea"
  },
  {
    "path": ".changes/unreleased/Docs-20260319-112630.yaml",
    "chars": 161,
    "preview": "kind: Docs\nbody: Add support for UDF (function) resource type in lineage graph\ntime: 2026-03-19T11:26:30.338385+05:30\ncu"
  },
  {
    "path": ".changes/unreleased/Features-20251006-140352.yaml",
    "chars": 147,
    "preview": "kind: Features\nbody: Support partial parsing for function nodes\ntime: 2025-10-06T14:03:52.258104-05:00\ncustom:\n  Author:"
  },
  {
    "path": ".changes/unreleased/Features-20251111-103504.yaml",
    "chars": 187,
    "preview": "kind: Features\nbody: Add UnparsedMetricV2 to read in new-style YAML Semantic Layer Metrics.\ntime: 2025-11-11T10:35:04.12"
  },
  {
    "path": ".changes/unreleased/Features-20251117-141053.yaml",
    "chars": 162,
    "preview": "kind: Features\nbody: Allow for defining funciton arguments with default values\ntime: 2025-11-17T14:10:53.860178-06:00\ncu"
  },
  {
    "path": ".changes/unreleased/Features-20251201-165209.yaml",
    "chars": 164,
    "preview": "kind: Features\nbody: Raise jsonschema-based deprecation warnings by default\ntime: 2025-12-01T16:52:09.354436-05:00\ncusto"
  },
  {
    "path": ".changes/unreleased/Features-20251203-122926.yaml",
    "chars": 172,
    "preview": "kind: Features\nbody: ':bug: :snowman: Disable unit tests whose model is disabled'\ntime: 2025-12-03T12:29:26.209248-05:00"
  },
  {
    "path": ".changes/unreleased/Features-20251210-202001.yaml",
    "chars": 156,
    "preview": "kind: Features\nbody: Implement config.meta_get and config.meta_require\ntime: 2025-12-10T20:20:01.354288-05:00\ncustom:\n  "
  },
  {
    "path": ".changes/unreleased/Features-20260115-131115.yaml",
    "chars": 232,
    "preview": "kind: Features\nbody: Deprecate null return values from generate_schema_name macro, behind require_valid_schema_from_gene"
  },
  {
    "path": ".changes/unreleased/Features-20260119-210143.yaml",
    "chars": 205,
    "preview": "kind: Features\nbody: Add ability to indicate dbt Model also represents a Semantic Model. (Not fully supported yet.)\ntime"
  },
  {
    "path": ".changes/unreleased/Features-20260123-173805.yaml",
    "chars": 260,
    "preview": "kind: Features\nbody: Added ability to parse semantic layer dimensions added to columns as part of new YAML. (Not ready f"
  },
  {
    "path": ".changes/unreleased/Features-20260126-164458.yaml",
    "chars": 193,
    "preview": "kind: Features\nbody: Add parsing for new YAML for semantic layer entities attached to dbt models.\ntime: 2026-01-26T16:44"
  },
  {
    "path": ".changes/unreleased/Features-20260127-114149.yaml",
    "chars": 189,
    "preview": "kind: Features\nbody: Process semantic metrics in v2 YAML if they are not merged into a model.\ntime: 2026-01-27T11:41:49."
  },
  {
    "path": ".changes/unreleased/Features-20260127-214617.yaml",
    "chars": 205,
    "preview": "kind: Features\nbody: Add parsing for v2 metrics on models and finish implementing their dependency behaviors.\ntime: 2026"
  },
  {
    "path": ".changes/unreleased/Features-20260128-125727.yaml",
    "chars": 216,
    "preview": "kind: Features\nbody: Add the ability to process derived semantic entities to dbt models, as required by new YAML schema."
  },
  {
    "path": ".changes/unreleased/Features-20260128-172052.yaml",
    "chars": 178,
    "preview": "kind: Features\nbody: Enable parsing derived dimensions for v2 semantic layer YAML.\ntime: 2026-01-28T17:20:52.400188-08:0"
  },
  {
    "path": ".changes/unreleased/Features-20260129-110711.yaml",
    "chars": 220,
    "preview": "kind: Features\nbody: Add unit tests to the Jinja `graph` object, enabling tools like dbt-project-evaluator to run checks"
  },
  {
    "path": ".changes/unreleased/Features-20260129-114832.yaml",
    "chars": 168,
    "preview": "kind: Features\nbody: Implement agg_time_dimension for new semantic YAML.\ntime: 2026-01-29T11:48:32.100015-08:00\ncustom:\n"
  },
  {
    "path": ".changes/unreleased/Features-20260129-175432.yaml",
    "chars": 200,
    "preview": "kind: Features\nbody: Implement parsing of semantic model object-style configuration in v2 semantic YAML.\ntime: 2026-01-2"
  },
  {
    "path": ".changes/unreleased/Features-20260129-185659.yaml",
    "chars": 188,
    "preview": "kind: Features\nbody: Implement primary_entity field for semantic models in semantic YAML v2.\ntime: 2026-01-29T18:56:59.1"
  },
  {
    "path": ".changes/unreleased/Features-20260205-105228.yaml",
    "chars": 152,
    "preview": "kind: Features\nbody: add config.meta_get to python model parsing\ntime: 2026-02-05T10:52:28.269954-08:00\ncustom:\n    Auth"
  },
  {
    "path": ".changes/unreleased/Features-20260212-232728.yaml",
    "chars": 168,
    "preview": "kind: Features\nbody: Added support for vars.yml to declare project variables\ntime: 2026-02-12T23:27:28.294557+05:30\ncust"
  },
  {
    "path": ".changes/unreleased/Features-20260219-133321.yaml",
    "chars": 174,
    "preview": "kind: Features\nbody: execute dbt debug logic after creating a new project in dbt init\ntime: 2026-02-19T13:33:21.891997+0"
  },
  {
    "path": ".changes/unreleased/Features-20260302-123311.yaml",
    "chars": 176,
    "preview": "kind: Features\nbody: Write compiled SQL for snapshots to target/compiled/ during dbt compile\ntime: 2026-03-02T12:33:11.4"
  },
  {
    "path": ".changes/unreleased/Features-20260303-214328.yaml",
    "chars": 139,
    "preview": "kind: Features\nbody: Add \"selector\" selector method\ntime: 2026-03-03T21:43:28.02659+05:30\ncustom:\n    Author: ash2shukla"
  },
  {
    "path": ".changes/unreleased/Features-9041.yaml",
    "chars": 145,
    "preview": "kind: Features\nbody: Add directory change instruction after dbt init\ntime: 2025-11-20T00:00:00Z\ncustom:\n  Author: kallur"
  },
  {
    "path": ".changes/unreleased/Fixes-20250922-151726.yaml",
    "chars": 151,
    "preview": "kind: Fixes\nbody: Address Click 8.2+ deprecation warning\ntime: 2025-09-22T15:17:26.983151-06:00\ncustom:\n    Author: edga"
  },
  {
    "path": ".changes/unreleased/Fixes-20251117-140649.yaml",
    "chars": 156,
    "preview": "kind: Fixes\nbody: Include macros in unit test parsing\ntime: 2025-11-17T14:06:49.518566-05:00\ncustom:\n    Author: michell"
  },
  {
    "path": ".changes/unreleased/Fixes-20251117-185025.yaml",
    "chars": 166,
    "preview": "kind: Fixes\nbody: Allow dbt deps to run when vars lack defaults in dbt_project.yml\ntime: 2025-11-17T18:50:25.759091+05:3"
  },
  {
    "path": ".changes/unreleased/Fixes-20251118-171106.yaml",
    "chars": 245,
    "preview": "kind: Fixes\nbody: Restore DuplicateResourceNameError for intra-project node name duplication, behind behavior flag `requ"
  },
  {
    "path": ".changes/unreleased/Fixes-20251119-195034.yaml",
    "chars": 167,
    "preview": "kind: Fixes\nbody: Allow the usage of `function` with `--exclude-resource-type` flag\ntime: 2025-11-19T19:50:34.703236-06:"
  },
  {
    "path": ".changes/unreleased/Fixes-20251124-155629.yaml",
    "chars": 164,
    "preview": "kind: Fixes\nbody: Fix bug where schemas of functions weren't guaranteed to exist\ntime: 2025-11-24T15:56:29.467004-06:00\n"
  },
  {
    "path": ".changes/unreleased/Fixes-20251124-155756.yaml",
    "chars": 143,
    "preview": "kind: Fixes\nbody: Fix generation of deprecations summary\ntime: 2025-11-24T15:57:56.544123-08:00\ncustom:\n    Author: asiu"
  },
  {
    "path": ".changes/unreleased/Fixes-20251124-170855.yaml",
    "chars": 202,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Correctly reference foreign key references when --defer and --state provided'\ntime: 2"
  },
  {
    "path": ".changes/unreleased/Fixes-20251125-120246.yaml",
    "chars": 185,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Add exception when using --state and referring to a removed\n  test'\ntime: 2025-11-25T"
  },
  {
    "path": ".changes/unreleased/Fixes-20251125-122020.yaml",
    "chars": 198,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Stop emitting `NoNodesForSelectionCriteria` three times during `build` command'\ntime:"
  },
  {
    "path": ".changes/unreleased/Fixes-20251127-141308.yaml",
    "chars": 222,
    "preview": "kind: Fixes\nbody: \":bug: :snowman: Fix long Python stack traces appearing when package dependencies have incompatible ve"
  },
  {
    "path": ".changes/unreleased/Fixes-20251127-145929.yaml",
    "chars": 261,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Fixed issue where changing data type size/precision/scale (e.g.,\n  varchar(3) to varc"
  },
  {
    "path": ".changes/unreleased/Fixes-20251127-170124.yaml",
    "chars": 200,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Support unit testing models that depend on sources with the same name'\ntime: 2025-11-"
  },
  {
    "path": ".changes/unreleased/Fixes-20251128-102129.yaml",
    "chars": 209,
    "preview": "kind: Fixes\nbody: Fix bug in partial parsing when updating a model with a schema file that is referenced by a singular t"
  },
  {
    "path": ".changes/unreleased/Fixes-20251128-122838.yaml",
    "chars": 175,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Avoid retrying successful run-operation commands'\ntime: 2025-11-28T12:28:38.546261-05"
  },
  {
    "path": ".changes/unreleased/Fixes-20251128-161937.yaml",
    "chars": 204,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Fix `dbt deps --add-package` crash when packages.yml contains `warn-unpinned:\n  false"
  },
  {
    "path": ".changes/unreleased/Fixes-20251128-163144.yaml",
    "chars": 227,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Improve `dbt deps --add-package` duplicate detection with better\n  cross-source match"
  },
  {
    "path": ".changes/unreleased/Fixes-20251202-133705.yaml",
    "chars": 194,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Fix false positive deprecation warning of pre/post-hook SQL configs'\ntime: 2025-12-02"
  },
  {
    "path": ".changes/unreleased/Fixes-20251204-094753.yaml",
    "chars": 262,
    "preview": "kind: Fixes\nbody: ':bug: :snowman: Fix ref resolution within package when duplicate nodes exist, behind require_ref_sear"
  },
  {
    "path": ".changes/unreleased/Fixes-20251209-175031.yaml",
    "chars": 166,
    "preview": "kind: Fixes\nbody: Ensure recent deprecation warnings include event name in message\ntime: 2025-12-09T17:50:31.334618-06:0"
  },
  {
    "path": ".changes/unreleased/Fixes-20251210-143935.yaml",
    "chars": 178,
    "preview": "kind: Fixes\nbody: Improve error message clarity when detecting nodes with space in name\ntime: 2025-12-10T14:39:35.107841"
  },
  {
    "path": ".changes/unreleased/Fixes-20251216-120727.yaml",
    "chars": 186,
    "preview": "kind: Fixes\nbody: ':bug: :snowman:Propagate exceptions for NodeFinished callbacks in dbtRunner'\ntime: 2025-12-16T12:07:2"
  },
  {
    "path": ".changes/unreleased/Fixes-20251217-002813.yaml",
    "chars": 173,
    "preview": "kind: Fixes\nbody: Adds omitted return statement to RuntimeConfigObject.meta_require method\ntime: 2025-12-17T00:28:13.015"
  },
  {
    "path": ".changes/unreleased/Fixes-20251217-105918.yaml",
    "chars": 199,
    "preview": "kind: Fixes\nbody: Do not raise deprecation warning when encountering dataset or project configs for bigquery\ntime: 2025-"
  },
  {
    "path": ".changes/unreleased/Fixes-20251219-184405.yaml",
    "chars": 154,
    "preview": "kind: Fixes\nbody: Pin sqlparse <0.5.5 to avoid max tokens issue\ntime: 2025-12-19T18:44:05.216329-05:00\ncustom:\n    Autho"
  },
  {
    "path": ".changes/unreleased/Fixes-20260109-141332.yaml",
    "chars": 166,
    "preview": "kind: Fixes\nbody: Avoid deadlock edgecases of concurret microbatch/batch execution\ntime: 2026-01-09T14:13:32.777942-06:0"
  },
  {
    "path": ".changes/unreleased/Fixes-20260113-161742.yaml",
    "chars": 178,
    "preview": "kind: Fixes\nbody: Begin emitting deprecation warnings for DSI produced ValidationFutureError issues\ntime: 2026-01-13T16:"
  },
  {
    "path": ".changes/unreleased/Fixes-20260124-212300.yaml",
    "chars": 201,
    "preview": "kind: Fixes\nbody: Add @requires.catalogs decorator to compile command to fix REST Catalog-Linked database compilation\nti"
  },
  {
    "path": ".changes/unreleased/Fixes-20260125-113244.yaml",
    "chars": 177,
    "preview": "kind: Fixes\nbody: Validate and filter out non-existent columns from seed column types\ntime: 2026-01-25T11:32:44.5200661+"
  },
  {
    "path": ".changes/unreleased/Fixes-20260126-160659.yaml",
    "chars": 141,
    "preview": "kind: Fixes\nbody: 'Fix false deprecation warning '\ntime: 2026-01-26T16:06:59.0157-05:00\ncustom:\n    Author: alexaustin00"
  },
  {
    "path": ".changes/unreleased/Fixes-20260202-123453.yaml",
    "chars": 164,
    "preview": "kind: Fixes\nbody: Return correctly resolved project path when changing dirs\ntime: 2026-02-02T12:34:53.454501+05:30\ncusto"
  },
  {
    "path": ".changes/unreleased/Fixes-20260202-153835.yaml",
    "chars": 198,
    "preview": "kind: Fixes\nbody: Normalize whitespace prior to computing partial parsing checksum when loading model files\ntime: 2026-0"
  },
  {
    "path": ".changes/unreleased/Fixes-20260204-184553.yaml",
    "chars": 169,
    "preview": "kind: Fixes\nbody: Stop raising deprecation warnings for internal python model configs\ntime: 2026-02-04T18:45:53.094578-0"
  },
  {
    "path": ".changes/unreleased/Fixes-20260204-211128.yaml",
    "chars": 224,
    "preview": "kind: Fixes\nbody: Dont fire config problem event if loaded_at_query is defined for adapters that dont support metadata-b"
  },
  {
    "path": ".changes/unreleased/Fixes-20260205-120000.yaml",
    "chars": 201,
    "preview": "kind: Fixes\nbody: Fix foreign key constraint ref() resolving to deferred relation even when target model is selected for"
  },
  {
    "path": ".changes/unreleased/Fixes-20260206-204257.yaml",
    "chars": 179,
    "preview": "kind: Fixes\nbody: Skip raising `CustomKeyInConfigDeprecation` for config key alias in sql\ntime: 2026-02-06T20:42:57.1346"
  },
  {
    "path": ".changes/unreleased/Fixes-20260210-154042.yaml",
    "chars": 211,
    "preview": "kind: Fixes\nbody: Provide user-friendly validations that dimensions with 'validity_params' also have granularities.\ntime"
  },
  {
    "path": ".changes/unreleased/Fixes-20260216-230817.yaml",
    "chars": 216,
    "preview": "kind: Fixes\nbody: Use resolved profile and target names to allow partial parsing for default profile and target\ntime: 20"
  },
  {
    "path": ".changes/unreleased/Fixes-20260219-012414.yaml",
    "chars": 173,
    "preview": "kind: Fixes\nbody: Ensure that all locked packages are installed in packages directory\ntime: 2026-02-19T01:24:14.439093+0"
  },
  {
    "path": ".changes/unreleased/Fixes-20260219-131833.yaml",
    "chars": 189,
    "preview": "kind: Fixes\nbody: Correctly map 'hidden' field of metrics to 'is_private' field in manifests.\ntime: 2026-02-19T13:18:33."
  },
  {
    "path": ".changes/unreleased/Fixes-20260219-170000.yaml",
    "chars": 277,
    "preview": "kind: Fixes\nbody: Set expr to column name for column-based dimensions and entities when the semantic layer name differs "
  },
  {
    "path": ".changes/unreleased/Fixes-20260223-132342.yaml",
    "chars": 274,
    "preview": "kind: Fixes\nbody: Fix Dimension() jinja in nested metric filters (input_metrics, numerator, denominator) being incorrect"
  },
  {
    "path": ".changes/unreleased/Fixes-20260223-161820.yaml",
    "chars": 227,
    "preview": "kind: Fixes\nbody: Fix dbt retry for microbatch models to use the original invocation time instead of the current time wh"
  },
  {
    "path": ".changes/unreleased/Fixes-20260224-115546.yaml",
    "chars": 255,
    "preview": "kind: Fixes\nbody: Fix v2 metric parsing using model name instead of custom semantic_model.name for generated_from, causi"
  },
  {
    "path": ".changes/unreleased/Fixes-20260224-180000.yaml",
    "chars": 232,
    "preview": "kind: Fixes\nbody: Fix doc() Jinja in derived_semantics dimension and entity descriptions being incorrectly rendered duri"
  },
  {
    "path": ".changes/unreleased/Fixes-20260224-231047.yaml",
    "chars": 186,
    "preview": "kind: Fixes\nbody: Improve logic for detecting config with missing plus prefix in dbt_project.yml\ntime: 2026-02-24T23:10:"
  },
  {
    "path": ".changes/unreleased/Fixes-20260225-203131.yaml",
    "chars": 211,
    "preview": "kind: Fixes\nbody: Enable sql_header config for data tests gated behind require_sql_header_in_test_configs behavior chang"
  },
  {
    "path": ".changes/unreleased/Fixes-20260226-163836.yaml",
    "chars": 169,
    "preview": "kind: Fixes\nbody: Better error formatting for semantic manifest validation errors\ntime: 2026-02-26T16:38:36.858458+05:30"
  },
  {
    "path": ".changes/unreleased/Fixes-20260227-133424.yaml",
    "chars": 176,
    "preview": "kind: Fixes\nbody: Allow macros invoked via run-operation to ref() private and protected models\ntime: 2026-02-27T13:34:24"
  },
  {
    "path": ".changes/unreleased/Fixes-20260227-140009.yaml",
    "chars": 192,
    "preview": "kind: Fixes\nbody: Better error and warnings logs with [WARNING] / [ERROR] messages prepended to the logs\ntime: 2026-02-2"
  },
  {
    "path": ".changes/unreleased/Fixes-20260302-000739.yaml",
    "chars": 174,
    "preview": "kind: Fixes\nbody: Add config and allow meta and docs to exist under it for macros\ntime: 2026-03-02T00:07:39.088118+05:30"
  },
  {
    "path": ".changes/unreleased/Fixes-20260303-114528.yaml",
    "chars": 151,
    "preview": "kind: Fixes\nbody: '`DBT_ENGINE` prefixed env vars picked up by CLI'\ntime: 2026-03-03T11:45:28.403687-06:00\ncustom:\n  Aut"
  },
  {
    "path": ".changes/unreleased/Fixes-20260305-133929.yaml",
    "chars": 173,
    "preview": "kind: Fixes\nbody: Fix duplicate CTE race condition in ephemeral model compilation\ntime: 2026-03-05T13:39:29.780057-08:00"
  },
  {
    "path": ".changes/unreleased/Fixes-20260306-034008.yaml",
    "chars": 131,
    "preview": "kind: Fixes\nbody: Allow deferral for UDFs\ntime: 2026-03-06T03:40:08.773781+05:30\ncustom:\n    Author: ash2shukla\n    Issu"
  },
  {
    "path": ".changes/unreleased/Fixes-20260306-071359.yaml",
    "chars": 202,
    "preview": "kind: Fixes\nbody: Update URL and name of behavior change flag for `require_ref_searches_node_package_before_root`\ntime: "
  },
  {
    "path": ".changes/unreleased/Fixes-20260306-192013.yaml",
    "chars": 175,
    "preview": "kind: Fixes\nbody: Resolve full node description while running udfs for better logging\ntime: 2026-03-06T19:20:13.395048+0"
  },
  {
    "path": ".changes/unreleased/Fixes-20260310-120000.yaml",
    "chars": 241,
    "preview": "kind: Fixes\nbody: Fix list-type metric filters under models key being incorrectly rendered at parse time, causing 'Dimen"
  },
  {
    "path": ".changes/unreleased/Fixes-20260317-094953.yaml",
    "chars": 200,
    "preview": "kind: Fixes\nbody: Add @requires.catalogs decorator to test command to fix custom catalog integration support\ntime: 2026-"
  },
  {
    "path": ".changes/unreleased/Fixes-20260318-000000.yaml",
    "chars": 193,
    "preview": "kind: Fixes\nbody: Fix IndexError when parsing semantic model that references a disabled or missing model\ntime: 2026-03-1"
  },
  {
    "path": ".changes/unreleased/Fixes-20260318-091800.yaml",
    "chars": 213,
    "preview": "kind: Fixes\nbody: Support custom ref kwargs in unit tests and generic data tests, behind behavior flag `support_custom_r"
  },
  {
    "path": ".changes/unreleased/Fixes-20260318-173426.yaml",
    "chars": 168,
    "preview": "kind: Fixes\nbody: Fix AttributeError when docs block argument is non-constant\ntime: 2026-03-18T17:34:26.771797-04:00\ncus"
  },
  {
    "path": ".changes/unreleased/Fixes-20260318-182358.yaml",
    "chars": 170,
    "preview": "kind: Fixes\nbody: Fix AttributeError when generic test config is non-dictionary\ntime: 2026-03-18T18:23:58.393692-04:00\nc"
  },
  {
    "path": ".changes/unreleased/Fixes-20260318-191153.yaml",
    "chars": 151,
    "preview": "kind: Fixes\nbody: handle jinja2.Undefined in msgpack_encoder\ntime: 2026-03-18T19:11:53.734654-04:00\ncustom:\n    Author: "
  },
  {
    "path": ".changes/unreleased/Fixes-20260318-200626.yaml",
    "chars": 181,
    "preview": "kind: Fixes\nbody: Fix inheritance for defaults.agg_time_dimension in semantic models.\ntime: 2026-03-18T20:06:26.155408-0"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20250929-151159.yaml",
    "chars": 142,
    "preview": "kind: Under the Hood\nbody: Update schema file order test\ntime: 2025-09-29T15:11:59.611595-04:00\ncustom:\n    Author: gsha"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20251119-110110.yaml",
    "chars": 184,
    "preview": "kind: Under the Hood\nbody: Update jsonschemas for schema.yml and dbt_project.yml deprecations\ntime: 2025-11-19T11:01:10."
  },
  {
    "path": ".changes/unreleased/Under the Hood-20251121-140515.yaml",
    "chars": 192,
    "preview": "kind: Under the Hood\nbody: Replace setuptools and tox with hatch for build, test, and environment management.\ntime: 2025"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20251209-131857.yaml",
    "chars": 191,
    "preview": "kind: Under the Hood\nbody: Add add_catalog_integration call even if we have a pre-existing manifest\ntime: 2025-12-09T13:"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20251215-155046.yaml",
    "chars": 159,
    "preview": "kind: Under the Hood\nbody: Bump lower bound for dbt-common to 1.37.2\ntime: 2025-12-15T15:50:46.857793-05:00\ncustom:\n    "
  },
  {
    "path": ".changes/unreleased/Under the Hood-20260205-200835.yaml",
    "chars": 146,
    "preview": "kind: Under the Hood\nbody: sync JSON schemas from dbt-fusion\ntime: 2026-02-05T20:08:35.515361881Z\ncustom:\n    Author: fa"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20260210-151244.yaml",
    "chars": 179,
    "preview": "kind: Under the Hood\nbody: Handle missing column time granularities during parsing.\ntime: 2026-02-10T15:12:44.460381-08:"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20260214-181659.yaml",
    "chars": 145,
    "preview": "kind: Under the Hood\nbody: sync JSON schemas from dbt-fusion\ntime: 2026-02-14T18:16:59.71097177Z\ncustom:\n    Author: fa-"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20260220-170741.yaml",
    "chars": 146,
    "preview": "kind: Under the Hood\nbody: sync JSON schemas from dbt-fusion\ntime: 2026-02-20T17:07:41.802981778Z\ncustom:\n    Author: fa"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20260223-121653.yaml",
    "chars": 186,
    "preview": "kind: Under the Hood\nbody: Make test case for parsing metric filters slightly more robust.\ntime: 2026-02-23T12:16:53.395"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20260225-092728.yaml",
    "chars": 146,
    "preview": "kind: Under the Hood\nbody: sync JSON schemas from dbt-fusion\ntime: 2026-02-25T09:27:28.498892233Z\ncustom:\n    Author: fa"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20260302-101022.yaml",
    "chars": 212,
    "preview": "kind: Under the Hood\nbody: Unpin sqlparse dependency, and introduce --sqlparse CLI option for configuring sqlparse limit"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20260306-182611.yaml",
    "chars": 145,
    "preview": "kind: Under the Hood\nbody: sync JSON schemas from dbt-fusion\ntime: 2026-03-06T18:26:11.89001132Z\ncustom:\n    Author: fa-"
  },
  {
    "path": ".changes/unreleased/Under the Hood-20260318-120715.yaml",
    "chars": 207,
    "preview": "kind: Under the Hood\nbody: 'Update jsonschemas for more accurate deprecation warnings: macro.config should not warn'\ntim"
  },
  {
    "path": ".changie.yaml",
    "chars": 3564,
    "preview": "changesDir: .changes\nunreleasedDir: unreleased\nheaderPath: header.tpl.md\nversionHeaderPath: \"\"\nchangelogPath: CHANGELOG."
  },
  {
    "path": ".dockerignore",
    "chars": 35,
    "preview": "*\n!docker/requirements/*.txt\n!dist\n"
  },
  {
    "path": ".flake8",
    "chars": 273,
    "preview": "[flake8]\nselect =\n    E\n    W\n    F\nignore =\n    W503 # makes Flake8 work like black\n    W504\n    E203 # makes Flake8 wo"
  },
  {
    "path": ".git-blame-ignore-revs",
    "chars": 121,
    "preview": "# Reformatting dbt-core via black, flake8, mypy, and assorted pre-commit hooks.\n43e3fc22c4eae4d3d901faba05e33c40f1f1dc5a"
  },
  {
    "path": ".gitattributes",
    "chars": 261,
    "preview": "core/dbt/task/docs/index.html binary\ntests/functional/artifacts/data/state/*/manifest.json binary\ncore/dbt/docs/build/ht"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 836,
    "preview": "# This file contains the code owners for the dbt-core repo.\n# PRs will be automatically assigned for review to the assoc"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.yml",
    "chars": 3363,
    "preview": "name: 🐞 Bug\ndescription: Report a bug or an issue you've found with dbt\ntitle: \"[Bug] <title>\"\nlabels: [\"bug\", \"triage\"]"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/code-docs.yml",
    "chars": 653,
    "preview": "name: 📄 Code docs\ndescription: Report an issue for markdown files within this repo, such as README, ARCHITECTURE, etc.\nt"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 999,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Documentation\n    url: https://github.com/dbt-labs/docs.getdbt.com/"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.yml",
    "chars": 2483,
    "preview": "name: ✨ Feature\ndescription: Propose a straightforward extension of dbt functionality\ntitle: \"[Feature] <title>\"\nlabels:"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/implementation-ticket.yml",
    "chars": 3087,
    "preview": "name: 🛠️ Implementation\ndescription: This is an implementation ticket intended for use by the maintainers of dbt-core\nti"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/regression-report.yml",
    "chars": 3039,
    "preview": "name: ☣️ Regression\ndescription: Report a regression you've observed in a newer version of dbt\ntitle: \"[Regression] <tit"
  },
  {
    "path": ".github/_README.md",
    "chars": 10764,
    "preview": "<!-- GitHub will publish this readme on the main repo page if the name is `README.md` so we've added the leading undersc"
  },
  {
    "path": ".github/actions/latest-wrangler/Dockerfile",
    "chars": 434,
    "preview": "FROM python:3-slim AS builder\nADD . /app\nWORKDIR /app\n\n# We are installing a dependency here directly into our app sourc"
  },
  {
    "path": ".github/actions/latest-wrangler/README.md",
    "chars": 1561,
    "preview": "# Github package 'latest' tag wrangler for containers\n## Usage\n\nPlug in the necessary inputs to determine if the contain"
  },
  {
    "path": ".github/actions/latest-wrangler/action.yml",
    "chars": 622,
    "preview": "name: \"GitHub package `latest` tag wrangler for containers\"\ndescription: \"Determines if the published image should inclu"
  },
  {
    "path": ".github/actions/latest-wrangler/examples/example_workflow.yml",
    "chars": 732,
    "preview": "name: Ship it!\non:\n  workflow_dispatch:\n    inputs:\n      package:\n        description: The package to publish\n        r"
  },
  {
    "path": ".github/actions/latest-wrangler/examples/example_workflow_dispatch.json",
    "chars": 91,
    "preview": "{\n    \"inputs\": {\n      \"version_number\": \"1.0.1\",\n      \"package\": \"dbt-redshift\"\n    }\n}\n"
  },
  {
    "path": ".github/actions/latest-wrangler/main.py",
    "chars": 2339,
    "preview": "import os\nimport sys\nfrom typing import List\n\nimport requests\nfrom packaging.version import Version, parse\n\n\ndef main():"
  },
  {
    "path": ".github/actions/setup-postgres-windows/action.yml",
    "chars": 1329,
    "preview": "name: \"Set up postgres (windows)\"\ndescription: \"Set up postgres service on windows vm for dbt integration tests\"\nruns:\n "
  },
  {
    "path": ".github/dbt-postgres-testing.yml",
    "chars": 6055,
    "preview": "# **what?**\n# Runs all tests in dbt-postgres with this branch of dbt-core to ensure nothing is broken\n\n# **why?**\n# Ensu"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 714,
    "preview": "version: 2\nupdates:\n  # python dependencies\n  - package-ecosystem: \"pip\"\n    directory: \"/\"\n    schedule:\n      interval"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 1347,
    "preview": "Resolves #\n\n<!---\n  Include the number of the issue addressed by this PR above, if applicable.\n  PRs for code changes wi"
  },
  {
    "path": ".github/workflows/artifact-reviews.yml",
    "chars": 8376,
    "preview": "# **what?**\n# Enforces 2 reviews when artifact or validation files are modified.\n\n# **why?**\n# Ensure artifact changes r"
  },
  {
    "path": ".github/workflows/auto-respond-bug-reports.yml",
    "chars": 1862,
    "preview": "# **what?**\n# Check if the an issue is opened near or during an extended holiday period.\n# If so, post an automatically-"
  },
  {
    "path": ".github/workflows/backport.yml",
    "chars": 1241,
    "preview": "# **what?**\n# When a PR is merged, if it has the backport label, it will create\n# a new PR to backport those changes to "
  },
  {
    "path": ".github/workflows/bot-changelog.yml",
    "chars": 1854,
    "preview": "# **what?**\n# When bots create a PR, this action will add a corresponding changie yaml file to that\n# PR when a specific"
  },
  {
    "path": ".github/workflows/changelog-existence.yml",
    "chars": 1406,
    "preview": "# **what?**\n# Checks that a file has been committed under the /.changes directory\n# as a new CHANGELOG entry.  Cannot ch"
  },
  {
    "path": ".github/workflows/check-artifact-changes.yml",
    "chars": 1917,
    "preview": "name: Check Artifact Changes\n\non:\n  pull_request:\n    types: [ opened, reopened, labeled, unlabeled, synchronize ]\n    p"
  },
  {
    "path": ".github/workflows/community-label.yml",
    "chars": 1393,
    "preview": "# **what?**\n# Label a PR with a `community` label when a PR is opened by a user outside core/adapters\n\n# **why?**\n# To s"
  },
  {
    "path": ".github/workflows/cut-release-branch.yml",
    "chars": 14765,
    "preview": "# **what?**\n# Cuts the `*.latest` branch, bumps dependencies on it, cleans up all files in `.changes/unreleased`\n# and `"
  },
  {
    "path": ".github/workflows/docs-issue.yml",
    "chars": 3341,
    "preview": "# **what?**\n# Open an issue in docs.getdbt.com when an issue is labeled `user docs` and closed as completed\n\n# **why?**\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 12914,
    "preview": "# **what?**\n# Runs code quality checks, unit tests, integration tests and\n# verifies python build on all code commited t"
  },
  {
    "path": ".github/workflows/nightly-release.yml",
    "chars": 3221,
    "preview": "# **what?**\n# Nightly releases to GitHub and PyPI. This workflow produces the following outcome:\n# - generate and valida"
  },
  {
    "path": ".github/workflows/release-branch-tests.yml",
    "chars": 921,
    "preview": "# **what?**\n# The purpose of this workflow is to trigger CI to run for each\n# release branch and main branch on a regula"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 9861,
    "preview": "# **what?**\n# Release workflow provides the following steps:\n# - checkout the given commit;\n# - validate version in sour"
  },
  {
    "path": ".github/workflows/repository-cleanup.yml",
    "chars": 844,
    "preview": "# **what?**\n# Cleanup branches left over from automation and testing.  Also cleanup\n# draft releases from release testin"
  },
  {
    "path": ".github/workflows/schema-check.yml",
    "chars": 3999,
    "preview": "# **what?**\n# Compares the schema of the dbt version of the given ref vs\n# the latest official schema releases found in "
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 216,
    "preview": "name: \"Close stale issues and PRs\"\non:\n  schedule:\n    - cron: \"30 1 * * *\"\n\npermissions:\n  issues: write\n  pull-request"
  },
  {
    "path": ".github/workflows/structured-logging-schema-check.yml",
    "chars": 4220,
    "preview": "# This Action checks makes a dbt run to sample json structured logs\n# and checks that they conform to the currently docu"
  },
  {
    "path": ".github/workflows/test-repeater.yml",
    "chars": 5439,
    "preview": "# **what?**\n# This workflow will test all test(s) at the input path given number of times to determine if it's flaky or "
  },
  {
    "path": ".github/workflows/triage-labels.yml",
    "chars": 907,
    "preview": "# **what?**\n# When the core team triages, we sometimes need more information from the issue creator.  In\n# those cases w"
  },
  {
    "path": ".github/workflows/update-test-durations.yml",
    "chars": 10522,
    "preview": "# **what?**\n# Generates pytest-split test duration data for optimized test splitting.\n# It runs tests with pytest-split "
  },
  {
    "path": ".gitignore",
    "chars": 1213,
    "preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 3083,
    "preview": "# Configuration for pre-commit hooks (see https://pre-commit.com/).\n# Eventually the hooks described here will be run as"
  },
  {
    "path": "AGENTS.md",
    "chars": 9070,
    "preview": "# AGENTS.md — AI Coding Agent Guidelines for dbt-core\n\n## Project Overview\n\ndbt-core is the open-source core of [dbt](ht"
  },
  {
    "path": "ARCHITECTURE.md",
    "chars": 4383,
    "preview": "The core function of dbt is SQL compilation and execution. Users create projects of dbt resources (models, tests, seeds,"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 2488,
    "preview": "# dbt Core Changelog\n\n- This file provides a full account of all changes to `dbt-core`\n- Changes are listed under the (p"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 18631,
    "preview": "# Contributing to `dbt-core`\n\n`dbt-core` is open source software. It is what it is today because community members have "
  },
  {
    "path": "Dockerfile.test",
    "chars": 2030,
    "preview": "##\n#  This dockerfile is used for local development and adapter testing only.\n#  See `/docker` for a generic and product"
  },
  {
    "path": "Makefile",
    "chars": 3408,
    "preview": "# ============================================================================\n# DEPRECATED: This Makefile is maintained"
  },
  {
    "path": "README.md",
    "chars": 2715,
    "preview": "<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/dbt-labs/dbt-core/fa1ea14ddfb1d5ae319d5141844910dd53ab2"
  },
  {
    "path": "SECURITY.md",
    "chars": 74,
    "preview": "[About dbt Core versions](https://docs.getdbt.com/docs/dbt-versions/core)\n"
  },
  {
    "path": "codecov.yml",
    "chars": 557,
    "preview": "ignore:\n  - \".github\"\n  - \".changes\"\n\n# Disable all status checks to prevent red X's in CI\n# Coverage data is still uplo"
  },
  {
    "path": "core/.test_durations",
    "chars": 188928,
    "preview": "{\n    \"tests/functional/access/test_access.py::TestAccess::test_access_attribute\": 19.693285994999997,\n    \"tests/functi"
  },
  {
    "path": "core/LICENSE",
    "chars": 11344,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "core/README.md",
    "chars": 2387,
    "preview": "<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/dbt-labs/dbt-core/fa1ea14ddfb1d5ae319d5141844910dd53ab2"
  },
  {
    "path": "core/dbt/README.md",
    "chars": 611,
    "preview": "# core/dbt directory README\n\n## The following are individual files in this directory.\n\n### compilation.py\n\n### constants"
  },
  {
    "path": "core/dbt/__init__.py",
    "chars": 339,
    "preview": "# N.B.\n# This will add to the package’s __path__ all subdirectories of directories on sys.path named after the package w"
  },
  {
    "path": "core/dbt/__version__.py",
    "chars": 21,
    "preview": "version = \"1.12.0a1\"\n"
  },
  {
    "path": "core/dbt/_pydantic_shim.py",
    "chars": 1183,
    "preview": "# type: ignore\n\n\"\"\"Shim to allow support for both Pydantic 1 and Pydantic 2.\n\ndbt-core must support both major versions "
  },
  {
    "path": "core/dbt/artifacts/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "core/dbt/artifacts/exceptions/__init__.py",
    "chars": 69,
    "preview": "from dbt.artifacts.exceptions.schemas import IncompatibleSchemaError\n"
  },
  {
    "path": "core/dbt/artifacts/exceptions/schemas.py",
    "chars": 895,
    "preview": "from typing import Optional\n\nfrom dbt_common.exceptions import DbtRuntimeError\n\n\nclass IncompatibleSchemaError(DbtRuntim"
  },
  {
    "path": "core/dbt/artifacts/resources/__init__.py",
    "chars": 3208,
    "preview": "from dbt.artifacts.resources.base import BaseResource, Docs, FileHash, GraphResource\nfrom dbt.artifacts.resources.v1.ana"
  },
  {
    "path": "core/dbt/artifacts/resources/base.py",
    "chars": 1779,
    "preview": "import hashlib\nfrom dataclasses import dataclass\nfrom typing import List, Optional\n\nfrom dbt.artifacts.resources.types i"
  },
  {
    "path": "core/dbt/artifacts/resources/types.py",
    "chars": 1924,
    "preview": "from dbt_common.dataclass_schema import StrEnum\n\n\nclass AccessType(StrEnum):\n    Private = \"private\"\n    Protected = \"pr"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/analysis.py",
    "chars": 273,
    "preview": "from dataclasses import dataclass\nfrom typing import Literal\n\nfrom dbt.artifacts.resources.types import NodeType\nfrom db"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/catalog.py",
    "chars": 737,
    "preview": "from dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Optional\n\nfrom dbt.adapters.catalogs import"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/components.py",
    "chars": 10047,
    "preview": "import time\nfrom dataclasses import dataclass, field\nfrom datetime import timedelta\nfrom typing import Any, Dict, List, "
  },
  {
    "path": "core/dbt/artifacts/resources/v1/config.py",
    "chars": 10427,
    "preview": "import re\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Optional, Union\n\nfrom mashumaro.j"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/documentation.py",
    "chars": 290,
    "preview": "from dataclasses import dataclass\nfrom typing import Literal\n\nfrom dbt.artifacts.resources.base import BaseResource\nfrom"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/exposure.py",
    "chars": 1661,
    "preview": "import time\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Literal, Optional\n\nfrom dbt.art"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/function.py",
    "chars": 2205,
    "preview": "from dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Literal, Optional\n\nfrom dbt.artifacts.resou"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/generic_test.py",
    "chars": 1210,
    "preview": "from dataclasses import dataclass, field\nfrom typing import Any, Dict, Literal, Optional\n\nfrom dbt.artifacts.resources.t"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/group.py",
    "chars": 667,
    "preview": "from dataclasses import dataclass, field\nfrom typing import Any, Dict, Literal, Optional\n\nfrom dbt.artifacts.resources.b"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/hook.py",
    "chars": 316,
    "preview": "from dataclasses import dataclass\nfrom typing import Literal, Optional\n\nfrom dbt.artifacts.resources.types import NodeTy"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/macro.py",
    "chars": 1264,
    "preview": "import time\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Literal, Optional\n\nfrom dbt.art"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/metric.py",
    "chars": 6644,
    "preview": "import time\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Literal, Optional\n\nfrom dbt.art"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/model.py",
    "chars": 5046,
    "preview": "import enum\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\nfrom typing import Dict, List, Litera"
  },
  {
    "path": "core/dbt/artifacts/resources/v1/owner.py",
    "chars": 287,
    "preview": "from dataclasses import dataclass\nfrom typing import List, Optional, Union\n\nfrom dbt_common.contracts.config.properties "
  }
]

// ... and 875 more files (download for full content)

About this extraction

This page contains the full source code of the dbt-labs/dbt-core GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1075 files (12.5 MB), approximately 3.3M tokens, and a symbol index with 11180 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!