recce-nightly 0.61.0.20250413__py3-none-any.whl → 0.61.0.20250415__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.
- recce/VERSION +1 -1
- recce/adapter/dbt_adapter/__init__.py +66 -10
- recce/cli.py +18 -10
- recce/data/404.html +1 -1
- recce/data/_next/static/-FZ7AfDqKYJ7K1mEhSe5l/_buildManifest.js +1 -0
- recce/data/_next/static/chunks/{38610ee6-24a85e2dfb424ddb.js → 1f229bf6-d9fe92e56db8d93b.js} +1 -1
- recce/data/_next/static/chunks/{29e3cc0d-6e3b0cf904a6874d.js → 29e3cc0d-8c150e37dff9631b.js} +1 -1
- recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js +1 -0
- recce/data/_next/static/chunks/{3998a672-63fc54b2b517ee2b.js → 3998a672-eaad84bdd88cc73e.js} +1 -1
- recce/data/_next/static/chunks/{450c323b-b36e745822edebe2.js → 450c323b-1bb5db526e54435a.js} +1 -1
- recce/data/_next/static/chunks/{47d8844f-0516cea2ef568380.js → 47d8844f-79a1b53c66a7d7ec.js} +1 -1
- recce/data/_next/static/chunks/500-e51c92a025a51234.js +65 -0
- recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js +1 -0
- recce/data/_next/static/chunks/700-3b65fc3666820d00.js +2 -0
- recce/data/_next/static/chunks/{7a8a3e83-dd26fafa0a7421e5.js → 7a8a3e83-d7fa409d97b38b2b.js} +1 -1
- recce/data/_next/static/chunks/{7f27ae6c-4ddea120696db611.js → 7f27ae6c-413f6b869a04183a.js} +1 -1
- recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js +1 -0
- recce/data/_next/static/chunks/{a30376cd-1ad5a3f522da896c.js → a30376cd-7d806e1602f2dc3a.js} +1 -1
- recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js +1 -0
- recce/data/_next/static/chunks/app/layout-9102e22cb73f74d6.js +1 -0
- recce/data/_next/static/chunks/app/page-635a088390dcb7ac.js +1 -0
- recce/data/_next/static/chunks/{b63b1b3f-fe714039749c1250.js → b63b1b3f-7395c74e11a14e95.js} +1 -1
- recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js +1 -0
- recce/data/_next/static/chunks/{c1ceaa8b-64142a5184f1b8b2.js → c1ceaa8b-a1e442154d23515e.js} +1 -1
- recce/data/_next/static/chunks/{cd9f8d63-543677b0ef49da87.js → cd9f8d63-cf0d5a7b0f7a92e8.js} +3 -3
- recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js +1 -0
- recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js +1 -0
- recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js +1 -0
- recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js +1 -0
- recce/data/_next/static/chunks/main-app-0225a2255968e566.js +1 -0
- recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js +1 -0
- recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js +1 -0
- recce/data/_next/static/chunks/{webpack-8a8709fe9d22c323.js → webpack-567d72f0bc0820d5.js} +1 -1
- recce/data/index.html +2 -2
- recce/data/index.txt +5 -5
- recce/models/types.py +10 -2
- recce/server.py +40 -1
- recce/state.py +6 -8
- recce/util/breaking.py +32 -35
- recce/util/recce_cloud.py +2 -0
- {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/METADATA +1 -1
- {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/RECORD +48 -48
- tests/test_core.py +1 -1
- recce/data/_next/static/chunks/269-83bbdbcbd0cc1ddb.js +0 -65
- recce/data/_next/static/chunks/36e1c10d-800596efe83e74a6.js +0 -1
- recce/data/_next/static/chunks/6dc81886-9871b611a22bd997.js +0 -1
- recce/data/_next/static/chunks/783-784ce10322400a48.js +0 -2
- recce/data/_next/static/chunks/9746af58-527fd8cbd2d17eee.js +0 -1
- recce/data/_next/static/chunks/app/_not-found/page-76f691066176b63a.js +0 -1
- recce/data/_next/static/chunks/app/layout-fdacc83a3bf974a3.js +0 -1
- recce/data/_next/static/chunks/app/page-35403e208468490c.js +0 -1
- recce/data/_next/static/chunks/c132bf7d-4cb4c4a123e27340.js +0 -1
- recce/data/_next/static/chunks/ce84277d-4bca7695ec1ada94.js +0 -1
- recce/data/_next/static/chunks/e24bf851-5db5db8459b0b291.js +0 -1
- recce/data/_next/static/chunks/fee69bc6-1df8306af9d11293.js +0 -1
- recce/data/_next/static/chunks/main-7183c49fe89a1f9b.js +0 -1
- recce/data/_next/static/chunks/main-app-cfd795a5fe58bf37.js +0 -1
- recce/data/_next/static/chunks/pages/_app-9f1049bbd7b90455.js +0 -1
- recce/data/_next/static/chunks/pages/_error-71ed60313c005df1.js +0 -1
- recce/data/_next/static/hD8g5-RYxHasL_ZuMPw1A/_buildManifest.js +0 -1
- /recce/data/_next/static/{hD8g5-RYxHasL_ZuMPw1A → -FZ7AfDqKYJ7K1mEhSe5l}/_ssgManifest.js +0 -0
- {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/WHEEL +0 -0
- {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/entry_points.txt +0 -0
- {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/licenses/LICENSE +0 -0
- {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/top_level.txt +0 -0
recce/state.py
CHANGED
|
@@ -728,13 +728,13 @@ class RecceShareStateManager:
|
|
|
728
728
|
|
|
729
729
|
# It is a class to share state file on Recce Cloud.
|
|
730
730
|
|
|
731
|
-
def __init__(self,
|
|
732
|
-
self.
|
|
731
|
+
def __init__(self, auth_options: Optional[Dict[str, str]] = None):
|
|
732
|
+
self.auth_options = auth_options or {}
|
|
733
733
|
self.error_message = None
|
|
734
734
|
self.hint_message = None
|
|
735
735
|
|
|
736
736
|
def verify(self) -> bool:
|
|
737
|
-
if self.
|
|
737
|
+
if self.auth_options.get('api_token') is None:
|
|
738
738
|
self.error_message = RECCE_API_TOKEN_MISSING.error_message
|
|
739
739
|
self.hint_message = RECCE_API_TOKEN_MISSING.hint_message
|
|
740
740
|
return False
|
|
@@ -744,12 +744,10 @@ class RecceShareStateManager:
|
|
|
744
744
|
def error_and_hint(self) -> (Union[str, None], Union[str, None]):
|
|
745
745
|
return self.error_message, self.hint_message
|
|
746
746
|
|
|
747
|
-
def share_state(self, file_name: str, state: RecceState) ->
|
|
747
|
+
def share_state(self, file_name: str, state: RecceState) -> Dict:
|
|
748
748
|
import tempfile
|
|
749
749
|
|
|
750
750
|
with tempfile.NamedTemporaryFile() as tmp:
|
|
751
751
|
state.to_file(tmp.name, file_type=SupportedFileTypes.FILE)
|
|
752
|
-
response = RecceCloud(token=self.
|
|
753
|
-
|
|
754
|
-
return f"Failed to share the state file. Reason: {response.get('message')}"
|
|
755
|
-
return response.get('share_url')
|
|
752
|
+
response = RecceCloud(token=self.auth_options.get('api_token')).share_state(file_name, open(tmp.name, 'rb'))
|
|
753
|
+
return response
|
recce/util/breaking.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Literal, Optional
|
|
3
2
|
|
|
4
3
|
import sqlglot.expressions as exp
|
|
@@ -6,6 +5,8 @@ from sqlglot import parse_one, diff, Dialect
|
|
|
6
5
|
from sqlglot.diff import Insert, Keep
|
|
7
6
|
from sqlglot.optimizer import optimize, traverse_scope, Scope
|
|
8
7
|
|
|
8
|
+
from recce.models.types import NodeChange
|
|
9
|
+
|
|
9
10
|
ChangeCategory = Literal['breaking', 'partial_breaking', 'non_breaking', 'unknown']
|
|
10
11
|
ColumnChangeStatus = Literal['added', 'removed', 'modified']
|
|
11
12
|
VALID_EXPRESSIONS = (
|
|
@@ -27,23 +28,8 @@ VALID_EXPRESSIONS = (
|
|
|
27
28
|
exp.Subquery,
|
|
28
29
|
)
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class ChangeCategoryResult:
|
|
33
|
-
category: ChangeCategory
|
|
34
|
-
changed_columns: Optional[dict[str, ColumnChangeStatus]]
|
|
35
|
-
|
|
36
|
-
def __init__(
|
|
37
|
-
self,
|
|
38
|
-
category: ChangeCategory,
|
|
39
|
-
changed_columns: Optional[dict[str, ColumnChangeStatus]] = None
|
|
40
|
-
):
|
|
41
|
-
self.category = category
|
|
42
|
-
self.changed_columns = changed_columns
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
CHANGE_CATEGORY_UNKNOWN = ChangeCategoryResult('unknown')
|
|
46
|
-
CHANGE_CATEGORY_BREAKING = ChangeCategoryResult('breaking')
|
|
31
|
+
CHANGE_CATEGORY_UNKNOWN = NodeChange(category='unknown')
|
|
32
|
+
CHANGE_CATEGORY_BREAKING = NodeChange(category='breaking')
|
|
47
33
|
|
|
48
34
|
|
|
49
35
|
def _debug(*args):
|
|
@@ -110,16 +96,14 @@ def _is_breaking_change(original_sql, modified_sql, dialect=None) -> bool:
|
|
|
110
96
|
def _diff_select_scope(
|
|
111
97
|
old_scope: Scope,
|
|
112
98
|
new_scope: Scope,
|
|
113
|
-
scope_changes_map: dict[Scope,
|
|
114
|
-
) ->
|
|
99
|
+
scope_changes_map: dict[Scope, NodeChange]
|
|
100
|
+
) -> NodeChange:
|
|
115
101
|
assert old_scope.expression.key == 'select'
|
|
116
102
|
assert new_scope.expression.key == 'select'
|
|
117
103
|
|
|
118
|
-
result =
|
|
104
|
+
result = NodeChange(category='non_breaking')
|
|
119
105
|
|
|
120
|
-
# check if the upstream scopes is
|
|
121
|
-
if old_scope.sources.keys() != new_scope.sources.keys():
|
|
122
|
-
return CHANGE_CATEGORY_BREAKING
|
|
106
|
+
# check if the upstream scopes is not breaking
|
|
123
107
|
for source_name, source in new_scope.sources.items():
|
|
124
108
|
if scope_changes_map.get(source) is not None:
|
|
125
109
|
change_category = scope_changes_map[source]
|
|
@@ -147,7 +131,7 @@ def _diff_select_scope(
|
|
|
147
131
|
if ref_change_category is None:
|
|
148
132
|
return None
|
|
149
133
|
|
|
150
|
-
return ref_change_category.
|
|
134
|
+
return ref_change_category.columns.get(column_name)
|
|
151
135
|
|
|
152
136
|
# selects
|
|
153
137
|
old_column_map = {projection.alias_or_name: projection for projection in old_select.selects}
|
|
@@ -162,6 +146,9 @@ def _diff_select_scope(
|
|
|
162
146
|
def _has_aggregate(expr: exp.Expression) -> bool:
|
|
163
147
|
return expr.find(exp.AggFunc) is not None
|
|
164
148
|
|
|
149
|
+
def _has_star(expr: exp.Expression) -> bool:
|
|
150
|
+
return expr.find(exp.Star) is not None
|
|
151
|
+
|
|
165
152
|
old_column = old_column_map.get(column_name)
|
|
166
153
|
new_column = new_column_map.get(column_name)
|
|
167
154
|
if old_column is None:
|
|
@@ -194,6 +181,17 @@ def _diff_select_scope(
|
|
|
194
181
|
changed_columns[column_name] = 'modified'
|
|
195
182
|
result.category = 'partial_breaking'
|
|
196
183
|
else:
|
|
184
|
+
if _has_star(new_column):
|
|
185
|
+
for source_name, (_, source) in new_scope.selected_sources.items():
|
|
186
|
+
change = scope_changes_map.get(source)
|
|
187
|
+
if change is not None:
|
|
188
|
+
for sub_column_name in change.columns.keys():
|
|
189
|
+
column_change_status = change.columns[sub_column_name]
|
|
190
|
+
changed_columns[sub_column_name] = column_change_status
|
|
191
|
+
if column_change_status in ['removed', 'modified']:
|
|
192
|
+
result.category = 'partial_breaking'
|
|
193
|
+
continue
|
|
194
|
+
|
|
197
195
|
ref_columns = new_column.find_all(exp.Column)
|
|
198
196
|
for ref_column in ref_columns:
|
|
199
197
|
if source_column_change_status(ref_column) is not None:
|
|
@@ -201,7 +199,6 @@ def _diff_select_scope(
|
|
|
201
199
|
return CHANGE_CATEGORY_BREAKING
|
|
202
200
|
if _has_udtf(new_column):
|
|
203
201
|
return CHANGE_CATEGORY_BREAKING
|
|
204
|
-
|
|
205
202
|
result.category = 'partial_breaking'
|
|
206
203
|
changed_columns[column_name] = 'modified'
|
|
207
204
|
|
|
@@ -254,15 +251,15 @@ def _diff_select_scope(
|
|
|
254
251
|
if selected_column_change_status(ref_column) is not None:
|
|
255
252
|
return CHANGE_CATEGORY_BREAKING
|
|
256
253
|
|
|
257
|
-
result.
|
|
254
|
+
result.columns = changed_columns
|
|
258
255
|
return result
|
|
259
256
|
|
|
260
257
|
|
|
261
258
|
def _diff_union_scope(
|
|
262
259
|
old_scope: Scope,
|
|
263
260
|
new_scope: Scope,
|
|
264
|
-
scope_changes_map: dict[Scope,
|
|
265
|
-
) ->
|
|
261
|
+
scope_changes_map: dict[Scope, NodeChange]
|
|
262
|
+
) -> NodeChange:
|
|
266
263
|
assert old_scope.expression.key == 'union'
|
|
267
264
|
assert new_scope.expression.key == 'union'
|
|
268
265
|
assert len(old_scope.union_scopes) == len(new_scope.union_scopes)
|
|
@@ -279,8 +276,8 @@ def _diff_union_scope(
|
|
|
279
276
|
return result_right
|
|
280
277
|
if result_right.category == 'partial_breaking':
|
|
281
278
|
result.category = 'partial_breaking'
|
|
282
|
-
for column_name, column_change_status in result_right.
|
|
283
|
-
result.
|
|
279
|
+
for column_name, column_change_status in result_right.columns.items():
|
|
280
|
+
result.columns[column_name] = column_change_status
|
|
284
281
|
|
|
285
282
|
return result
|
|
286
283
|
|
|
@@ -292,9 +289,9 @@ def parse_change_category(
|
|
|
292
289
|
new_schema=None,
|
|
293
290
|
dialect=None,
|
|
294
291
|
optimizer_rules=None,
|
|
295
|
-
) ->
|
|
292
|
+
) -> NodeChange:
|
|
296
293
|
if old_sql == new_sql:
|
|
297
|
-
return
|
|
294
|
+
return NodeChange(category='non_breaking')
|
|
298
295
|
|
|
299
296
|
try:
|
|
300
297
|
dialect = Dialect.get(dialect)
|
|
@@ -330,7 +327,7 @@ def parse_change_category(
|
|
|
330
327
|
scope_changes_map[new_scope] = CHANGE_CATEGORY_BREAKING
|
|
331
328
|
continue
|
|
332
329
|
if old_scope == new_scope:
|
|
333
|
-
scope_changes_map[new_scope] =
|
|
330
|
+
scope_changes_map[new_scope] = NodeChange(category='non_breaking')
|
|
334
331
|
continue
|
|
335
332
|
|
|
336
333
|
scope_type = old_scope.expression.key
|
|
@@ -344,7 +341,7 @@ def parse_change_category(
|
|
|
344
341
|
if old_scope.expression != new_scope.expression:
|
|
345
342
|
result = CHANGE_CATEGORY_BREAKING
|
|
346
343
|
else:
|
|
347
|
-
result =
|
|
344
|
+
result = NodeChange(category='non_breaking', columns={})
|
|
348
345
|
|
|
349
346
|
if result.category == 'breaking' or result.category == 'unknown':
|
|
350
347
|
return result
|
recce/util/recce_cloud.py
CHANGED
|
@@ -123,6 +123,8 @@ class RecceCloud:
|
|
|
123
123
|
api_url = f'{self.base_url}/recce-state/upload'
|
|
124
124
|
files = {'file': (file_name, file_io, 'application/json')}
|
|
125
125
|
response = self._request('POST', api_url, files=files)
|
|
126
|
+
if response.status_code == 403:
|
|
127
|
+
return {'status': 'error', 'message': response.json().get('detail')}
|
|
126
128
|
if response.status_code != 200:
|
|
127
129
|
raise RecceCloudException(
|
|
128
130
|
message='Failed to share Recce state.',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
recce/VERSION,sha256=
|
|
1
|
+
recce/VERSION,sha256=s86THcSn7bg0cBCdSqvEFaJ1tkjbdTtAonvnvBRiMmk,16
|
|
2
2
|
recce/__init__.py,sha256=e0lFWHcmyw6LDA9ZVRJUToPe7ApnJjPTCylw4aBowto,2392
|
|
3
3
|
recce/artifact.py,sha256=a7P1cXd6lglEZF2OYeNvsEg9ME-ocJo5oPU4VZVeaz0,6586
|
|
4
|
-
recce/cli.py,sha256=
|
|
4
|
+
recce/cli.py,sha256=lkcp2Ln3oylyEU9oOA2_aKdzfYtWfUx2MJ7PSx4l0ec,34753
|
|
5
5
|
recce/config.py,sha256=76_tIycylWqIWLpdYJOuqffXn6q1sCJN57eH98gOEz4,4665
|
|
6
6
|
recce/core.py,sha256=aMNHWi8bhwPrUCVYp2KyAkoR20NHD7pMJPxFUZ-XHes,10679
|
|
7
7
|
recce/diff.py,sha256=xLcBt4sW4sJCJ9tTCIpnV4SUHtYvMfYB1kX136iQbc0,794
|
|
@@ -10,56 +10,56 @@ recce/git.py,sha256=uig5sh347jZJKTD2Ml5b0lySSGJhdQ4VCIZqdgKH_y4,2344
|
|
|
10
10
|
recce/github.py,sha256=cQBNCtloeLpem06RDhUGb4tR7PoptP1pkZYCM1z2qUQ,7369
|
|
11
11
|
recce/pull_request.py,sha256=d-9c9KLzQGY_1erotORdm8lTHqFZKjNN9-BfI-hbGJ8,3853
|
|
12
12
|
recce/run.py,sha256=g0lAjKuihL5s4zi_qVlczXxlvAcJSq6n0rAilKqjIgc,13006
|
|
13
|
-
recce/server.py,sha256=
|
|
14
|
-
recce/state.py,sha256=
|
|
13
|
+
recce/server.py,sha256=aR-VoY59fqMQHVzhERGaBMwbOmKX0iXOdnjCcv4-A_8,18030
|
|
14
|
+
recce/state.py,sha256=YlT6iEO3xplKX8t7z_EYTYN_vzZd6jkF0elN6fS5V88,30564
|
|
15
15
|
recce/summary.py,sha256=yPAaGCkOmfhLjwF2rGpS66XR88TjyNG6GI3T6lsRIeg,18809
|
|
16
16
|
recce/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
17
|
recce/adapter/base.py,sha256=2IwK18bIn8myCoz98I1PA--FdAzZ-GBI9ZCGyYr-B-4,3582
|
|
18
18
|
recce/adapter/sqlmesh_adapter.py,sha256=_nnWHhd46p1MIW5-riQFYMf638OlSdwugIKgTwYiRYM,5160
|
|
19
|
-
recce/adapter/dbt_adapter/__init__.py,sha256=
|
|
19
|
+
recce/adapter/dbt_adapter/__init__.py,sha256=Oz4ZEH5lMmuTCi27PYpcikG9Db0uSHrCVbrsUGbyM-0,52669
|
|
20
20
|
recce/adapter/dbt_adapter/dbt_version.py,sha256=CwsOEu101fzMUwUYD3Y7btDPAALQNwA7J6C4Auc_wzM,1225
|
|
21
21
|
recce/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
recce/apis/check_api.py,sha256=S4OYx3vR5iezo1vnWpk56JUZiprAr9UgYcz-HEIsROs,6211
|
|
23
23
|
recce/apis/check_func.py,sha256=onhGppZ7LDrVmipHaXZI-WaTVRFZDwb2oQhbYe0tSXY,4316
|
|
24
24
|
recce/apis/run_api.py,sha256=FdNFWt7JrPbCv2CQkswbsaw5gZNGesjQBi749jbQtK0,3326
|
|
25
25
|
recce/apis/run_func.py,sha256=zxxRo9_VdvSMeDbzQnBgVo5_msOmauiVF4XJTe-hvOg,7179
|
|
26
|
-
recce/data/404.html,sha256=
|
|
26
|
+
recce/data/404.html,sha256=aGuJW8fSResbhtPeebCvWDSq4wYJuN-CRlNe20O3-CA,6206
|
|
27
27
|
recce/data/favicon.ico,sha256=B2mBumUOnzvUrXrqNkrc5QfdDXjzEXRcWkWur0fJ6sM,2565
|
|
28
|
-
recce/data/index.html,sha256=
|
|
29
|
-
recce/data/index.txt,sha256=
|
|
30
|
-
recce/data/_next/static/
|
|
31
|
-
recce/data/_next/static/
|
|
32
|
-
recce/data/_next/static/chunks/
|
|
33
|
-
recce/data/_next/static/chunks/
|
|
34
|
-
recce/data/_next/static/chunks/
|
|
35
|
-
recce/data/_next/static/chunks/
|
|
36
|
-
recce/data/_next/static/chunks/
|
|
37
|
-
recce/data/_next/static/chunks/
|
|
38
|
-
recce/data/_next/static/chunks/
|
|
39
|
-
recce/data/_next/static/chunks/
|
|
40
|
-
recce/data/_next/static/chunks/
|
|
41
|
-
recce/data/_next/static/chunks/
|
|
42
|
-
recce/data/_next/static/chunks/
|
|
43
|
-
recce/data/_next/static/chunks/
|
|
44
|
-
recce/data/_next/static/chunks/
|
|
45
|
-
recce/data/_next/static/chunks/
|
|
46
|
-
recce/data/_next/static/chunks/
|
|
47
|
-
recce/data/_next/static/chunks/
|
|
48
|
-
recce/data/_next/static/chunks/
|
|
49
|
-
recce/data/_next/static/chunks/
|
|
28
|
+
recce/data/index.html,sha256=MV7JvJJFWqQwjRCy6OsdrZGNiba4xxrcjeuhtzbxXEo,38924
|
|
29
|
+
recce/data/index.txt,sha256=B8eD-pHl3Ea87umzKFm3fkWI52dec9h9hf7uhyo-_08,3283
|
|
30
|
+
recce/data/_next/static/-FZ7AfDqKYJ7K1mEhSe5l/_buildManifest.js,sha256=gZrGHi2LPMw1gkjYWs13MYkJyb5aOtihBRSJ1w0E6QA,224
|
|
31
|
+
recce/data/_next/static/-FZ7AfDqKYJ7K1mEhSe5l/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
|
32
|
+
recce/data/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js,sha256=NvhILR-yLwIu-WlvwD9Hkr2H_I7ZK64vwYvR6c84wC0,172836
|
|
33
|
+
recce/data/_next/static/chunks/29e3cc0d-8c150e37dff9631b.js,sha256=4ZQR-OYMhGWnYPNwUjG5FpsTVzVTPEAf6T0v0E5g-4o,700
|
|
34
|
+
recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js,sha256=SkfIoUJXsrjEoql4hRRcWKtW2vMfHOAHUm4NE6eaho4,7797
|
|
35
|
+
recce/data/_next/static/chunks/3998a672-eaad84bdd88cc73e.js,sha256=7FRm86VFsyXQL6M4J0qFq7e4cvhs48uKJF2Qp0tYraM,9024
|
|
36
|
+
recce/data/_next/static/chunks/450c323b-1bb5db526e54435a.js,sha256=3M8dU9CapPo-oey7uyaRBaSrnwoPHUQb671T-_Nv7bs,2205
|
|
37
|
+
recce/data/_next/static/chunks/47d8844f-79a1b53c66a7d7ec.js,sha256=WwhEczkWeoHd3z0pTrh4u_XwBoUxePZ7rjEMPjajmx8,697
|
|
38
|
+
recce/data/_next/static/chunks/500-e51c92a025a51234.js,sha256=MxXlCvIbimURCzZompSCWqtSOeve8ZdZ5wR1A7Cq5jE,1257314
|
|
39
|
+
recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js,sha256=xIxqOzAWk07uQb5pgQGMv0O4CHereLF86Fwm2wX0Mmo,69733
|
|
40
|
+
recce/data/_next/static/chunks/700-3b65fc3666820d00.js,sha256=JokVG7hi66aCWFukVWlzc2vIBKa7EFW7JrSGW9F_2tU,124133
|
|
41
|
+
recce/data/_next/static/chunks/7a8a3e83-d7fa409d97b38b2b.js,sha256=MmsF3qQgQXqSPGhUHQbIqAtVz7Maa_O3rWErEq0N3gY,1649
|
|
42
|
+
recce/data/_next/static/chunks/7f27ae6c-413f6b869a04183a.js,sha256=8Hs6bhtsCfZiOFrX3_IBxLZKPsdqhkLzikrACS1Pe0M,779
|
|
43
|
+
recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js,sha256=9MwsjNv8XMd92eUpXYeA32Ahk8ORP_oWMXnpTYOQQ-c,4177
|
|
44
|
+
recce/data/_next/static/chunks/a30376cd-7d806e1602f2dc3a.js,sha256=cvkpSEaZn5Johnsf3DT_x-hKNlNIhYFb6CZcMqpXpTE,797
|
|
45
|
+
recce/data/_next/static/chunks/b63b1b3f-7395c74e11a14e95.js,sha256=g2ArwRSeMZ-o6dODDGh3orC0iRkyxjXTk4NgyVk1nBw,572
|
|
46
|
+
recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js,sha256=CSRe9MSZI7ohCFzU6umTdDDkw2aBiLhA0HLurQwrjUY,198537
|
|
47
|
+
recce/data/_next/static/chunks/c1ceaa8b-a1e442154d23515e.js,sha256=mL85IeBYKB6YBgKlDs2n5lA7iLaxU8nTEtE8jduhGRI,81302
|
|
48
|
+
recce/data/_next/static/chunks/cd9f8d63-cf0d5a7b0f7a92e8.js,sha256=QqsQqnIVC7xADuujk3GhMZIUZCGiWwe_fqVh_2iSEV0,82989
|
|
49
|
+
recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js,sha256=4FzO_5dSRNQKZHQ2EmZW0iau4yBguMBJ324J0e70UXQ,2562
|
|
50
|
+
recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js,sha256=aaPLADhg4KN7KoE09dpPiE831gBYqepVrIJj6Qh2amk,154153
|
|
51
|
+
recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js,sha256=r51nWC424b7AoD-Y68JLMXDDpS_n-IUL3zcJNStzOLA,483
|
|
50
52
|
recce/data/_next/static/chunks/framework-ded83d71b51ce901.js,sha256=0Xsxxnmw5fjRHz8ni6vlaF9tQjfjNGZcZv2oMy7A_T4,140000
|
|
51
|
-
recce/data/_next/static/chunks/main-
|
|
52
|
-
recce/data/_next/static/chunks/main-app-
|
|
53
|
+
recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js,sha256=nTSd5jisBq_nX5_3Yf1JMakSk9Rq5IQEhtzeFU0VRyY,111204
|
|
54
|
+
recce/data/_next/static/chunks/main-app-0225a2255968e566.js,sha256=zVNui79GYFi-pNlmSB_zwxzps-uRW9L1-HZXXBUFj-Y,471
|
|
53
55
|
recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
|
|
54
|
-
recce/data/_next/static/chunks/webpack-
|
|
55
|
-
recce/data/_next/static/chunks/app/layout-
|
|
56
|
-
recce/data/_next/static/chunks/app/page-
|
|
57
|
-
recce/data/_next/static/chunks/app/_not-found/page-
|
|
58
|
-
recce/data/_next/static/chunks/pages/_app-
|
|
59
|
-
recce/data/_next/static/chunks/pages/_error-
|
|
56
|
+
recce/data/_next/static/chunks/webpack-567d72f0bc0820d5.js,sha256=8boCnz01og_Qj7lbDux_TTNcPnNFuefZdgpC8-Pb_XU,3839
|
|
57
|
+
recce/data/_next/static/chunks/app/layout-9102e22cb73f74d6.js,sha256=dXobUGeQ7wXuAkSTFzSJ7mqKKKsZD2sud0xqn3YEv3Y,161
|
|
58
|
+
recce/data/_next/static/chunks/app/page-635a088390dcb7ac.js,sha256=C7XwORUCNhwWyUOAsZQYlQt--tJdWEe1ozJHrlUK3OI,207328
|
|
59
|
+
recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js,sha256=T5MBvLNarbZQll8vwvggCZWFzcNwqe6LlL0hGI9YPXA,1751
|
|
60
|
+
recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js,sha256=UcYdHJMmCNfuMevCyY_iFfFwMGbxcEkLGRbBnEx_cCU,284
|
|
61
|
+
recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js,sha256=o_MwN3cYfszhI-hy_wkB0XAyTgcEcXt43rrzk-oKIe0,250
|
|
60
62
|
recce/data/_next/static/css/c9ecb46a4b21c126.css,sha256=JbGypR8aDNuZavNvH6dhPtSbMVSCsy0ycPrz_6XkiVc,21925
|
|
61
|
-
recce/data/_next/static/hD8g5-RYxHasL_ZuMPw1A/_buildManifest.js,sha256=uZT3XnlZkFx7KBidsNMR-Gbjt_cu1ARQkVwXbzxPlIs,224
|
|
62
|
-
recce/data/_next/static/hD8g5-RYxHasL_ZuMPw1A/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
|
63
63
|
recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2,sha256=P5Sx5PNkdTlDYzAdulW_OPRfMokDLi6XTpmS8KJSRoI,11148
|
|
64
64
|
recce/data/_next/static/media/montserrat-cyrillic-800-normal.31d693bb.woff,sha256=ITxULbMzWscxwUi_v3GpzTSYVWlwq_z9fpEvAkEvHJw,11020
|
|
65
65
|
recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.7e2c1e62.woff,sha256=6J3PqBk_hOFVM8PpfZeSfwZQumQd6LTPPjnaVha2KQ0,12672
|
|
@@ -81,7 +81,7 @@ recce/event/track.py,sha256=5Md5im5c4ZRZg6FOtBshEN7KFA8xeP6QfxNZhrgWMZ8,4691
|
|
|
81
81
|
recce/models/__init__.py,sha256=m2N3rgyTeXYhgQUx5a8CNUeCykFT-luIHpN-gXfrOsM,104
|
|
82
82
|
recce/models/check.py,sha256=LP98PSF7BdifI4IGnFGjSI2mzElIy9B7tKRwa8to7Es,1620
|
|
83
83
|
recce/models/run.py,sha256=H47fydFSpiq_qC4kNldBnoQ2OghIq4RDGUyrhVNzUyo,1160
|
|
84
|
-
recce/models/types.py,sha256=
|
|
84
|
+
recce/models/types.py,sha256=hCdfEiFlb81178dtP4bplRHBCghAd854JdI2pldIdAU,3130
|
|
85
85
|
recce/tasks/__init__.py,sha256=P8BnsFisakA-EpYA3DK2vDfqtYpJExeVU945Jh8aN_o,316
|
|
86
86
|
recce/tasks/core.py,sha256=BM8LCyRaOJ_YEgeng0qpJkhEJm654pe7U-epJr6a9hg,4115
|
|
87
87
|
recce/tasks/dataframe.py,sha256=ppOUanqNT0PdCg2PZoo4uk_L3vzfRxS0uU5aXlE7bIQ,3648
|
|
@@ -94,21 +94,21 @@ recce/tasks/schema.py,sha256=28mmZni0AU1bLfptt7Np3ddKhQ5XZsrtYINonQ2OQOo,2274
|
|
|
94
94
|
recce/tasks/top_k.py,sha256=E-V2p2St2W1RXa4cQMUYagHpja5rWj_mcPLtvJ3fKfI,5522
|
|
95
95
|
recce/tasks/valuediff.py,sha256=7GcSy7emPSLXjqcJomJ5aK9V8Eamo864ln-iOyNnW5A,15118
|
|
96
96
|
recce/util/__init__.py,sha256=0lcJectK7Z7k9h0EaYCcv4Bgw2PN03OdJoxb3tbV5j8,37
|
|
97
|
-
recce/util/breaking.py,sha256=
|
|
97
|
+
recce/util/breaking.py,sha256=AiV_yb3unt1X4ure9ai6fJ0eHcdrgq15Ff3r_bgYAp4,12670
|
|
98
98
|
recce/util/cache.py,sha256=QB6wzxe0M3jNTwP0M27Ys8F2hF-oda4-LyXXG9THuZQ,646
|
|
99
99
|
recce/util/cll.py,sha256=fEh13utsobam6fEqyDRXvtxUqXfqZRN-rlTxXXK7NDI,12206
|
|
100
100
|
recce/util/io.py,sha256=uMBpJBKKOUPHTBgntkVkuaVUkY8grDIlA8ORCtFLE5E,3372
|
|
101
101
|
recce/util/lineage.py,sha256=C-jNqRARgwAEQoicO5t7D0XGBkcVs6SyxLzfzCAqkPQ,707
|
|
102
102
|
recce/util/logger.py,sha256=Vmd2PuyzBkML7zvPmJKe3yNfELFjRZqX7abA23wquzg,746
|
|
103
103
|
recce/util/pydantic_model.py,sha256=KumKuyCjbTzEMsKLE4-b-eZfp0gLhYDdmVtw1-hxiJw,587
|
|
104
|
-
recce/util/recce_cloud.py,sha256=
|
|
104
|
+
recce/util/recce_cloud.py,sha256=6Nq5MFGsV6AziUHSuON9cPkVpS6bpybuOmqTQbFLhks,7215
|
|
105
105
|
recce/util/singleton.py,sha256=l2Q31ulDNCMJCuzUIGNXuvniHdGg6EMg80mrW48-97w,643
|
|
106
106
|
recce/yaml/__init__.py,sha256=489WHH9pAPf68gx04qifA0AmexIopJona3EPWxGxa-Y,1296
|
|
107
|
-
recce_nightly-0.61.0.
|
|
107
|
+
recce_nightly-0.61.0.20250415.dist-info/licenses/LICENSE,sha256=CQjjMy9aYPhfe8xG_bcpIfKtNkdxLZ5IOb8oPygtUhY,11343
|
|
108
108
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
109
109
|
tests/test_cli.py,sha256=tEQJVT8TbrAOPkIqkVJR6e2k-4dGJZMQVdsYC4DSQAE,5613
|
|
110
110
|
tests/test_config.py,sha256=FM55tG0Yaqu8x9l6EiJtFJDUu6F2n96vW4_xbX3O7DY,1579
|
|
111
|
-
tests/test_core.py,sha256=
|
|
111
|
+
tests/test_core.py,sha256=1gdyHLU-7fOLPiFSYUevFRFcbTJzDuWK4t_mMojPlz8,769
|
|
112
112
|
tests/test_dbt.py,sha256=5F0mBFy9hLs3Cd5LMZb2TPiail-ROJDeaZLoM5pOOac,1323
|
|
113
113
|
tests/test_pull_request.py,sha256=DJl4NIxDiNfcskSuRf2qFgWDb7CSVoCB3EzzUwvRn-o,3562
|
|
114
114
|
tests/test_server.py,sha256=TgHjn3J1GGqgEpx2FEaf0IIdCIipiSjt97Kt_ISgjgc,3377
|
|
@@ -132,8 +132,8 @@ tests/tasks/test_row_count.py,sha256=hjrKP1u2aZ9V0EWb0WGXDz4-V2kYaiNeiJ_Mqin8BPg
|
|
|
132
132
|
tests/tasks/test_schema.py,sha256=02guW2UXwUW3Ts8x27KjdL6V9fVatGlx8XFEEcVq3bU,2810
|
|
133
133
|
tests/tasks/test_top_k.py,sha256=hqYWSd9xE1GU0wgvpgKeLHbPVd5CABYcTJvgA49JRyA,1707
|
|
134
134
|
tests/tasks/test_valuediff.py,sha256=_z1Ci4ba4lFSWwbj7cbKBRtWqLgV_1HIZGqQlEFl61o,1863
|
|
135
|
-
recce_nightly-0.61.0.
|
|
136
|
-
recce_nightly-0.61.0.
|
|
137
|
-
recce_nightly-0.61.0.
|
|
138
|
-
recce_nightly-0.61.0.
|
|
139
|
-
recce_nightly-0.61.0.
|
|
135
|
+
recce_nightly-0.61.0.20250415.dist-info/METADATA,sha256=lcNAt2h3AjIzJkLudzXTdPpiQpYBFjPF-bM0zf9GJ2c,13240
|
|
136
|
+
recce_nightly-0.61.0.20250415.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
137
|
+
recce_nightly-0.61.0.20250415.dist-info/entry_points.txt,sha256=oqoY_IiwIqXbgrIsPnlqUqao2eiIeP2dprowkOlmeyg,40
|
|
138
|
+
recce_nightly-0.61.0.20250415.dist-info/top_level.txt,sha256=6PKGVpf75idP0C6KEaldDzzZUauIxNu1ZDstau1pI4I,12
|
|
139
|
+
recce_nightly-0.61.0.20250415.dist-info/RECORD,,
|
tests/test_core.py
CHANGED
|
@@ -24,4 +24,4 @@ def test_lineage_diff(dbt_test_helper):
|
|
|
24
24
|
nodediff = result.diff.get('model1')
|
|
25
25
|
assert nodediff is None
|
|
26
26
|
nodediff2 = result.diff.get('model2')
|
|
27
|
-
assert nodediff2 is not None and nodediff2.change_status == 'modified' and nodediff2.
|
|
27
|
+
assert nodediff2 is not None and nodediff2.change_status == 'modified' and nodediff2.change.category == 'non_breaking'
|