recce-nightly 1.2.0.20250506__py3-none-any.whl → 1.26.0.20251124__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 (213) hide show
  1. recce/VERSION +1 -1
  2. recce/__init__.py +27 -22
  3. recce/adapter/base.py +11 -14
  4. recce/adapter/dbt_adapter/__init__.py +810 -480
  5. recce/adapter/dbt_adapter/dbt_version.py +3 -0
  6. recce/adapter/sqlmesh_adapter.py +24 -35
  7. recce/apis/check_api.py +39 -28
  8. recce/apis/check_func.py +33 -27
  9. recce/apis/run_api.py +25 -19
  10. recce/apis/run_func.py +29 -23
  11. recce/artifact.py +119 -51
  12. recce/cli.py +1299 -323
  13. recce/config.py +42 -33
  14. recce/connect_to_cloud.py +138 -0
  15. recce/core.py +55 -47
  16. recce/data/404.html +1 -1
  17. recce/data/__next.__PAGE__.txt +10 -0
  18. recce/data/__next._full.txt +23 -0
  19. recce/data/__next._head.txt +8 -0
  20. recce/data/__next._index.txt +8 -0
  21. recce/data/__next._tree.txt +5 -0
  22. recce/data/_next/static/52aV_JrNUZU6dMFgvTQEO/_buildManifest.js +11 -0
  23. recce/data/_next/static/52aV_JrNUZU6dMFgvTQEO/_clientMiddlewareManifest.json +1 -0
  24. recce/data/_next/static/chunks/02b996c7f6a29a06.js +4 -0
  25. recce/data/_next/static/chunks/19c10d219a6a21ff.js +1 -0
  26. recce/data/_next/static/chunks/2df9ec28a061971d.js +11 -0
  27. recce/data/_next/static/chunks/3098c987393bda15.js +1 -0
  28. recce/data/_next/static/chunks/393dc43e483f717a.css +2 -0
  29. recce/data/_next/static/chunks/399e8d91a7e45073.js +2 -0
  30. recce/data/_next/static/chunks/4d0186f631230245.js +1 -0
  31. recce/data/_next/static/chunks/5794ba9e10a9c060.js +11 -0
  32. recce/data/_next/static/chunks/715761c929a3f28b.js +110 -0
  33. recce/data/_next/static/chunks/71f88fcc615bf282.js +1 -0
  34. recce/data/_next/static/chunks/80d2a95eaf1201ea.js +1 -0
  35. recce/data/_next/static/chunks/9979c6109bbbee35.js +1 -0
  36. recce/data/_next/static/chunks/99d638224186c118.js +1 -0
  37. recce/data/_next/static/chunks/d003eb36240e92f3.js +1 -0
  38. recce/data/_next/static/chunks/d3167cdfec4fc351.js +1 -0
  39. recce/data/_next/static/chunks/e124bccf574a3361.css +1 -0
  40. recce/data/_next/static/chunks/f40141db1bdb46f0.css +6 -0
  41. recce/data/_next/static/chunks/fcc53a88741a52f9.js +1 -0
  42. recce/data/_next/static/chunks/turbopack-b1920d28cfb1f28d.js +3 -0
  43. recce/data/_next/static/media/favicon.a8d38d84.ico +0 -0
  44. recce/data/_next/static/media/montserrat-cyrillic-800-normal.d80d830d.woff2 +0 -0
  45. recce/data/_next/static/media/montserrat-cyrillic-800-normal.f9d58125.woff +0 -0
  46. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2 +0 -0
  47. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.a4fa76b5.woff +0 -0
  48. recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2 +0 -0
  49. recce/data/_next/static/media/montserrat-latin-800-normal.d5761935.woff +0 -0
  50. recce/data/_next/static/media/montserrat-latin-ext-800-normal.40ec0659.woff2 +0 -0
  51. recce/data/_next/static/media/montserrat-latin-ext-800-normal.b671449b.woff +0 -0
  52. recce/data/_next/static/media/montserrat-vietnamese-800-normal.9f7b8541.woff +0 -0
  53. recce/data/_next/static/media/montserrat-vietnamese-800-normal.f9eb854e.woff2 +0 -0
  54. recce/data/_next/static/media/reload-image.7aa931c7.svg +4 -0
  55. recce/data/_not-found/__next._full.txt +17 -0
  56. recce/data/_not-found/__next._head.txt +8 -0
  57. recce/data/_not-found/__next._index.txt +8 -0
  58. recce/data/_not-found/__next._not-found.__PAGE__.txt +5 -0
  59. recce/data/_not-found/__next._not-found.txt +4 -0
  60. recce/data/_not-found/__next._tree.txt +3 -0
  61. recce/data/_not-found.html +1 -0
  62. recce/data/_not-found.txt +17 -0
  63. recce/data/auth_callback.html +68 -0
  64. recce/data/imgs/reload-image.svg +4 -0
  65. recce/data/index.html +1 -27
  66. recce/data/index.txt +23 -7
  67. recce/diff.py +6 -12
  68. recce/event/__init__.py +86 -74
  69. recce/event/collector.py +33 -22
  70. recce/event/track.py +49 -27
  71. recce/exceptions.py +1 -1
  72. recce/git.py +7 -7
  73. recce/github.py +57 -53
  74. recce/mcp_server.py +716 -0
  75. recce/models/__init__.py +4 -1
  76. recce/models/check.py +6 -7
  77. recce/models/run.py +1 -0
  78. recce/models/types.py +131 -28
  79. recce/pull_request.py +27 -25
  80. recce/run.py +165 -121
  81. recce/server.py +303 -111
  82. recce/state/__init__.py +31 -0
  83. recce/state/cloud.py +632 -0
  84. recce/state/const.py +26 -0
  85. recce/state/local.py +56 -0
  86. recce/state/state.py +119 -0
  87. recce/state/state_loader.py +174 -0
  88. recce/summary.py +188 -143
  89. recce/tasks/__init__.py +19 -3
  90. recce/tasks/core.py +11 -13
  91. recce/tasks/dataframe.py +82 -18
  92. recce/tasks/histogram.py +69 -34
  93. recce/tasks/lineage.py +2 -2
  94. recce/tasks/profile.py +152 -86
  95. recce/tasks/query.py +139 -87
  96. recce/tasks/rowcount.py +37 -31
  97. recce/tasks/schema.py +18 -15
  98. recce/tasks/top_k.py +35 -35
  99. recce/tasks/valuediff.py +216 -152
  100. recce/util/__init__.py +3 -0
  101. recce/util/api_token.py +80 -0
  102. recce/util/breaking.py +87 -85
  103. recce/util/cll.py +274 -219
  104. recce/util/io.py +22 -17
  105. recce/util/lineage.py +65 -16
  106. recce/util/logger.py +1 -1
  107. recce/util/onboarding_state.py +45 -0
  108. recce/util/perf_tracking.py +85 -0
  109. recce/util/recce_cloud.py +322 -72
  110. recce/util/singleton.py +4 -4
  111. recce/yaml/__init__.py +7 -10
  112. recce_cloud/__init__.py +24 -0
  113. recce_cloud/api/__init__.py +17 -0
  114. recce_cloud/api/base.py +111 -0
  115. recce_cloud/api/client.py +150 -0
  116. recce_cloud/api/exceptions.py +26 -0
  117. recce_cloud/api/factory.py +63 -0
  118. recce_cloud/api/github.py +76 -0
  119. recce_cloud/api/gitlab.py +82 -0
  120. recce_cloud/artifact.py +57 -0
  121. recce_cloud/ci_providers/__init__.py +9 -0
  122. recce_cloud/ci_providers/base.py +82 -0
  123. recce_cloud/ci_providers/detector.py +147 -0
  124. recce_cloud/ci_providers/github_actions.py +136 -0
  125. recce_cloud/ci_providers/gitlab_ci.py +130 -0
  126. recce_cloud/cli.py +245 -0
  127. recce_cloud/upload.py +214 -0
  128. {recce_nightly-1.2.0.20250506.dist-info → recce_nightly-1.26.0.20251124.dist-info}/METADATA +68 -37
  129. recce_nightly-1.26.0.20251124.dist-info/RECORD +180 -0
  130. {recce_nightly-1.2.0.20250506.dist-info → recce_nightly-1.26.0.20251124.dist-info}/WHEEL +1 -1
  131. {recce_nightly-1.2.0.20250506.dist-info → recce_nightly-1.26.0.20251124.dist-info}/top_level.txt +1 -0
  132. tests/adapter/dbt_adapter/conftest.py +9 -5
  133. tests/adapter/dbt_adapter/dbt_test_helper.py +37 -22
  134. tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -15
  135. tests/adapter/dbt_adapter/test_dbt_cll.py +656 -41
  136. tests/adapter/dbt_adapter/test_selector.py +22 -21
  137. tests/recce_cloud/__init__.py +0 -0
  138. tests/recce_cloud/test_ci_providers.py +351 -0
  139. tests/recce_cloud/test_cli.py +372 -0
  140. tests/recce_cloud/test_client.py +273 -0
  141. tests/recce_cloud/test_platform_clients.py +333 -0
  142. tests/tasks/conftest.py +1 -1
  143. tests/tasks/test_histogram.py +58 -66
  144. tests/tasks/test_lineage.py +36 -23
  145. tests/tasks/test_preset_checks.py +45 -31
  146. tests/tasks/test_profile.py +339 -15
  147. tests/tasks/test_query.py +46 -46
  148. tests/tasks/test_row_count.py +65 -46
  149. tests/tasks/test_schema.py +65 -42
  150. tests/tasks/test_top_k.py +22 -18
  151. tests/tasks/test_valuediff.py +43 -32
  152. tests/test_cli.py +174 -60
  153. tests/test_cli_mcp_optional.py +45 -0
  154. tests/test_cloud_listing_cli.py +324 -0
  155. tests/test_config.py +7 -9
  156. tests/test_connect_to_cloud.py +82 -0
  157. tests/test_core.py +151 -4
  158. tests/test_dbt.py +7 -7
  159. tests/test_mcp_server.py +332 -0
  160. tests/test_pull_request.py +1 -1
  161. tests/test_server.py +25 -19
  162. tests/test_summary.py +29 -17
  163. recce/data/_next/static/Kcbs3GEIyH2LxgLYat0es/_buildManifest.js +0 -1
  164. recce/data/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js +0 -1
  165. recce/data/_next/static/chunks/29e3cc0d-8c150e37dff9631b.js +0 -1
  166. recce/data/_next/static/chunks/368-7587b306577df275.js +0 -65
  167. recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js +0 -1
  168. recce/data/_next/static/chunks/3998a672-eaad84bdd88cc73e.js +0 -1
  169. recce/data/_next/static/chunks/3a92ee20-3b5d922d4157af5e.js +0 -1
  170. recce/data/_next/static/chunks/450c323b-1bb5db526e54435a.js +0 -1
  171. recce/data/_next/static/chunks/47d8844f-79a1b53c66a7d7ec.js +0 -1
  172. recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js +0 -1
  173. recce/data/_next/static/chunks/6ef81909-694dc38134099299.js +0 -1
  174. recce/data/_next/static/chunks/700-3b65fc3666820d00.js +0 -2
  175. recce/data/_next/static/chunks/7a8a3e83-d7fa409d97b38b2b.js +0 -1
  176. recce/data/_next/static/chunks/7f27ae6c-413f6b869a04183a.js +0 -1
  177. recce/data/_next/static/chunks/8d700b6a-f0b1f6b9e0d97ce2.js +0 -1
  178. recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js +0 -1
  179. recce/data/_next/static/chunks/a30376cd-7d806e1602f2dc3a.js +0 -1
  180. recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js +0 -1
  181. recce/data/_next/static/chunks/app/layout-9102e22cb73f74d6.js +0 -1
  182. recce/data/_next/static/chunks/app/page-cee661090afbd6aa.js +0 -1
  183. recce/data/_next/static/chunks/b63b1b3f-7395c74e11a14e95.js +0 -1
  184. recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js +0 -1
  185. recce/data/_next/static/chunks/c1ceaa8b-a1e442154d23515e.js +0 -1
  186. recce/data/_next/static/chunks/cd9f8d63-cf0d5a7b0f7a92e8.js +0 -54
  187. recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js +0 -1
  188. recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js +0 -1
  189. recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js +0 -1
  190. recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -1
  191. recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js +0 -1
  192. recce/data/_next/static/chunks/main-app-0225a2255968e566.js +0 -1
  193. recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js +0 -1
  194. recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js +0 -1
  195. recce/data/_next/static/chunks/webpack-567d72f0bc0820d5.js +0 -1
  196. recce/data/_next/static/css/c9ecb46a4b21c126.css +0 -14
  197. recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
  198. recce/data/_next/static/media/montserrat-cyrillic-800-normal.31d693bb.woff +0 -0
  199. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.7e2c1e62.woff +0 -0
  200. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
  201. recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
  202. recce/data/_next/static/media/montserrat-latin-800-normal.97e20d5e.woff +0 -0
  203. recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
  204. recce/data/_next/static/media/montserrat-latin-ext-800-normal.aff52ab0.woff +0 -0
  205. recce/data/_next/static/media/montserrat-vietnamese-800-normal.5f21869b.woff +0 -0
  206. recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
  207. recce/state.py +0 -753
  208. recce_nightly-1.2.0.20250506.dist-info/RECORD +0 -142
  209. tests/test_state.py +0 -123
  210. /recce/data/_next/static/{Kcbs3GEIyH2LxgLYat0es → 52aV_JrNUZU6dMFgvTQEO}/_ssgManifest.js +0 -0
  211. /recce/data/_next/static/chunks/{polyfills-42372ed130431b0a.js → a6dad97d9634a72d.js} +0 -0
  212. {recce_nightly-1.2.0.20250506.dist-info → recce_nightly-1.26.0.20251124.dist-info}/entry_points.txt +0 -0
  213. {recce_nightly-1.2.0.20250506.dist-info → recce_nightly-1.26.0.20251124.dist-info}/licenses/LICENSE +0 -0
tests/test_server.py CHANGED
@@ -5,17 +5,20 @@ from fastapi.testclient import TestClient
5
5
 
6
6
  from recce.core import default_context
7
7
  from recce.server import app
8
+
8
9
  # noinspection PyUnresolvedReferences
9
- from tests.adapter.dbt_adapter.conftest import dbt_test_helper
10
+ from tests.adapter.dbt_adapter.conftest import dbt_test_helper # noqa: F401
10
11
 
11
12
 
12
13
  @pytest.fixture
13
14
  def temp_folder():
14
15
  import tempfile
16
+
15
17
  temp_dir = tempfile.mkdtemp()
16
18
  yield temp_dir
17
19
 
18
20
  import shutil
21
+
19
22
  shutil.rmtree(temp_dir)
20
23
 
21
24
 
@@ -28,38 +31,41 @@ def test_health():
28
31
 
29
32
  def test_stateless(dbt_test_helper):
30
33
  context = default_context()
31
- from recce.state import RecceStateLoader
32
- context.state_loader = RecceStateLoader()
34
+ from recce.state import FileStateLoader
35
+
36
+ context.state_loader = FileStateLoader()
33
37
  client = TestClient(app)
34
38
  response = client.get("/api/info")
35
39
  assert response.status_code == 200
36
40
  info = response.json()
37
- assert info['file_mode'] is False
38
- assert info['cloud_mode'] is False
41
+ assert info["file_mode"] is False
42
+ assert info["cloud_mode"] is False
39
43
 
40
44
 
41
45
  def test_file_mode(dbt_test_helper):
42
46
  context = default_context()
43
- from recce.state import RecceStateLoader
44
- context.state_loader = RecceStateLoader(state_file='/tmp/recce_state.json')
47
+ from recce.state import FileStateLoader
48
+
49
+ context.state_loader = FileStateLoader(state_file="/tmp/recce_state.json")
45
50
  client = TestClient(app)
46
51
  response = client.get("/api/info")
47
52
  assert response.status_code == 200
48
53
  info = response.json()
49
- assert info['file_mode'] is True
50
- assert info['filename'] == 'recce_state.json'
51
- assert info['cloud_mode'] is False
54
+ assert info["file_mode"] is True
55
+ assert info["filename"] == "recce_state.json"
56
+ assert info["cloud_mode"] is False
52
57
 
53
58
 
54
59
  def test_saveas_and_rename(dbt_test_helper, temp_folder):
55
60
  context = default_context()
56
- state_file = os.path.join(temp_folder, 'recce_state.json')
57
- state_file2 = os.path.join(temp_folder, 'recce_state2.json')
58
- state_file3 = os.path.join(temp_folder, 'recce_state3.json')
59
- os.makedirs(os.path.join(temp_folder, 'dir.json'))
61
+ state_file = os.path.join(temp_folder, "recce_state.json")
62
+ state_file2 = os.path.join(temp_folder, "recce_state2.json")
63
+ state_file3 = os.path.join(temp_folder, "recce_state3.json")
64
+ os.makedirs(os.path.join(temp_folder, "dir.json"))
65
+
66
+ from recce.state import FileStateLoader
60
67
 
61
- from recce.state import RecceStateLoader
62
- context.state_loader = RecceStateLoader(state_file=state_file)
68
+ context.state_loader = FileStateLoader(state_file=state_file)
63
69
  client = TestClient(app)
64
70
 
65
71
  response = client.post("/api/save", json={"filename": "recce_state2.json"})
@@ -69,7 +75,7 @@ def test_saveas_and_rename(dbt_test_helper, temp_folder):
69
75
  response = client.post("/api/save-as", json={"filename": "recce_state2.json"})
70
76
  assert response.status_code == 200
71
77
  assert os.path.exists(state_file2)
72
- assert context.state_loader.state_file == os.path.join(temp_folder, 'recce_state2.json')
78
+ assert context.state_loader.state_file == os.path.join(temp_folder, "recce_state2.json")
73
79
 
74
80
  # Same file
75
81
  response = client.post("/api/save-as", json={"filename": "recce_state2.json"})
@@ -84,7 +90,7 @@ def test_saveas_and_rename(dbt_test_helper, temp_folder):
84
90
  assert response.status_code == 200
85
91
  assert not os.path.exists(state_file2)
86
92
  assert os.path.exists(state_file3)
87
- assert context.state_loader.state_file == os.path.join(temp_folder, 'recce_state3.json')
93
+ assert context.state_loader.state_file == os.path.join(temp_folder, "recce_state3.json")
88
94
 
89
95
  # Conflict
90
96
  response = client.post("/api/save-as", json={"filename": "recce_state.json"})
@@ -95,4 +101,4 @@ def test_saveas_and_rename(dbt_test_helper, temp_folder):
95
101
  # Overwrite
96
102
  response = client.post("/api/save-as", json={"filename": "recce_state.json", "overwrite": True})
97
103
  assert response.status_code == 200
98
- assert context.state_loader.state_file == os.path.join(temp_folder, 'recce_state.json')
104
+ assert context.state_loader.state_file == os.path.join(temp_folder, "recce_state.json")
tests/test_summary.py CHANGED
@@ -1,20 +1,26 @@
1
1
  import os
2
- import unittest
3
2
 
4
- from recce.adapter.dbt_adapter import load_manifest, DbtAdapter, DbtVersion
3
+ import pytest
4
+
5
+ from recce.adapter.dbt_adapter import DbtAdapter, DbtVersion, load_manifest
5
6
  from recce.core import RecceContext, set_default_context
6
- from recce.summary import generate_summary_metadata, _build_lineage_graph, generate_mermaid_lineage_graph
7
+ from recce.summary import (
8
+ _build_lineage_graph,
9
+ generate_mermaid_lineage_graph,
10
+ generate_summary_metadata,
11
+ )
7
12
 
8
13
  current_dir = os.path.dirname(os.path.abspath(__file__))
9
- base_manifest_dir = os.path.join(current_dir, 'data', 'manifest', 'base')
10
- pr2_manifest_dir = os.path.join(current_dir, 'data', 'manifest', 'pr2') # Pull Request 2l
11
-
12
- dbt_version = DbtVersion()
14
+ base_manifest_dir = os.path.join(current_dir, "data", "manifest", "base")
15
+ pr2_manifest_dir = os.path.join(current_dir, "data", "manifest", "pr2") # Pull Request 2l
13
16
 
14
17
 
15
- @unittest.skipIf(dbt_version < '1.8.1', "Dbt version is less than 1.8.1")
16
18
  def test_generate_summary_metadata():
17
- manifest = load_manifest(path=os.path.join(current_dir, 'manifest.json'))
19
+ dbt_version = DbtVersion()
20
+ if dbt_version < "1.8.1":
21
+ pytest.skip("Dbt version is less than 1.8.1")
22
+
23
+ manifest = load_manifest(path=os.path.join(current_dir, "manifest.json"))
18
24
  assert manifest is not None
19
25
  dbt_adapter = DbtAdapter(curr_manifest=manifest)
20
26
  curr_lineage = dbt_adapter.get_lineage()
@@ -23,18 +29,21 @@ def test_generate_summary_metadata():
23
29
  # Summary with no changes
24
30
  generate_summary_metadata(curr_lineage, base_lineage)
25
31
 
26
- base_manifest = load_manifest(path=os.path.join(base_manifest_dir, 'manifest.json'))
27
- curr_manifest = load_manifest(path=os.path.join(pr2_manifest_dir, 'manifest.json'))
32
+ base_manifest = load_manifest(path=os.path.join(base_manifest_dir, "manifest.json"))
33
+ curr_manifest = load_manifest(path=os.path.join(pr2_manifest_dir, "manifest.json"))
28
34
  dbt_adapter = DbtAdapter(curr_manifest=curr_manifest, base_manifest=base_manifest)
29
35
  curr_lineage = dbt_adapter.get_lineage()
30
36
  base_lineage = dbt_adapter.get_lineage(base=True)
31
37
  generate_summary_metadata(curr_lineage, base_lineage)
32
38
 
33
39
 
34
- @unittest.skipIf(dbt_version < 'v1.8.1', "Dbt version is less than 1.8.1")
35
40
  def test_build_lineage_graph():
36
- base_manifest = load_manifest(path=os.path.join(base_manifest_dir, 'manifest.json'))
37
- curr_manifest = load_manifest(path=os.path.join(pr2_manifest_dir, 'manifest.json'))
41
+ dbt_version = DbtVersion()
42
+ if dbt_version < "1.8.1":
43
+ pytest.skip("Dbt version is less than 1.8.1")
44
+
45
+ base_manifest = load_manifest(path=os.path.join(base_manifest_dir, "manifest.json"))
46
+ curr_manifest = load_manifest(path=os.path.join(pr2_manifest_dir, "manifest.json"))
38
47
  dbt_adapter = DbtAdapter(curr_manifest=curr_manifest, base_manifest=base_manifest)
39
48
  curr_lineage = dbt_adapter.get_lineage()
40
49
  base_lineage = dbt_adapter.get_lineage(base=True)
@@ -47,11 +56,14 @@ def test_build_lineage_graph():
47
56
  assert len(lineage_graph.modified_set) == 3
48
57
 
49
58
 
50
- @unittest.skipIf(dbt_version < 'v1.8.1', "Dbt version is less than 1.8.1")
51
59
  def test_generate_mermaid_lineage_graph():
60
+ dbt_version = DbtVersion()
61
+ if dbt_version < "1.8.1":
62
+ pytest.skip("Dbt version is less than 1.8.1")
63
+
52
64
  set_default_context(RecceContext())
53
- base_manifest = load_manifest(path=os.path.join(base_manifest_dir, 'manifest.json'))
54
- curr_manifest = load_manifest(path=os.path.join(pr2_manifest_dir, 'manifest.json'))
65
+ base_manifest = load_manifest(path=os.path.join(base_manifest_dir, "manifest.json"))
66
+ curr_manifest = load_manifest(path=os.path.join(pr2_manifest_dir, "manifest.json"))
55
67
  dbt_adapter = DbtAdapter(curr_manifest=curr_manifest, base_manifest=base_manifest)
56
68
  curr_lineage = dbt_adapter.get_lineage()
57
69
  base_lineage = dbt_adapter.get_lineage(base=True)
@@ -1 +0,0 @@
1
- self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/_error":["static/chunks/pages/_error-ed75be3f25588548.js"],sortedPages:["/_app","/_error"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();