dbt-artifacts-parser
This is a dbt artifacts parser in python.
It enables us to deal with catalog.json, manifest.json, run-results.json and sources.json as python objects.
This package is primarily designed for dbt-core, enabling seamless interaction with dbt artifacts as Python objects. While dbt Cloud provides additional artifact types beyond those of dbt-core, this package does not offer comprehensive support for them.
Supported Versions and Compatibility
⚠️ Important Note:
- Pydantic v1 will not be supported for dbt 1.9 or later.
- To parse dbt 1.9 or later, please migrate your code to pydantic v2.
- We will reassess version compatibility upon the release of pydantic v3.
| Version | Supported dbt Version | Supported pydantic Version |
|---|---|---|
| 0.15 | dbt 0.19 to 1.12 | pydantic v2 |
| 0.14 | dbt 0.19 to 1.11 | pydantic v2 |
| 0.13 | dbt 0.19 to 1.11 | pydantic v2 |
| 0.12 | dbt 0.19 to 1.11 | pydantic v2 |
| 0.9 | dbt 1.7 to 1.10 | pydantic v2 |
| 0.8 | dbt 1.5 to 1.9 | pydantic v2 |
| 0.7 | dbt 1.5 to 1.8 | pydantic v2 |
| 0.6 | dbt 1.5 to 1.8 | pydantic v1 |
| 0.5 | dbt 1.5 to 1.7 | pydantic v1 |
Installation
Requires Python 3.10 or newer. Tested on CPython 3.10, 3.11, 3.12, and 3.13.
pip install -U dbt-artifacts-parser
Development dependencies are declared as a PEP 735 dev dependency group in pyproject.toml (locked in uv.lock) and mirrored under [project.optional-dependencies].dev so pip install dbt-artifacts-parser[dev] keeps working. After cloning, run make setup or bash dev/setup.sh --deps development (uses uv sync). To add a dev tool: uv add --group dev <package>, then update [project.optional-dependencies].dev to match, and run uv lock.
Python classes
Those are the classes to parse dbt artifacts.
Catalog
- CatalogV1 for catalog.json v1
Manifest
- ManifestV1 for manifest.json v1
- ManifestV2 for manifest.json v2
- ManifestV3 for manifest.json v3
- ManifestV4 for manifest.json v4
- ManifestV5 for manifest.json v5
- ManifestV6 for manifest.json v6
- ManifestV7 for manifest.json v7
- ManifestV8 for manifest.json v8
- ManifestV9 for manifest.json v9
- ManifestV10 for manifest.json v10
- ManifestV11 for manifest.json v11
- ManifestV12 for manifest.json v12
Run Results
- RunResultsV1 for run_results.json v1
- RunResultsV2 for run_results.json v2
- RunResultsV3 for run_results.json v3
- RunResultsV4 for run_results.json v4
- RunResultsV5 for run_results.json v5
- RunResultsV6 for run_results.json v6
Sources
Examples
Parse catalog.json
import json
# parse any version of catalog.json
from dbt_artifacts_parser.parser import parse_catalog
with open("path/to/catalog.json", "r") as fp:
catalog_dict = json.load(fp)
catalog_obj = parse_catalog(catalog=catalog_dict)
# parse catalog.json v1
from dbt_artifacts_parser.parser import parse_catalog_v1
with open("path/to/catalog.json", "r") as fp:
catalog_dict = json.load(fp)
catalog_obj = parse_catalog_v1(catalog=catalog_dict)
Parse manifest.json
import json
# parse any version of manifest.json
from dbt_artifacts_parser.parser import parse_manifest
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest(manifest=manifest_dict)
# Opt-in best-effort parse when the schema version is newer than this
# package supports. Fields forbidden by the latest schema are dropped;
# nested extras allowed by the schema (e.g. custom dbt config keys) are
# kept. Prefer refreshing parsers for full support of new versions.
manifest_obj = parse_manifest(manifest=manifest_dict, fallback_to_latest=True)
# parse manifest.json v1
from dbt_artifacts_parser.parser import parse_manifest_v1
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v1(manifest=manifest_dict)
# parse manifest.json v2
from dbt_artifacts_parser.parser import parse_manifest_v2
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v2(manifest=manifest_dict)
# parse manifest.json v3
from dbt_artifacts_parser.parser import parse_manifest_v3
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v3(manifest=manifest_dict)
# parse manifest.json v4
from dbt_artifacts_parser.parser import parse_manifest_v4
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v4(manifest=manifest_dict)
# parse manifest.json v5
from dbt_artifacts_parser.parser import parse_manifest_v5
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v5(manifest=manifest_dict)
# parse manifest.json v6
from dbt_artifacts_parser.parser import parse_manifest_v6
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v6(manifest=manifest_dict)
# parse manifest.json v7
from dbt_artifacts_parser.parser import parse_manifest_v7
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v7(manifest=manifest_dict)
# parse manifest.json v8
from dbt_artifacts_parser.parser import parse_manifest_v8
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v8(manifest=manifest_dict)
# parse manifest.json v9
from dbt_artifacts_parser.parser import parse_manifest_v9
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v9(manifest=manifest_dict)
# parse manifest.json v10
from dbt_artifacts_parser.parser import parse_manifest_v10
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v10(manifest=manifest_dict)
# parse manifest.json v11
from dbt_artifacts_parser.parser import parse_manifest_v11
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v11(manifest=manifest_dict)
# parse manifest.json v12
from dbt_artifacts_parser.parser import parse_manifest_v12
with open("path/to/manifest.json", "r") as fp:
manifest_dict = json.load(fp)
manifest_obj = parse_manifest_v12(manifest=manifest_dict)
Parse run-results.json
import json
# parse any version of run-results.json
from dbt_artifacts_parser.parser import parse_run_results
with open("path/to/run-results.json", "r") as fp:
run_results_dict = json.load(fp)
run_results_obj = parse_run_results(run_results=run_results_dict)
# parse run-results.json v1
from dbt_artifacts_parser.parser import parse_run_results_v1
with open("path/to/run-results.json", "r") as fp:
run_results_dict = json.load(fp)
run_results_obj = parse_run_results_v1(run_results=run_results_dict)
# parse run-results.json v2
from dbt_artifacts_parser.parser import parse_run_results_v2
with open("path/to/run-results.json", "r") as fp:
run_results_dict = json.load(fp)
run_results_obj = parse_run_results_v2(run_results=run_results_dict)
# parse run-results.json v3
from dbt_artifacts_parser.parser import parse_run_results_v3
with open("path/to/run-results.json", "r") as fp:
run_results_dict = json.load(fp)
run_results_obj = parse_run_results_v3(run_results=run_results_dict)
# parse run-results.json v4
from dbt_artifacts_parser.parser import parse_run_results_v4
with open("path/to/run-results.json", "r") as fp:
run_results_dict = json.load(fp)
run_results_obj = parse_run_results_v4(run_results=run_results_dict)
# parse run-results.json v5
from dbt_artifacts_parser.parser import parse_run_results_v5
with open("path/to/run-results.json", "r") as fp:
run_results_dict = json.load(fp)
run_results_obj = parse_run_results_v5(run_results=run_results_dict)
# parse run-results.json v6
from dbt_artifacts_parser.parser import parse_run_results_v6
with open("path/to/run-results.json", "r") as fp:
run_results_dict = json.load(fp)
run_results_obj = parse_run_results_v6(run_results=run_results_dict)
Parse sources.json
import json
# parse any version of sources.json
from dbt_artifacts_parser.parser import parse_sources
with open("path/to/sources.json", "r") as fp:
sources_dict = json.load(fp)
sources_obj = parse_sources(sources=sources_dict)
# parse sources.json v1
from dbt_artifacts_parser.parser import parse_sources_v1
with open("path/to/sources.json", "r") as fp:
sources_dict = json.load(fp)
sources_obj = parse_sources_v1(sources=sources_dict)
# parse sources.json v2
from dbt_artifacts_parser.parser import parse_sources_v2
with open("path/to/sources.json", "r") as fp:
sources_dict = json.load(fp)
sources_obj = parse_sources_v2(sources=sources_dict)
# parse sources.json v3
from dbt_artifacts_parser.parser import parse_sources_v3
with open("path/to/sources.json", "r") as fp:
sources_dict = json.load(fp)
sources_obj = parse_sources_v3(sources=sources_dict)
Contributors
Thank you for your contributions!
If you are interested in contributing to this package, please check out the CONTRIBUTING.md.
|
Yu Ishikawa |
Null |
Brent Brewington |
Dinis Louseiro |
Jairus Martinez |
Judah Rand |
|
Kilian Tscherny |
Matteo Renoldi |
Mayur Singal |
Mohamed Nabil Mahmoud Hafez |
Onkar Ravgan |
Pádraic Slattery |
|
asafalina |
Null |
Metadata
Release files for dbt-artifacts-parser 0.15.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dbt_artifacts_parser-0.15.0.tar.gz | 72.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dbt_artifacts_parser-0.15.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 168.4 kB
Release files / dbt_artifacts_parser-0.15.0.tar.gz
| Download URL | dbt_artifacts_parser-0.15.0.tar.gz |
|---|---|
| Size | 72.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ccfc2d8d92cbd9237213b5e939145b25a01e729c863493a33914db0aa800607d
|
|
BLAKE2b-256 checksum How to use checksums |
33b7c31a7d44dd86453a54b4bf363c0f185e871d087e7e66d3e27f0706564b17
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dbt_artifacts_parser-0.15.0-py3-none-any.whl
| Download URL | dbt_artifacts_parser-0.15.0-py3-none-any.whl |
|---|---|
| Size | 95.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d1050ec55983566c29328a6180f3b7832abe4325959214ba1eee7ffae8c4a133
|
|
BLAKE2b-256 checksum How to use checksums |
20af4dbee3332a3032940eb94d49a5b338142ae223be6cc22a70bff6dadf6b61
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|