recce-nightly 1.8.0.20250615__py3-none-any.whl → 1.8.0.20250616__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of recce-nightly might be problematic. Click here for more details.

Files changed (74) hide show
  1. recce/VERSION +1 -1
  2. recce/adapter/dbt_adapter/__init__.py +15 -5
  3. recce/data/404.html +2 -2
  4. recce/data/_next/static/chunks/{1bff33f1-39d26ad38ba4fe06.js → 1bff33f1-1ef85cf5e658a751.js} +1 -1
  5. recce/data/_next/static/chunks/217-879a84d70f7a907c.js +2 -0
  6. recce/data/_next/static/chunks/29e3cc0d-60045b2e47aa3916.js +1 -0
  7. recce/data/_next/static/chunks/36e1c10d-35e36448f4f83961.js +1 -0
  8. recce/data/_next/static/chunks/{3998a672-0426e04aa28a4198.js → 3998a672-03adacad07b346ac.js} +1 -1
  9. recce/data/_next/static/chunks/{3a92ee20-146003bc9f4294f5.js → 3a92ee20-1081c360214f9602.js} +1 -1
  10. recce/data/_next/static/chunks/450c323b-fd94e7ffaa4a5efa.js +1 -0
  11. recce/data/_next/static/chunks/47d8844f-929aed9b1c73a905.js +1 -0
  12. recce/data/_next/static/chunks/608-3b079b544e5d5f5e.js +15 -0
  13. recce/data/_next/static/chunks/{6dc81886-e6963cc22929fc61.js → 6dc81886-adbfa45836061d79.js} +1 -1
  14. recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js +1 -0
  15. recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js +1 -0
  16. recce/data/_next/static/chunks/826-1fdc111c49b34b0f.js +43 -0
  17. recce/data/_next/static/chunks/{0d0b8943-1c8ef4728d0e645b.js → 86730205-cfb14e3f051bab35.js} +1 -1
  18. recce/data/_next/static/chunks/{8d700b6a.ebb3dd15a8cd3f2b.js → 8d700b6a.8bb140898499c512.js} +1 -1
  19. recce/data/_next/static/chunks/92-8753f5687183e400.js +1 -0
  20. recce/data/_next/static/chunks/960-49d66f0cbac6af8a.js +9 -0
  21. recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js +1 -0
  22. recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js +1 -0
  23. recce/data/_next/static/chunks/app/_not-found/{page-2ab757d7e27193ec.js → page-01ed58b7f971d311.js} +1 -1
  24. recce/data/_next/static/chunks/app/layout-af033601bf81ed53.js +1 -0
  25. recce/data/_next/static/chunks/app/page-848f2149d3c62dd1.js +1 -0
  26. recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js +1 -0
  27. recce/data/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js +1 -0
  28. recce/data/_next/static/chunks/c132bf7d-08cb668a789d6afd.js +1 -0
  29. recce/data/_next/static/chunks/ce84277d-2e5d1d46910cf052.js +1 -0
  30. recce/data/_next/static/chunks/{febdd86e-d96ff090bf0a928d.js → febdd86e-c6b525341634b860.js} +3 -3
  31. recce/data/_next/static/chunks/fee69bc6-2dbccaf9b90474e6.js +1 -0
  32. recce/data/_next/static/chunks/main-app-39061b0166c47f55.js +1 -0
  33. recce/data/_next/static/chunks/main-b5b3ae20a1405261.js +1 -0
  34. recce/data/_next/static/chunks/pages/_app-437c455677d62394.js +1 -0
  35. recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js +1 -0
  36. recce/data/_next/static/chunks/{webpack-c84693803e08b48b.js → webpack-7b49d5ba7e3a434d.js} +1 -1
  37. recce/data/_next/static/w18Z-hT6EIuYJQK1WQHit/_buildManifest.js +1 -0
  38. recce/data/index.html +2 -2
  39. recce/data/index.txt +6 -6
  40. recce/models/types.py +8 -2
  41. recce/util/lineage.py +55 -18
  42. {recce_nightly-1.8.0.20250615.dist-info → recce_nightly-1.8.0.20250616.dist-info}/METADATA +1 -1
  43. {recce_nightly-1.8.0.20250615.dist-info → recce_nightly-1.8.0.20250616.dist-info}/RECORD +49 -49
  44. tests/adapter/dbt_adapter/test_dbt_cll.py +21 -18
  45. recce/data/_next/static/chunks/184-dc0879f75e9506c3.js +0 -15
  46. recce/data/_next/static/chunks/249-aeaf2fd44b7d8946.js +0 -1
  47. recce/data/_next/static/chunks/29e3cc0d-e95ebef603672925.js +0 -1
  48. recce/data/_next/static/chunks/33-27f5a26fea26baf4.js +0 -43
  49. recce/data/_next/static/chunks/36e1c10d-6d59e8aae9eec8b4.js +0 -1
  50. recce/data/_next/static/chunks/42-3dc869b8f2a75e9c.js +0 -2
  51. recce/data/_next/static/chunks/450c323b-3dd665b028d8e184.js +0 -1
  52. recce/data/_next/static/chunks/47d8844f-57ea99282765dce5.js +0 -1
  53. recce/data/_next/static/chunks/627-1b5619ef0c492f2b.js +0 -9
  54. recce/data/_next/static/chunks/7a8a3e83-933490bb996ac49b.js +0 -1
  55. recce/data/_next/static/chunks/7f27ae6c-f6aa983aa05b83cd.js +0 -1
  56. recce/data/_next/static/chunks/9746af58-ac9a4d1b8160c197.js +0 -1
  57. recce/data/_next/static/chunks/a30376cd-2d324b6b8687d57b.js +0 -1
  58. recce/data/_next/static/chunks/app/layout-83da1e1a59dea607.js +0 -1
  59. recce/data/_next/static/chunks/app/page-3404ed4ba8cffb0b.js +0 -1
  60. recce/data/_next/static/chunks/b63b1b3f-a380b9fe5be938d3.js +0 -1
  61. recce/data/_next/static/chunks/bbda5537-10da060bd56d475e.js +0 -1
  62. recce/data/_next/static/chunks/c132bf7d-d6e713672e7030a1.js +0 -1
  63. recce/data/_next/static/chunks/ce84277d-7f0a33888bf731d9.js +0 -1
  64. recce/data/_next/static/chunks/fee69bc6-288939bd73e3e49c.js +0 -1
  65. recce/data/_next/static/chunks/main-0276cd0c41be4ef4.js +0 -1
  66. recce/data/_next/static/chunks/main-app-2e08b38d48f6a731.js +0 -1
  67. recce/data/_next/static/chunks/pages/_app-ddb94f741a61a490.js +0 -1
  68. recce/data/_next/static/chunks/pages/_error-9e738ac1fd923095.js +0 -1
  69. recce/data/_next/static/clUnQD2xUsy2WK43RKblq/_buildManifest.js +0 -1
  70. /recce/data/_next/static/{clUnQD2xUsy2WK43RKblq → w18Z-hT6EIuYJQK1WQHit}/_ssgManifest.js +0 -0
  71. {recce_nightly-1.8.0.20250615.dist-info → recce_nightly-1.8.0.20250616.dist-info}/WHEEL +0 -0
  72. {recce_nightly-1.8.0.20250615.dist-info → recce_nightly-1.8.0.20250616.dist-info}/entry_points.txt +0 -0
  73. {recce_nightly-1.8.0.20250615.dist-info → recce_nightly-1.8.0.20250616.dist-info}/licenses/LICENSE +0 -0
  74. {recce_nightly-1.8.0.20250615.dist-info → recce_nightly-1.8.0.20250616.dist-info}/top_level.txt +0 -0
recce/util/lineage.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from typing import Dict, Set, Tuple
2
2
 
3
- from recce.models.types import CllData
3
+ from recce.models.types import CllColumn, CllData, CllNode
4
4
 
5
5
 
6
6
  def find_upstream(node, parent_map):
@@ -44,6 +44,15 @@ def build_dependency_maps(cll_data: CllData) -> Tuple[Dict[str, Set], Dict[str,
44
44
  child_map = {}
45
45
 
46
46
  for node_id, node_data in cll_data.nodes.items():
47
+ for dep_node in node_data.depends_on.nodes:
48
+ if node_id not in parent_map:
49
+ parent_map[node_id] = set()
50
+ parent_map[node_id].add(dep_node)
51
+
52
+ if dep_node not in child_map:
53
+ child_map[dep_node] = set()
54
+ child_map[dep_node].add(node_id)
55
+
47
56
  for col_name, col_data in node_data.columns.items():
48
57
  current_col_id = f"{node_id}_{col_name}"
49
58
 
@@ -72,28 +81,56 @@ def build_dependency_maps(cll_data: CllData) -> Tuple[Dict[str, Set], Dict[str,
72
81
  return parent_map, child_map
73
82
 
74
83
 
75
- def find_column_dependencies(node_id: str, node_column_id: str, parent_map: Dict, child_map: Dict) -> Tuple[Set, Set]:
76
- upstream_cols = set()
77
- downstream_cols = set()
78
- upstream_cols.update(find_upstream(node_id, parent_map), find_upstream(node_column_id, parent_map))
79
- downstream_cols.update(find_downstream(node_id, child_map), find_downstream(node_column_id, child_map))
84
+ def build_lineage_vertices(cll_data: CllData) -> Tuple[Dict[str, CllNode], Dict[str, CllColumn]]:
85
+ lineage_nodes = {}
86
+ lineage_columns = {}
87
+
88
+ for cll_node_id, node in cll_data.nodes.items():
89
+ lineage_nodes[cll_node_id] = node.copy()
90
+
91
+ for name, cll_column in node.columns.items():
92
+ column_key = f"{cll_node_id}_{name}"
93
+ lineage_columns[column_key] = cll_column.copy()
94
+ lineage_columns[column_key].id = column_key
95
+ lineage_columns[column_key].table_id = cll_node_id
80
96
 
97
+ return lineage_nodes, lineage_columns
98
+
99
+
100
+ def find_column_dependencies(node_column_id: str, parent_map: Dict, child_map: Dict) -> Tuple[Set, Set]:
101
+ upstream_cols = find_upstream(node_column_id, parent_map)
102
+ downstream_cols = find_downstream(node_column_id, child_map)
81
103
  return upstream_cols, downstream_cols
82
104
 
83
105
 
84
- def filter_column_lineage(cll_data: CllData, relevant_columns: Set) -> CllData:
106
+ def filter_lineage_vertices(
107
+ lineage_nodes: Dict[str, CllNode], lineage_columns: Dict[str, CllColumn], relevant_columns: Set[str]
108
+ ) -> Tuple[Dict[str, CllNode], Dict[str, CllColumn]]:
109
+ nodes = {}
110
+ columns = {}
111
+
112
+ for node_id, node in lineage_nodes.items():
113
+ if node_id in relevant_columns:
114
+ nodes[node_id] = node
115
+
116
+ for col_id, column in lineage_columns.items():
117
+ if col_id in relevant_columns:
118
+ columns[col_id] = column
119
+
120
+ return nodes, columns
85
121
 
86
- for node_id, node_obj in cll_data.nodes.items():
87
- filtered_node_columns = {}
88
122
 
89
- for col_name, col_data in node_obj.columns.items():
90
- full_col_id = f"{node_id}_{col_name}"
91
- if full_col_id in relevant_columns:
92
- filtered_node_columns[col_name] = col_data
123
+ def filter_dependency_maps(
124
+ parent_map: Dict, child_map: Dict, relevant_columns: Set
125
+ ) -> Tuple[Dict[str, Set], Dict[str, Set]]:
126
+ p_map = {}
127
+ c_map = {}
128
+ for node_id, parents in parent_map.items():
129
+ if node_id in relevant_columns:
130
+ p_map[node_id] = {p for p in parents if p in relevant_columns}
93
131
 
94
- node_obj.columns = filtered_node_columns
95
- node_obj.depends_on.columns = [
96
- dep for dep in node_obj.depends_on.columns if f"{dep.node}_{dep.column}" in relevant_columns
97
- ]
132
+ for node_id, children in child_map.items():
133
+ if node_id in relevant_columns:
134
+ c_map[node_id] = {c for c in children if c in relevant_columns}
98
135
 
99
- return cll_data
136
+ return p_map, c_map
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: recce-nightly
3
- Version: 1.8.0.20250615
3
+ Version: 1.8.0.20250616
4
4
  Summary: Environment diff tool for dbt
5
5
  Home-page: https://github.com/InfuseAI/recce
6
6
  Author: InfuseAI Dev Team
@@ -1,4 +1,4 @@
1
- recce/VERSION,sha256=7IecPgA3NrCUcIa006n43Xzkir-0PnbXZfU3-vxCAc0,15
1
+ recce/VERSION,sha256=9dkXX-FVuaaLb-l7gsGR7BpZqa36AcBvoiWsBobLgzQ,15
2
2
  recce/__init__.py,sha256=yNb0QT-yoStex0VZALNJvUwtPLommoVCStcow31guqo,2392
3
3
  recce/artifact.py,sha256=tKQAHSrLRjiR3ppOI4sym8SxYiiLTuD3DPMYh4DWQdA,6506
4
4
  recce/cli.py,sha256=hNUy20Yk5e_iDv_gpCJ6LI5q3SzKZPAd3LQ-UNw1CcU,39725
@@ -16,54 +16,52 @@ recce/summary.py,sha256=Mbxvxr9KazR5o9icqhhjiGHsoAiWxQU4PdN7HytBJ1c,19154
16
16
  recce/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  recce/adapter/base.py,sha256=T_JNeLHgiHSaegw-DbrvHOaYjMyZcjj2Qtg5cWh_fco,3548
18
18
  recce/adapter/sqlmesh_adapter.py,sha256=IU3N-F6ToDoO7_bV5vsG8pmTuDcbFtewTIuCxedTaRM,5046
19
- recce/adapter/dbt_adapter/__init__.py,sha256=YZP9odKH2_wAQ1BAzp_QqMGemvyM9tYdKtkDuab7Yr0,55401
19
+ recce/adapter/dbt_adapter/__init__.py,sha256=vFNcoGBAw8_HSIVSePvtuLeNZKXOnRPnHny2iBllDWI,55819
20
20
  recce/adapter/dbt_adapter/dbt_version.py,sha256=M7aedZIWslXnJsryK8Ki4OL_t2oAKxy4uE2pRwfWIkk,1228
21
21
  recce/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  recce/apis/check_api.py,sha256=KMCXSMl1qqzx2jQgRqCrD4j_cY3EHBbM3H2-t-6saAU,6227
23
23
  recce/apis/check_func.py,sha256=gktbCcyk3WGvWRJJ-wDnwv7NrIny2nTHWLl1-kdiVRo,4183
24
24
  recce/apis/run_api.py,sha256=eOaxOxXDkH59uqGCd4blld7edavUx7JU_DCd2WAYrL8,3416
25
25
  recce/apis/run_func.py,sha256=6wC8TDU-h7TLr2VZH7HNsWaUVlQ9HBN5N_dwqfi4lMY,7440
26
- recce/data/404.html,sha256=LJv_Ln4ywc1yf-orq68PMUA20TB_Iwt2mbQED0IG42Q,26579
26
+ recce/data/404.html,sha256=iiz808LIOKVqjkk4O8y2lJXUqKspjHuCkG7p7Ml16Rg,26577
27
27
  recce/data/favicon.ico,sha256=B2mBumUOnzvUrXrqNkrc5QfdDXjzEXRcWkWur0fJ6sM,2565
28
- recce/data/index.html,sha256=yx9Po-NfO2ddQG9FmdfhO8SF8IQEcYvTHv2s93iQcQQ,42162
29
- recce/data/index.txt,sha256=KGPkwzrbBkZL3Rqy3lGbh5FNgDfGD_HFxUolpoJOuy8,4469
30
- recce/data/_next/static/chunks/0d0b8943-1c8ef4728d0e645b.js,sha256=wJfK5fVnS1kuhkU9mpzg9BPhdc2UUIOqqVchtaMU-PA,172837
31
- recce/data/_next/static/chunks/184-dc0879f75e9506c3.js,sha256=D60eEdD_Oqlk2CtuvIknSQOiJ1vNkZqVZ32HUdwnouw,97873
32
- recce/data/_next/static/chunks/1bff33f1-39d26ad38ba4fe06.js,sha256=ldwDhIDmr8JhhNm6xffwe0HEm4Xs4e9lDkwTWKxJW7E,153777
33
- recce/data/_next/static/chunks/249-aeaf2fd44b7d8946.js,sha256=v3k00CqJya4YSPVP3eLVLGn090jmPM-xJLHaq9sgdVM,72737
34
- recce/data/_next/static/chunks/29e3cc0d-e95ebef603672925.js,sha256=fMLYhtqIaY8Y-65IUcOuf8QzUOeAUnRMZYtyMjGMUi8,699
35
- recce/data/_next/static/chunks/33-27f5a26fea26baf4.js,sha256=021bnyupb0khZYiEeMFLCKqhv9UaD_jTHqNBDaZEDWI,318315
36
- recce/data/_next/static/chunks/36e1c10d-6d59e8aae9eec8b4.js,sha256=qaqfFeBs_fSPdy7XMT_g6ZS362JYCpn8hjvh4CD_NbU,7796
37
- recce/data/_next/static/chunks/3998a672-0426e04aa28a4198.js,sha256=lyHK4acPVxj-GJrdSgZZxaqvWcRfg9yC0zNjNqglAiE,9023
38
- recce/data/_next/static/chunks/3a92ee20-146003bc9f4294f5.js,sha256=HNoR4Pp3onvRGGztPprP9Mo6abFq03IE-dfDAUOcFcQ,177688
39
- recce/data/_next/static/chunks/42-3dc869b8f2a75e9c.js,sha256=Swc-KpLJQsFi4cPoVeXRQKXW8j7uqIv3rw4J4Z1z930,124111
40
- recce/data/_next/static/chunks/450c323b-3dd665b028d8e184.js,sha256=usaI26FZT18CUleDN83JouuucTe-kBVMg9y-CoAQfDI,2204
41
- recce/data/_next/static/chunks/47d8844f-57ea99282765dce5.js,sha256=ZBP3mKQm5mctHkIjt6cgvFk-Z_f7TveERLgLgb0Zrfc,696
42
- recce/data/_next/static/chunks/627-1b5619ef0c492f2b.js,sha256=fYfdqv6N2isEEF79USUsUZckuDbHbTrOGYBCc2IOAoY,1032342
43
- recce/data/_next/static/chunks/6dc81886-e6963cc22929fc61.js,sha256=USEm9yAWLQVic4O5MrSw_vp94e1Z0HUOkB0lIxLPz40,69733
44
- recce/data/_next/static/chunks/7a8a3e83-933490bb996ac49b.js,sha256=c73gEwdhLgIXNLLFnHKfyURi2wL-SKnD8-3voJilWnw,1648
45
- recce/data/_next/static/chunks/7f27ae6c-f6aa983aa05b83cd.js,sha256=EeGyzRHP1SMg45f08C_GkOICZaQz_olnhHdEsBxbqCc,778
46
- recce/data/_next/static/chunks/8d700b6a.ebb3dd15a8cd3f2b.js,sha256=kwUCVyEdI_dpwJ6TqjjMvv5bd3nJixHpk2wJPsTI044,119972
47
- recce/data/_next/static/chunks/9746af58-ac9a4d1b8160c197.js,sha256=QV1lcwNPwDPwLsM-cooCF2wr_Cp_pG7K4Ry1LvWhcPM,4176
48
- recce/data/_next/static/chunks/a30376cd-2d324b6b8687d57b.js,sha256=dH9sHqNXj7rNK-HuxWJ2FoTXWXTSy1Mw_mnv3-ftSsw,863
49
- recce/data/_next/static/chunks/b63b1b3f-a380b9fe5be938d3.js,sha256=cf7v4ob8f_rtz4-bWeyO6e5Px1j8-bYsr-spQD3Jd40,571
50
- recce/data/_next/static/chunks/bbda5537-10da060bd56d475e.js,sha256=BVXrVyAg9_ZkC81aZTtzrZPomnugTM86DhcSjb44ccg,81302
51
- recce/data/_next/static/chunks/c132bf7d-d6e713672e7030a1.js,sha256=HbBkA5h5WtWtdhCplPwlIjGFCwZnscm7IOs5khmcLiY,198537
52
- recce/data/_next/static/chunks/ce84277d-7f0a33888bf731d9.js,sha256=Ter45PzyhQO8CNpPO3_cVQPC1HxKK4xcyiUKPtmZFUQ,2561
53
- recce/data/_next/static/chunks/febdd86e-d96ff090bf0a928d.js,sha256=FVzg7y7YkF9zQQQkItYkIayqajqpMdCS0oENl1CdcIA,82989
54
- recce/data/_next/static/chunks/fee69bc6-288939bd73e3e49c.js,sha256=aVHqK-GHhnM1mqvF644SX9sw9BMM-PjpBi4JrVBEkeY,483
28
+ recce/data/index.html,sha256=Y_PDpRYIj2rF9xz-XePcJ7RVcI1X1H3ETPXuG7t2AJA,42160
29
+ recce/data/index.txt,sha256=AXvCWDcPPBAjnlFF7w-6OgJjg3Zq-Mij3rNV01rrSeo,4466
30
+ recce/data/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js,sha256=wTH-_PbE1XdP-wmGaQStF5y2yH6XcZXeYX_hDaGMfh4,153777
31
+ recce/data/_next/static/chunks/217-879a84d70f7a907c.js,sha256=kNJkLcwaIlWnQY7akbrFimbcHHdK6lMVTbTYCNKXIjc,124102
32
+ recce/data/_next/static/chunks/29e3cc0d-60045b2e47aa3916.js,sha256=2MNGdoQ0DUmEJz-JdcgJVIPDdaVHp2963E0luqJ-TTE,700
33
+ recce/data/_next/static/chunks/36e1c10d-35e36448f4f83961.js,sha256=c1opscOEnObn5EMLvhl4Z__wL2-4ALEuKIhZSJK4YT0,7797
34
+ recce/data/_next/static/chunks/3998a672-03adacad07b346ac.js,sha256=yIo9J3TT-1rQQISuIbB_ZYdI952YiOazkpiXxkza6tI,9023
35
+ recce/data/_next/static/chunks/3a92ee20-1081c360214f9602.js,sha256=-XiclPOo-Au8pcnledxOGxajRoYoJ-4rtBdJ7kHZNN8,177688
36
+ recce/data/_next/static/chunks/450c323b-fd94e7ffaa4a5efa.js,sha256=9msncqWrh8MQrmXLZEA9W2_5WZP4Fmvlaw9Vrv737XI,2205
37
+ recce/data/_next/static/chunks/47d8844f-929aed9b1c73a905.js,sha256=VIKCVeheQGrNsNkyF6agc_38Yess4KJsFJz8Vbe598U,697
38
+ recce/data/_next/static/chunks/608-3b079b544e5d5f5e.js,sha256=uvQzpIdvupXx_k2aIX4C-KfP4QEXqlbHuP6XNQVK-0s,97872
39
+ recce/data/_next/static/chunks/6dc81886-adbfa45836061d79.js,sha256=9X1H0RjERGExNdWSzbslObd050Iwd8bqTJQuuGW6wq4,69733
40
+ recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js,sha256=NfgBK9op5SzWm4Ehg1xI-_HChQuqosdklsifGTNH-rE,1649
41
+ recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js,sha256=ewMLioJbTUUDeqV0J9NDKE0Bj-XCFg8QqMLOmLPgpcc,777
42
+ recce/data/_next/static/chunks/826-1fdc111c49b34b0f.js,sha256=tCBVOyBAFUDLd9iv1xyTk3hDGMSvkbtHAnaHizxp27s,318338
43
+ recce/data/_next/static/chunks/86730205-cfb14e3f051bab35.js,sha256=qKkzgWsNqSrn-PUGBloZopIlacGCy8hH0BZA9tpqQoQ,172837
44
+ recce/data/_next/static/chunks/8d700b6a.8bb140898499c512.js,sha256=NPGWvqv8Y_rbNaKxYnoq16mi6FDoQHxOOjpH4tJnUkE,119972
45
+ recce/data/_next/static/chunks/92-8753f5687183e400.js,sha256=5JAmaRE0mZicKWm-oR2AaR51AL4L4-MctSqZrdFbY-s,72758
46
+ recce/data/_next/static/chunks/960-49d66f0cbac6af8a.js,sha256=oFMSQdXW5b9pXz_QcTAZ8JWgSYcI9Ac3VjeDlSSEYD0,1032469
47
+ recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js,sha256=lV-V6BYpd4HEt-pFtT03G6qQD2Wa-2L_jp6aH9VgoeM,4177
48
+ recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js,sha256=qzgyjrX5PdPKGeSwb-Gh0RfM_NEF2zjMvMK14ixq228,864
49
+ recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js,sha256=s2EZ59zDBJDmy2kh0cHkQ_pAWxiQr_yCPlnttCj0x_k,572
50
+ recce/data/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js,sha256=jB7gyvrur-GMqD3Yi2X6jiFfFGCb0_zYyxJJXrh3mpw,81301
51
+ recce/data/_next/static/chunks/c132bf7d-08cb668a789d6afd.js,sha256=bvbKe0denpFS_bPYD58ip9TE5OSooIZNrog39AWjf_I,198536
52
+ recce/data/_next/static/chunks/ce84277d-2e5d1d46910cf052.js,sha256=uv79hdbY7j79k4hQQDiz9OAML-RqZRj8N3-SBFV17-k,2562
53
+ recce/data/_next/static/chunks/febdd86e-c6b525341634b860.js,sha256=DYG6gZ6Ia5VLZRGYgJHZz28_Eie9eyIctRcmGBQuVTY,82988
54
+ recce/data/_next/static/chunks/fee69bc6-2dbccaf9b90474e6.js,sha256=kN9jpjqnvfPqP_00RVf0CdWLTGnU1HEAYxjPuXca_Pk,484
55
55
  recce/data/_next/static/chunks/framework-ded83d71b51ce901.js,sha256=0Xsxxnmw5fjRHz8ni6vlaF9tQjfjNGZcZv2oMy7A_T4,140000
56
- recce/data/_next/static/chunks/main-0276cd0c41be4ef4.js,sha256=yYylI8WZkb7-WlJiDWA69arnflnMoGujcHOiyVlPQ6A,116699
57
- recce/data/_next/static/chunks/main-app-2e08b38d48f6a731.js,sha256=47lP340M-JgQlFo11BlranOv2uvmXZmI31aHp4qDSKo,471
56
+ recce/data/_next/static/chunks/main-app-39061b0166c47f55.js,sha256=NE6gZMaxmkLWS-unRTaSJm_1GGGb5ld-TP7UQMot2TY,471
57
+ recce/data/_next/static/chunks/main-b5b3ae20a1405261.js,sha256=28hJH2VsiTdxZGZrQsyRO-YBwfgJArUHYGGuy7ZAD7s,116715
58
58
  recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
59
- recce/data/_next/static/chunks/webpack-c84693803e08b48b.js,sha256=Dx_RNi9iE-d0yqI7gDLVTB2V5-_ks0gwNHxe_TCxTws,3927
60
- recce/data/_next/static/chunks/app/layout-83da1e1a59dea607.js,sha256=yPuKDmW2hynBXPfGl7xpq7H4ZOBQo1gLFFmR-Cdj5o8,1730
61
- recce/data/_next/static/chunks/app/page-3404ed4ba8cffb0b.js,sha256=ok6bYpSlaNPYCUMDWEq2zCGWZO-fp5B1xgfXNauM6eg,162614
62
- recce/data/_next/static/chunks/app/_not-found/page-2ab757d7e27193ec.js,sha256=RVYek09PLFETVLlmOwsUytWhwqXTtx9_-FgPjXFoKEg,1750
63
- recce/data/_next/static/chunks/pages/_app-ddb94f741a61a490.js,sha256=sdivRkiwP7Bf9PFMifsTBtl-NEjsdw7NpZLhVmcz7_g,284
64
- recce/data/_next/static/chunks/pages/_error-9e738ac1fd923095.js,sha256=kG9SrMKWvc7Zab2qq-836dxyQ99IzsywmSR8NdB8DcY,249
65
- recce/data/_next/static/clUnQD2xUsy2WK43RKblq/_buildManifest.js,sha256=RtyFkoNcorOw40S27S4Dvq7EWYCPgIlcyfK1fypRxkY,224
66
- recce/data/_next/static/clUnQD2xUsy2WK43RKblq/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
59
+ recce/data/_next/static/chunks/webpack-7b49d5ba7e3a434d.js,sha256=lcK59Juk4EZqi3jIsY35lQqAlB5TLTPy-neri0BIZL0,3929
60
+ recce/data/_next/static/chunks/app/layout-af033601bf81ed53.js,sha256=oPbgXJeb1DX635Agej8yYBLrKfxBMUJ5eFfAW25mO2k,1732
61
+ recce/data/_next/static/chunks/app/page-848f2149d3c62dd1.js,sha256=j2CnUS6zw8JOPHbnk1xbYwbCtS6LPoznNNr43IXLJvs,162615
62
+ recce/data/_next/static/chunks/app/_not-found/page-01ed58b7f971d311.js,sha256=_l3JSAaIJxInWqyqdDsobkhJ3JP6DZuwXkw-MsRakQA,1751
63
+ recce/data/_next/static/chunks/pages/_app-437c455677d62394.js,sha256=FaxURD1wuAmnMU1zJlsQKT9rRdfuspR7yx7BckcoCLY,284
64
+ recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js,sha256=0Vzx_hCqw4RcptsFzHfUigpI13sToBnFw38owTP7ruo,250
67
65
  recce/data/_next/static/css/17a96168e3a9db13.css,sha256=aojwuNbF38RSCVYal2iL4Qkz6jsO0FNEs6qfeYwXY5k,1205
68
66
  recce/data/_next/static/css/1b121dc4d36aeb4d.css,sha256=fJcUlx0zOECmST2uFkAB-VzBrp53E-5KEShUcnO16aE,7949
69
67
  recce/data/_next/static/css/35c6679a098e1e34.css,sha256=VaNEUFJj9NKOihehwlAgzdPRbmww7bi0xKh8hRfxhn0,12706
@@ -79,6 +77,8 @@ recce/data/_next/static/media/montserrat-latin-ext-800-normal.2e5381b2.woff,sha2
79
77
  recce/data/_next/static/media/montserrat-vietnamese-800-normal.20c545e6.woff,sha256=U5YlWNp5ytuS5tfT8Tt07U5xG3Qs0b2ze6vPx2KKG4s,7328
80
78
  recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2,sha256=bnmP7vEVe-4gLSDBsmKqD-SATv6-Pg-pxnTpSj7BCeI,7948
81
79
  recce/data/_next/static/media/reload-image.79aabb7d.svg,sha256=l-jdOsD0OBCpFrVYh1ubO8oajafPuPNs6MYnbanO7K0,840
80
+ recce/data/_next/static/w18Z-hT6EIuYJQK1WQHit/_buildManifest.js,sha256=sjy6FmOqWlkXWmod2oXwqKv7L582_MTycs9THCE6G-c,224
81
+ recce/data/_next/static/w18Z-hT6EIuYJQK1WQHit/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
82
82
  recce/data/imgs/reload-image.svg,sha256=l-jdOsD0OBCpFrVYh1ubO8oajafPuPNs6MYnbanO7K0,840
83
83
  recce/data/imgs/feedback/thumbs-down.png,sha256=q9KVIbaZku1TWkYHuleYlO-b6HsTApYh3St5xNHMGMg,10695
84
84
  recce/data/imgs/feedback/thumbs-up.png,sha256=VF3BH8bmYEqcSsMDJO57xMqW4t6crCXUXaMlOPgI_OE,10556
@@ -91,7 +91,7 @@ recce/event/track.py,sha256=xDyDWblhR6mp0tezEYhkA0aOyZLqXBpJyHZwhI2xhU8,4803
91
91
  recce/models/__init__.py,sha256=F7cgALtdWnwv37R0eEgKZ_yBsMwxWnUfo3jAZ3u6qyU,209
92
92
  recce/models/check.py,sha256=jjR1SGyczjrqyK-0Zas6ikLIGSgVp54lvfcQA19AniI,1588
93
93
  recce/models/run.py,sha256=QK2gvOWvko9YYhd2NLs3BPt5l4MSCZGwpzTAiqx9zJw,1161
94
- recce/models/types.py,sha256=ljRKqaTMpKD9gi_8NnVFvtR2XNOBiQy5PgRbdnnfKiQ,4253
94
+ recce/models/types.py,sha256=LVIHjVjxz7O6KijrcBBqgTUnZeVaz-zb0zWKYH2Sw2U,4599
95
95
  recce/tasks/__init__.py,sha256=b553AtDHjYROgmMePv_Hv_X3fjh4iEn11gzzpUJz6_o,610
96
96
  recce/tasks/core.py,sha256=JFYa1CfgOiRPQ7KVTwMuxJjhMB-pvCwB-xezVt-h3RU,4080
97
97
  recce/tasks/dataframe.py,sha256=03UBWwt0DFTXlaEOtnV5i_mxdRKD7UbRayewEL2Ub48,3650
@@ -109,13 +109,13 @@ recce/util/breaking.py,sha256=evT-xlDWMgIbuPQH6w5yNoDjOqopKzBXnCF9_xTn1S0,12591
109
109
  recce/util/cache.py,sha256=QB6wzxe0M3jNTwP0M27Ys8F2hF-oda4-LyXXG9THuZQ,646
110
110
  recce/util/cll.py,sha256=VXhtyoPIcPEW3_SmNUTbZWwOmmv8_JRfAB9CLJ4S2Wg,13315
111
111
  recce/util/io.py,sha256=fNiIafNxPlTF6NNXlugzeJjfVGGrP3RXb39ERzRWD3Q,3459
112
- recce/util/lineage.py,sha256=XQy6dE-9qzmcTLoPqqx5YyyVRS0wNFCNmeIGMh7MlsE,2962
112
+ recce/util/lineage.py,sha256=5vrYjg1POl9RfPbQKx8qj5E8nmYLR7pE_MvN0m1HGG8,4125
113
113
  recce/util/logger.py,sha256=6UgLFkRiur9jJfu2ZRdo4LUvMw4f75V-l-1HT1-sgKo,747
114
114
  recce/util/pydantic_model.py,sha256=KumKuyCjbTzEMsKLE4-b-eZfp0gLhYDdmVtw1-hxiJw,587
115
115
  recce/util/recce_cloud.py,sha256=g7uhWkknR9ulTuGxaz14erOGiUwIv3q3C0mfCEG3gl8,7925
116
116
  recce/util/singleton.py,sha256=1cU99I0f9tjuMQLMJyLsK1oK3fZJMsO5-TbRHAMXqds,627
117
117
  recce/yaml/__init__.py,sha256=EgXYlFeJZchatUClRDXbIC5Oqb2_nBvB2NqItYVihio,1292
118
- recce_nightly-1.8.0.20250615.dist-info/licenses/LICENSE,sha256=CQjjMy9aYPhfe8xG_bcpIfKtNkdxLZ5IOb8oPygtUhY,11343
118
+ recce_nightly-1.8.0.20250616.dist-info/licenses/LICENSE,sha256=CQjjMy9aYPhfe8xG_bcpIfKtNkdxLZ5IOb8oPygtUhY,11343
119
119
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
120
  tests/test_cli.py,sha256=_ikuZW4bYEGyj5A_V7nDSyBa1tVZqc0TVm-TJ0rEYVo,5467
121
121
  tests/test_config.py,sha256=ODDFe_XF6gphmSmmc422dGLBaCCmG-IjDzTkD5SJsJE,1557
@@ -130,7 +130,7 @@ tests/adapter/dbt_adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
130
130
  tests/adapter/dbt_adapter/conftest.py,sha256=WlMVytJcyfLJlMBeYhpk8Q-nyCDR9x_7qgsy6Uh9ECw,386
131
131
  tests/adapter/dbt_adapter/dbt_test_helper.py,sha256=o_7m0cnVeGwPwEFXBCx3Me5QqLzQMOBR3dXD-MS2eaM,10406
132
132
  tests/adapter/dbt_adapter/test_dbt_adapter.py,sha256=Y5TSlqkXGjJC6hC7YYs45bnRht5aou_KLjPMjpAGxNM,830
133
- tests/adapter/dbt_adapter/test_dbt_cll.py,sha256=nJySbczrcr7Gbq4wGwC-HCYzOXybukeNc1JjOmKWY7E,9191
133
+ tests/adapter/dbt_adapter/test_dbt_cll.py,sha256=7MZN4GYVsFrI2UxIBtFL67nXCzBnl7q1v3E12dvyPLY,9311
134
134
  tests/adapter/dbt_adapter/test_selector.py,sha256=uKFm0QxrxG-xyUEXGobCMueCRUssgnZMyo-S1Nlk3_s,6856
135
135
  tests/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
136
  tests/tasks/conftest.py,sha256=lyZFx4jEY3To3xVhfMQ-G45egYOCttKN2lxeyExACkY,157
@@ -143,8 +143,8 @@ tests/tasks/test_row_count.py,sha256=21PaP2aq-x8-pqwzWHRT1sixhQ8g3CQNRWOZTTmbK0s
143
143
  tests/tasks/test_schema.py,sha256=7ds4Vx8ixaiIWDR49Lvjem4xlPkRP1cXazDRY3roUak,3121
144
144
  tests/tasks/test_top_k.py,sha256=YR_GS__DJsbDlQVaEEdJvNQ3fh1VmV5Nb3G7lb0r6YM,1779
145
145
  tests/tasks/test_valuediff.py,sha256=_xQJGgxsXoy2NYk_Z6Hsw2FlVh6zk2nN_iUueyRN1e8,2046
146
- recce_nightly-1.8.0.20250615.dist-info/METADATA,sha256=EJGVmxmQ7wrrF3vbj-rHuh5m1HlvLd5N6MMOMfA-sj8,9397
147
- recce_nightly-1.8.0.20250615.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
148
- recce_nightly-1.8.0.20250615.dist-info/entry_points.txt,sha256=oqoY_IiwIqXbgrIsPnlqUqao2eiIeP2dprowkOlmeyg,40
149
- recce_nightly-1.8.0.20250615.dist-info/top_level.txt,sha256=6PKGVpf75idP0C6KEaldDzzZUauIxNu1ZDstau1pI4I,12
150
- recce_nightly-1.8.0.20250615.dist-info/RECORD,,
146
+ recce_nightly-1.8.0.20250616.dist-info/METADATA,sha256=-eUc6I4ecnXjCJCVtfNe6iv66Ex57U8Nzl59PpN2p6U,9397
147
+ recce_nightly-1.8.0.20250616.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
148
+ recce_nightly-1.8.0.20250616.dist-info/entry_points.txt,sha256=oqoY_IiwIqXbgrIsPnlqUqao2eiIeP2dprowkOlmeyg,40
149
+ recce_nightly-1.8.0.20250616.dist-info/top_level.txt,sha256=6PKGVpf75idP0C6KEaldDzzZUauIxNu1ZDstau1pI4I,12
150
+ recce_nightly-1.8.0.20250616.dist-info/RECORD,,
@@ -186,6 +186,21 @@ def test_model_without_catalog(dbt_test_helper):
186
186
  assert not result.nodes["model1"].columns
187
187
 
188
188
 
189
+ def assert_lineage_model(cll_data: CllData, nodes):
190
+ assert len(nodes) == len(cll_data.lineage_nodes), "Model count mismatch"
191
+ for node in nodes:
192
+ assert node in cll_data.lineage_nodes, f"Model {node} not found in lineage"
193
+
194
+
195
+ def assert_lineage_column(cll_data: CllData, columns):
196
+ assert len(columns) == len(cll_data.lineage_columns), "Column count mismatch"
197
+ for column in columns:
198
+ column_key = f"{column[0]}_{column[1]}"
199
+ assert column_key in cll_data.lineage_columns, f"Column {column} not found in lineage"
200
+ assert column[0] == cll_data.lineage_columns[column_key].table_id, f"Column {column[0]} node mismatch"
201
+ assert column[1] == cll_data.lineage_columns[column_key].name, f"Column {column[1]} name mismatch"
202
+
203
+
189
204
  def test_cll_column_filter(dbt_test_helper):
190
205
  dbt_test_helper.create_model(
191
206
  "model1", unique_id="model.model1", curr_sql="select 1 as c", curr_columns={"c": "int"}
@@ -215,25 +230,13 @@ def test_cll_column_filter(dbt_test_helper):
215
230
  adapter: DbtAdapter = dbt_test_helper.context.adapter
216
231
 
217
232
  result = adapter.get_cll("model.model2", "c")
218
- assert_model(result, "model.model2", [])
219
- assert_column(result, "model.model2", "c", "passthrough", [("model.model1", "c")])
220
- assert_model(result, "model.model4", [])
221
- assert result.nodes.get("model.model4").columns == {}
222
-
223
- result = adapter.get_cll("model.model3", "y")
224
- assert_model(result, "model.model3", [("model.model2", "y")])
225
- assert result.nodes.get("model.model1").columns == {}
226
- assert len(result.nodes.get("model.model2").columns) == 1
233
+ assert_lineage_model(result, [])
234
+ assert_lineage_column(result, [("model.model1", "c"), ("model.model2", "c"), ("model.model3", "c")])
227
235
 
228
236
  result = adapter.get_cll("model.model2", "y")
229
- assert_model(result, "model.model3", [("model.model2", "y")])
230
- assert result.nodes.get("model.model3").columns == {}
231
- assert result.nodes.get("model.model1").columns == {}
232
- assert len(result.nodes.get("model.model2").columns) == 1
237
+ assert_lineage_model(result, ["model.model3"])
238
+ assert_lineage_column(result, [("model.model2", "y"), ("model.model4", "y")])
233
239
 
234
240
  result = adapter.get_cll("model.model3", "c")
235
- assert_model(result, "model.model3", [("model.model2", "y")])
236
- assert_column(result, "model.model3", "c", "passthrough", [("model.model2", "c")])
237
- assert_model(result, "model.model2", [])
238
- assert_column(result, "model.model2", "c", "passthrough", [("model.model1", "c")])
239
- assert_column(result, "model.model1", "c", "source", [])
241
+ assert_lineage_model(result, [])
242
+ assert_lineage_column(result, [("model.model1", "c"), ("model.model2", "c"), ("model.model3", "c")])