nicholasyager / dbt-loom

A dbt-core plugin to weave together multi-project dbt-core deployments
The Unlicense
104 stars 19 forks source link

Fix: Correct version parsing and clean up test projects #50

Closed nicholasyager closed 4 months ago

nicholasyager commented 4 months ago

Description and motivation

Within 0.5.1 there are two defects that can result in instability when referencing versioned models.

  1. dbt-loom currently allows for parsing version and latest_version fields as either a string or a float. This can cause issues, since dbt-core naively injects this value into the ModelNodeArgs unique_id. If the upstream project is assuming string versions, and the downstream project defaults to float versions, the unique_id fields will not match and compilation will fail.
  2. In 0.5.1 we are erroniously injecting references to tests. This can cause issue, since those nodes do not actually exist as models. There is an mechanism to exclude these nodes in previous versions that is failing.

To resolve these issues, I am constraining dbt-loom to only handle versions as strings. Since unique_ids are strings, this should be universally compatible. Lastly, I've updated the test-exclusion mechanism to use dbt-core's NodeType enum for continued compatibility and robustness.

Resolves: https://github.com/nicholasyager/dbt-loom/issues/48

Validation

Outside of updates to tests, I followed a fantastic replication playbook provided by @smilingthax to confirm the fix.

oot@fe28740a0202:/tmp# git clone https://github.com/nicholasyager/dbt-loom
Cloning into 'dbt-loom'...
remote: Enumerating objects: 535, done.
remote: Counting objects: 100% (218/218), done.
remote: Compressing objects: 100% (140/140), done.
remote: Total 535 (delta 81), reused 159 (delta 76), pack-reused 317
Receiving objects: 100% (535/535), 6.42 MiB | 9.63 MiB/s, done.
Resolving deltas: 100% (229/229), done.
root@fe28740a0202:/tmp# cd dbt-loom/
root@fe28740a0202:/tmp/dbt-loom# git checkout fix/correct_version_parsing
branch 'fix/correct_version_parsing' set up to track 'origin/fix/correct_version_parsing'.
Switched to a new branch 'fix/correct_version_parsing'
root@fe28740a0202:/tmp/dbt-loom# pip install .
Processing /tmp/dbt-loom
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: azure-identity<2.0.0,>=1.15.0 in /usr/local/lib/python3.12/site-packages (from dbt-loom==0.5.1) (1.16.0)
Requirement already satisfied: azure-storage-blob<13.0.0,>=12.19.0 in /usr/local/lib/python3.12/site-packages (from dbt-loom==0.5.1) (12.19.1)
Requirement already satisfied: boto3<2.0.0,>=1.28.84 in /usr/local/lib/python3.12/site-packages (from dbt-loom==0.5.1) (1.34.98)
Requirement already satisfied: dbt-core<1.8.0,>=1.6.0 in /usr/local/lib/python3.12/site-packages (from dbt-loom==0.5.1) (1.7.14)
Requirement already satisfied: google-cloud-storage<3.0.0,>=2.13.0 in /usr/local/lib/python3.12/site-packages (from dbt-loom==0.5.1) (2.16.0)
Requirement already satisfied: requests<3.0.0,>=2.31.0 in /usr/local/lib/python3.12/site-packages (from dbt-loom==0.5.1) (2.31.0)
Requirement already satisfied: types-networkx<4.0.0.0,>=3.2.1.20240313 in /usr/local/lib/python3.12/site-packages (from dbt-loom==0.5.1) (3.2.1.20240425)
Requirement already satisfied: types-pyyaml<7.0.0.0,>=6.0.12.12 in /usr/local/lib/python3.12/site-packages (from dbt-loom==0.5.1) (6.0.12.20240311)
Requirement already satisfied: azure-core>=1.23.0 in /usr/local/lib/python3.12/site-packages (from azure-identity<2.0.0,>=1.15.0->dbt-loom==0.5.1) (1.30.1)
Requirement already satisfied: cryptography>=2.5 in /usr/local/lib/python3.12/site-packages (from azure-identity<2.0.0,>=1.15.0->dbt-loom==0.5.1) (42.0.6)
Requirement already satisfied: msal>=1.24.0 in /usr/local/lib/python3.12/site-packages (from azure-identity<2.0.0,>=1.15.0->dbt-loom==0.5.1) (1.28.0)
Requirement already satisfied: msal-extensions>=0.3.0 in /usr/local/lib/python3.12/site-packages (from azure-identity<2.0.0,>=1.15.0->dbt-loom==0.5.1) (1.1.0)
Requirement already satisfied: typing-extensions>=4.3.0 in /usr/local/lib/python3.12/site-packages (from azure-storage-blob<13.0.0,>=12.19.0->dbt-loom==0.5.1) (4.11.0)
Requirement already satisfied: isodate>=0.6.1 in /usr/local/lib/python3.12/site-packages (from azure-storage-blob<13.0.0,>=12.19.0->dbt-loom==0.5.1) (0.6.1)
Requirement already satisfied: botocore<1.35.0,>=1.34.98 in /usr/local/lib/python3.12/site-packages (from boto3<2.0.0,>=1.28.84->dbt-loom==0.5.1) (1.34.98)
Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /usr/local/lib/python3.12/site-packages (from boto3<2.0.0,>=1.28.84->dbt-loom==0.5.1) (1.0.1)
Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in /usr/local/lib/python3.12/site-packages (from boto3<2.0.0,>=1.28.84->dbt-loom==0.5.1) (0.10.1)
Requirement already satisfied: agate~=1.7.0 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (1.7.1)
Requirement already satisfied: Jinja2<4,>=3.1.3 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (3.1.4)
Requirement already satisfied: mashumaro~=3.9 in /usr/local/lib/python3.12/site-packages (from mashumaro[msgpack]~=3.9->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (3.13)
Requirement already satisfied: logbook<1.6,>=1.5 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (1.5.3)
Requirement already satisfied: click<9,>=8.0.2 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (8.1.7)
Requirement already satisfied: networkx<4,>=2.3 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (3.3)
Requirement already satisfied: colorama<0.5,>=0.3.9 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.4.6)
Requirement already satisfied: pathspec<0.12,>=0.9 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.11.2)
Requirement already satisfied: sqlparse<0.6.0,>=0.5.0 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.5.0)
Requirement already satisfied: dbt-extractor~=0.5.0 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.5.1)
Requirement already satisfied: minimal-snowplow-tracker~=0.0.2 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.0.2)
Requirement already satisfied: dbt-semantic-interfaces~=0.4.2 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.4.4)
Requirement already satisfied: jsonschema>=3.0 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (4.22.0)
Requirement already satisfied: packaging>20.9 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (24.0)
Requirement already satisfied: protobuf<5,>=4.0.0 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (4.25.3)
Requirement already satisfied: pytz>=2015.7 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (2024.1)
Requirement already satisfied: pyyaml>=6.0 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (6.0.1)
Requirement already satisfied: cffi<2.0.0,>=1.9 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (1.16.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (3.7)
Requirement already satisfied: urllib3~=1.0 in /usr/local/lib/python3.12/site-packages (from dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (1.26.18)
Requirement already satisfied: google-auth<3.0dev,>=2.26.1 in /usr/local/lib/python3.12/site-packages (from google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (2.29.0)
Requirement already satisfied: google-api-core<3.0.0dev,>=2.15.0 in /usr/local/lib/python3.12/site-packages (from google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (2.19.0)
Requirement already satisfied: google-cloud-core<3.0dev,>=2.3.0 in /usr/local/lib/python3.12/site-packages (from google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (2.4.1)
Requirement already satisfied: google-resumable-media>=2.6.0 in /usr/local/lib/python3.12/site-packages (from google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (2.7.0)
Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /usr/local/lib/python3.12/site-packages (from google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (1.5.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.12/site-packages (from requests<3.0.0,>=2.31.0->dbt-loom==0.5.1) (3.3.2)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/site-packages (from requests<3.0.0,>=2.31.0->dbt-loom==0.5.1) (2024.2.2)
Requirement already satisfied: numpy in /usr/local/lib/python3.12/site-packages (from types-networkx<4.0.0.0,>=3.2.1.20240313->dbt-loom==0.5.1) (1.26.4)
Requirement already satisfied: Babel>=2.0 in /usr/local/lib/python3.12/site-packages (from agate~=1.7.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (2.15.0)
Requirement already satisfied: leather>=0.3.2 in /usr/local/lib/python3.12/site-packages (from agate~=1.7.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.4.0)
Requirement already satisfied: parsedatetime!=2.5,>=2.1 in /usr/local/lib/python3.12/site-packages (from agate~=1.7.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (2.6)
Requirement already satisfied: python-slugify>=1.2.1 in /usr/local/lib/python3.12/site-packages (from agate~=1.7.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (8.0.4)
Requirement already satisfied: pytimeparse>=1.1.5 in /usr/local/lib/python3.12/site-packages (from agate~=1.7.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (1.1.8)
Requirement already satisfied: six>=1.11.0 in /usr/local/lib/python3.12/site-packages (from azure-core>=1.23.0->azure-identity<2.0.0,>=1.15.0->dbt-loom==0.5.1) (1.16.0)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.12/site-packages (from botocore<1.35.0,>=1.34.98->boto3<2.0.0,>=1.28.84->dbt-loom==0.5.1) (2.9.0.post0)
Requirement already satisfied: pycparser in /usr/local/lib/python3.12/site-packages (from cffi<2.0.0,>=1.9->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (2.22)
Requirement already satisfied: importlib-metadata~=6.0 in /usr/local/lib/python3.12/site-packages (from dbt-semantic-interfaces~=0.4.2->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (6.11.0)
Requirement already satisfied: more-itertools<11.0,>=8.0 in /usr/local/lib/python3.12/site-packages (from dbt-semantic-interfaces~=0.4.2->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (10.2.0)
Requirement already satisfied: pydantic<3,>=1.10 in /usr/local/lib/python3.12/site-packages (from dbt-semantic-interfaces~=0.4.2->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (2.7.1)
Requirement already satisfied: googleapis-common-protos<2.0.dev0,>=1.56.2 in /usr/local/lib/python3.12/site-packages (from google-api-core<3.0.0dev,>=2.15.0->google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (1.63.0)
Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.3 in /usr/local/lib/python3.12/site-packages (from google-api-core<3.0.0dev,>=2.15.0->google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (1.23.0)
Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.12/site-packages (from google-auth<3.0dev,>=2.26.1->google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (5.3.3)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.12/site-packages (from google-auth<3.0dev,>=2.26.1->google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (0.4.0)
Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.12/site-packages (from google-auth<3.0dev,>=2.26.1->google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (4.9)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/site-packages (from Jinja2<4,>=3.1.3->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (2.1.5)
Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.12/site-packages (from jsonschema>=3.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (23.2.0)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.12/site-packages (from jsonschema>=3.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (2023.12.1)
Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.12/site-packages (from jsonschema>=3.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.35.1)
Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.12/site-packages (from jsonschema>=3.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.18.1)
Requirement already satisfied: msgpack>=0.5.6 in /usr/local/lib/python3.12/site-packages (from mashumaro[msgpack]~=3.9->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (1.0.8)
Requirement already satisfied: PyJWT<3,>=1.0.0 in /usr/local/lib/python3.12/site-packages (from PyJWT[crypto]<3,>=1.0.0->msal>=1.24.0->azure-identity<2.0.0,>=1.15.0->dbt-loom==0.5.1) (2.8.0)
Requirement already satisfied: portalocker<3,>=1.0 in /usr/local/lib/python3.12/site-packages (from msal-extensions>=0.3.0->azure-identity<2.0.0,>=1.15.0->dbt-loom==0.5.1) (2.8.2)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.12/site-packages (from importlib-metadata~=6.0->dbt-semantic-interfaces~=0.4.2->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (3.18.1)
Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /usr/local/lib/python3.12/site-packages (from pyasn1-modules>=0.2.1->google-auth<3.0dev,>=2.26.1->google-cloud-storage<3.0.0,>=2.13.0->dbt-loom==0.5.1) (0.6.0)
Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.12/site-packages (from pydantic<3,>=1.10->dbt-semantic-interfaces~=0.4.2->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (0.6.0)
Requirement already satisfied: pydantic-core==2.18.2 in /usr/local/lib/python3.12/site-packages (from pydantic<3,>=1.10->dbt-semantic-interfaces~=0.4.2->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (2.18.2)
Requirement already satisfied: text-unidecode>=1.3 in /usr/local/lib/python3.12/site-packages (from python-slugify>=1.2.1->agate~=1.7.0->dbt-core<1.8.0,>=1.6.0->dbt-loom==0.5.1) (1.3)
Building wheels for collected packages: dbt-loom
  Building wheel for dbt-loom (pyproject.toml) ... done
  Created wheel for dbt-loom: filename=dbt_loom-0.5.1-py3-none-any.whl size=12017 sha256=bb3603f6d32837de4b23391bf3150867422327a91d1cfd560d2bc5594e6041c3
  Stored in directory: /root/.cache/pip/wheels/6a/2e/a6/c4ef51ab62eeb361c698f92a4126c2e59a1b9047065fc8d18e
Successfully built dbt-loom
Installing collected packages: dbt-loom
  Attempting uninstall: dbt-loom
    Found existing installation: dbt-loom 0.5.1
    Uninstalling dbt-loom-0.5.1:
      Successfully uninstalled dbt-loom-0.5.1
Successfully installed dbt-loom-0.5.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
root@fe28740a0202:/tmp/dbt-loom# cd test_projects/revenue/
root@fe28740a0202:/tmp/dbt-loom/test_projects/revenue# dbt deps
17:22:04  Running with dbt=1.7.14
17:22:04  dbt-loom: Patching ref protection methods to support dbt-loom dependencies.
17:22:05  Installing dbt-labs/dbt_utils
17:22:05  Installed from version 1.0.0
17:22:05  Updated version available: 1.1.1
17:22:05  
17:22:05  Updates available for packages: ['dbt-labs/dbt_utils']                 
Update your versions in packages.yml, then run dbt deps
root@fe28740a0202:/tmp/dbt-loom/test_projects/revenue# dbt build
17:22:08  Running with dbt=1.7.14
17:22:09  dbt-loom: Patching ref protection methods to support dbt-loom dependencies.
17:22:09  Registered adapter: duckdb=1.7.4
17:22:09  Unable to do partial parsing because saved manifest not found. Starting full parse.
17:22:10  dbt-loom: Injecting nodes
17:22:10  [WARNING]: Model orders.v1 has passed its deprecation date of 2024-01-01T00:00:00+00:00. This model should be disabled or removed.
17:22:10  Found 7 models, 1 seed, 18 tests, 5 sources, 0 exposures, 0 metrics, 507 macros, 0 groups, 0 semantic models
17:22:10  
17:22:10  Concurrency: 4 threads (target='dev')
17:22:10  
17:22:10  1 of 26 START sql view model main.stg_locations ................................ [RUN]
17:22:10  2 of 26 START sql view model main.stg_order_items .............................. [RUN]
17:22:10  3 of 26 START sql view model main.stg_orders ................................... [RUN]
17:22:10  4 of 26 START sql view model main.stg_products ................................. [RUN]
17:22:10  4 of 26 OK created sql view model main.stg_products ............................ [OK in 0.11s]
17:22:10  5 of 26 START sql view model main.stg_supplies ................................. [RUN]
17:22:10  1 of 26 OK created sql view model main.stg_locations ........................... [OK in 0.13s]
17:22:10  6 of 26 START seed file main.integers .......................................... [RUN]
17:22:10  2 of 26 OK created sql view model main.stg_order_items ......................... [OK in 0.21s]
17:22:10  5 of 26 OK created sql view model main.stg_supplies ............................ [OK in 0.10s]
17:22:10  7 of 26 START test not_null_stg_products_product_id ............................ [RUN]
17:22:10  8 of 26 START test unique_stg_products_product_id .............................. [RUN]
17:22:10  3 of 26 OK created sql view model main.stg_orders .............................. [OK in 0.26s]
17:22:10  9 of 26 START test not_null_stg_locations_location_id .......................... [RUN]
17:22:10  6 of 26 OK loaded seed file main.integers ...................................... [INSERT 4 in 0.19s]
17:22:10  10 of 26 START test unique_stg_locations_location_id ........................... [RUN]
17:22:10  8 of 26 PASS unique_stg_products_product_id .................................... [PASS in 0.13s]
17:22:10  7 of 26 PASS not_null_stg_products_product_id .................................. [PASS in 0.14s]
17:22:10  11 of 26 START test not_null_stg_order_items_order_item_id ..................... [RUN]
17:22:10  12 of 26 START test unique_stg_order_items_order_item_id ....................... [RUN]
17:22:10  9 of 26 PASS not_null_stg_locations_location_id ................................ [PASS in 0.10s]
17:22:10  13 of 26 START test not_null_stg_supplies_supply_uuid .......................... [RUN]
17:22:10  10 of 26 PASS unique_stg_locations_location_id ................................. [PASS in 0.06s]
17:22:10  14 of 26 START test unique_stg_supplies_supply_uuid ............................ [RUN]
17:22:10  13 of 26 PASS not_null_stg_supplies_supply_uuid ................................ [PASS in 0.04s]
17:22:10  15 of 26 START test not_null_stg_orders_order_id ............................... [RUN]
17:22:10  11 of 26 PASS not_null_stg_order_items_order_item_id ........................... [PASS in 0.08s]
17:22:10  16 of 26 START test unique_stg_orders_order_id ................................. [RUN]
17:22:10  14 of 26 PASS unique_stg_supplies_supply_uuid .................................. [PASS in 0.04s]
17:22:10  12 of 26 PASS unique_stg_order_items_order_item_id ............................. [PASS in 0.13s]
17:22:11  15 of 26 PASS not_null_stg_orders_order_id ..................................... [PASS in 0.17s]
17:22:11  16 of 26 PASS unique_stg_orders_order_id ....................................... [PASS in 0.16s]
17:22:11  17 of 26 START sql incremental model main.orders_v1 ............................ [RUN]
17:22:11  18 of 26 START sql incremental model main.orders_v2 ............................ [RUN]
17:22:11  18 of 26 OK created sql incremental model main.orders_v2 ....................... [OK in 0.52s]
17:22:11  19 of 26 START test dbt_utils_expression_is_true_orders_v2_count_food_items_count_drink_items_count_items  [RUN]
17:22:11  20 of 26 START test dbt_utils_expression_is_true_orders_v2_subtotal_food_items_subtotal_drink_items_subtotal  [RUN]
17:22:11  21 of 26 START test not_null_orders_v2_order_id ................................ [RUN]
17:22:11  17 of 26 OK created sql incremental model main.orders_v1 ....................... [OK in 0.71s]
17:22:11  22 of 26 START test unique_orders_v2_order_id .................................. [RUN]
17:22:11  20 of 26 PASS dbt_utils_expression_is_true_orders_v2_subtotal_food_items_subtotal_drink_items_subtotal  [PASS in 0.20s]
17:22:11  21 of 26 PASS not_null_orders_v2_order_id ...................................... [PASS in 0.19s]
17:22:11  23 of 26 START test dbt_utils_expression_is_true_orders_v1_count_food_items_count_drink_items_count_items  [RUN]
17:22:11  24 of 26 START test dbt_utils_expression_is_true_orders_v1_subtotal_food_items_subtotal_drink_items_subtotal  [RUN]
17:22:11  22 of 26 PASS unique_orders_v2_order_id ........................................ [PASS in 0.05s]
17:22:11  19 of 26 PASS dbt_utils_expression_is_true_orders_v2_count_food_items_count_drink_items_count_items  [PASS in 0.25s]
17:22:11  24 of 26 PASS dbt_utils_expression_is_true_orders_v1_subtotal_food_items_subtotal_drink_items_subtotal  [PASS in 0.04s]
17:22:11  25 of 26 START test not_null_orders_v1_order_id ................................ [RUN]
17:22:11  26 of 26 START test unique_orders_v1_order_id .................................. [RUN]
17:22:11  25 of 26 PASS not_null_orders_v1_order_id ...................................... [PASS in 0.02s]
17:22:11  23 of 26 PASS dbt_utils_expression_is_true_orders_v1_count_food_items_count_drink_items_count_items  [PASS in 0.09s]
17:22:11  26 of 26 PASS unique_orders_v1_order_id ........................................ [PASS in 0.04s]
17:22:11  
17:22:11  Finished running 5 view models, 1 seed, 18 tests, 2 incremental models in 0 hours 0 minutes and 1.56 seconds (1.56s).
17:22:11  
17:22:11  Completed successfully
17:22:11  
17:22:11  Done. PASS=26 WARN=0 ERROR=0 SKIP=0 TOTAL=26
root@fe28740a0202:/tmp/dbt-loom/test_projects/revenue# cd ..
root@fe28740a0202:/tmp/dbt-loom/test_projects# cd customer_success/
root@fe28740a0202:/tmp/dbt-loom/test_projects/customer_success# dbt deps
17:22:18  Running with dbt=1.7.14
17:22:18  dbt-loom: Patching ref protection methods to support dbt-loom dependencies.
17:22:18  dbt-loom: Loading manifest for `revenue` from `file`
17:22:19  Installing dbt-labs/dbt_utils
17:22:19  Installed from version 1.0.0
17:22:19  Updated version available: 1.1.1
17:22:19  
17:22:19  Updates available for packages: ['dbt-labs/dbt_utils']                 
Update your versions in packages.yml, then run dbt deps
root@fe28740a0202:/tmp/dbt-loom/test_projects/customer_success# dbt build
17:22:23  Running with dbt=1.7.14
17:22:23  dbt-loom: Patching ref protection methods to support dbt-loom dependencies.
17:22:23  dbt-loom: Loading manifest for `revenue` from `file`
17:22:23  Registered adapter: duckdb=1.7.4
17:22:23  Unable to do partial parsing because saved manifest not found. Starting full parse.
17:22:24  dbt-loom: Injecting nodes
17:22:24  [WARNING]: Model orders.v1 has passed its deprecation date of 2024-01-01T00:00:00+00:00. This model should be disabled or removed.
17:22:24  Found 10 models, 5 tests, 1 source, 0 exposures, 0 metrics, 507 macros, 0 groups, 0 semantic models
17:22:24  
17:22:24  Concurrency: 4 threads (target='dev')
17:22:24  
17:22:24  1 of 7 START sql view model main.stg_customers ................................. [RUN]
17:22:24  1 of 7 OK created sql view model main.stg_customers ............................ [OK in 0.07s]
17:22:24  2 of 7 START test not_null_stg_customers_customer_id ........................... [RUN]
17:22:24  3 of 7 START test unique_stg_customers_customer_id ............................. [RUN]
17:22:24  3 of 7 PASS unique_stg_customers_customer_id ................................... [PASS in 0.04s]
17:22:24  2 of 7 PASS not_null_stg_customers_customer_id ................................. [PASS in 0.05s]
17:22:24  4 of 7 START sql table model main.customers .................................... [RUN]
17:22:24  4 of 7 OK created sql table model main.customers ............................... [OK in 0.06s]
17:22:24  5 of 7 START test accepted_values_customers_customer_type__new__returning ...... [RUN]
17:22:24  6 of 7 START test not_null_customers_customer_id ............................... [RUN]
17:22:24  7 of 7 START test unique_customers_customer_id ................................. [RUN]
17:22:24  6 of 7 PASS not_null_customers_customer_id ..................................... [PASS in 0.04s]
17:22:24  7 of 7 PASS unique_customers_customer_id ....................................... [PASS in 0.04s]
17:22:24  5 of 7 PASS accepted_values_customers_customer_type__new__returning ............ [PASS in 0.05s]
17:22:24  
17:22:24  Finished running 1 view model, 5 tests, 1 table model in 0 hours 0 minutes and 0.33 seconds (0.33s).
17:22:24  
17:22:24  Completed successfully
17:22:24  
17:22:24  Done. PASS=7 WARN=0 ERROR=0 SKIP=0 TOTAL=7
nicholasyager commented 4 months ago

Confirmation received from users that this resolves the previous version parsing defect in realistic project. Merging.