This release is a pre-release and may not be stable for production use.
Package Management
This directory contains code used by the packages option in the CLI that upgrades packages in a project to a Fusion-compatible version. The code is centered on four classes:
- DbtPackageFile: represents a file (currently packages.yml or dependencies.yml) that contains package dependencies for a project
- DbtPackage: represents a package that is installed as a dependency for the project
- DbtPackageVersion: represents a specific version of a package
- DbtPackageTextFile: contains the raw lines of text from package dependency files. This is used when upgrading packages so we can replace just the version strings within a file without affecting the rest of the file layout (such as comments).
How the CLI works
The packages command calls the upgrade_packages function in main.py. This then calls:
generate_package_dependencies: extracts dependencies from project's packages.yml/dependencies.yml file and identifies installed package versions indbt_packages- Returns
DbtPackageFileif a packages.yml/dependencies.yml file is found and specifies at least one package; otherwise, None
- Returns
check_for_package_upgrades: traverses the dependencies inDbtPackageFileand for each package, determines if the current installed versions is Fusion compatible; if not, it looks for any Fusion-compatible versions of the package- Returns list of
PackageVersionUpgradeResult- Length should exactly match the number of packages in the
DbtPackageFile's dependencies
- Length should exactly match the number of packages in the
- Returns list of
upgrade_package_versions: takes thePackageVersionUpgradeResultlist and if any packages need updates, it identifies the required changes in packages.yml. For a dry run, it prints out the new packages.yml; otherwise, it actually makes the changes in the file.- Returns a single
PackageUpgradeResult
- Returns a single
print_to_consoleon thePackageUpgradeResult
upgrade_packages will generate an error if:
- the path specified in
--pathdoes not exist or isn't a directory generate_package_dependenciescan't find a packages.yml or dependencies.ymlgenerate_package_dependenciesfound a packages.yml or dependencies.yml but it didn't contain any package dependencies
Scripts
- Used to extract info used in package upgrade CLI:
get_package_hub_files.py: download package information from package hub (hub.getdbt.com) for all versions of all packages- Output:
package_output.json
- Output:
get_fusion_compatible_versions.py: loadspackage_output.jsonand summarizes Fusion compatibility across all versions for each package- Output:
fusion_version_compatibility_output.jsonandfusion_version_compatibility_output.py
- Output:
- Not used as an input to the package upgrade CLI:
packages_with_fusion_compatibility_changes.py: readsfusion_version_compatibility_output.pyand generates a CSV summary of packages for analytics use- Output:
packages.csv
- Output:
get_package_hub_files.py and get_fusion_compatible_version.py are used to pull data from the public package registry (hub.getdbt.com) and extract Fusion compatibility information from available versions. This is basically a local cache of package information to bootstrap autofix. We need to know the lower bound of Fusion-compatible versions for a package but we also know that older versions of packages will not change, so caching this locally removes a lot of repetitive network calls and text parsing. Which means faster run times and fewer failures due to network issues.
The output from these two scripts produces fusion_version_compatibility_output.py that contains a single constant, FUSION_VERSION_COMPATIBILITY_OUTPUT. This is then used in DbtPackage's merge_fusion_compatibility_output to populate compatible versions.
TODO
- Private packages
- Check require_dbt_version in installed private packages
- Need a way to match the dependency in packages.yml (since it doesn't have the name which is used for public packages)
- Match the version specifier type when upgrading packages
- Currently if the package config specifies a version like ">1.0.1" and we need to upgrade to 1.0.2, it gets replaced with "1.0.2"
- Should instead replace with same format like ">1.0.2"
- Get latest versions from package hub instead of using cache
- Better handling for version in package's dbt_project.yml
- Sometimes the version number in the package's dbt_project.yml doesn't actually match the release version because package hub only checks the release tag on Github, so the installed version check will set an incorrect version
- Added logic in DbtPackageFile will override the installed version if it's less than the config's version range, but this isn't 100% reliable
- Could instead refer to the package lock file to find the exact version
- But probably not a huge problem since we are only looking for the require dbt version anyway and only look for upgrades if it's missing/incompatible
- Move package parsing logic to hubcap or package hub where appropriate
- Explicit overrides at version level
- Currently in scripts/get_fusion_compatible_versions and DbtPackageVersion.is_version_explicitly_disallowed_on_fusion, but should refine logic
Metadata
Release files for dbt-fusion-package-tools 0.22.5a0
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_fusion_package_tools-0.22.5a0.tar.gz | 48.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dbt_fusion_package_tools-0.22.5a0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 108.6 kB
Release files / dbt_fusion_package_tools-0.22.5a0.tar.gz
| Download URL | dbt_fusion_package_tools-0.22.5a0.tar.gz |
|---|---|
| Size | 48.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9c8682cdd8751a1e3132967f841ba72d28cc27f20c9a8731cbb832de24995482
|
|
BLAKE2b-256 checksum How to use checksums |
45e356f035e2aec128bf67667e96971584c0f4de833df954d1cb5bbdede286ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / dbt_fusion_package_tools-0.22.5a0-py3-none-any.whl
| Download URL | dbt_fusion_package_tools-0.22.5a0-py3-none-any.whl |
|---|---|
| Size | 60.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c3c821d8a660d020d53bef579e00c814a561c5a0f43e0b69878d360a68785b9f
|
|
BLAKE2b-256 checksum How to use checksums |
d418dd180192d84600d753f1d6dcac4700c8dd3964e09c667e0cda32f2ae89f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency log