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.

Files changed (65) hide show
  1. recce/VERSION +1 -1
  2. recce/adapter/dbt_adapter/__init__.py +66 -10
  3. recce/cli.py +18 -10
  4. recce/data/404.html +1 -1
  5. recce/data/_next/static/-FZ7AfDqKYJ7K1mEhSe5l/_buildManifest.js +1 -0
  6. recce/data/_next/static/chunks/{38610ee6-24a85e2dfb424ddb.js → 1f229bf6-d9fe92e56db8d93b.js} +1 -1
  7. recce/data/_next/static/chunks/{29e3cc0d-6e3b0cf904a6874d.js → 29e3cc0d-8c150e37dff9631b.js} +1 -1
  8. recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js +1 -0
  9. recce/data/_next/static/chunks/{3998a672-63fc54b2b517ee2b.js → 3998a672-eaad84bdd88cc73e.js} +1 -1
  10. recce/data/_next/static/chunks/{450c323b-b36e745822edebe2.js → 450c323b-1bb5db526e54435a.js} +1 -1
  11. recce/data/_next/static/chunks/{47d8844f-0516cea2ef568380.js → 47d8844f-79a1b53c66a7d7ec.js} +1 -1
  12. recce/data/_next/static/chunks/500-e51c92a025a51234.js +65 -0
  13. recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js +1 -0
  14. recce/data/_next/static/chunks/700-3b65fc3666820d00.js +2 -0
  15. recce/data/_next/static/chunks/{7a8a3e83-dd26fafa0a7421e5.js → 7a8a3e83-d7fa409d97b38b2b.js} +1 -1
  16. recce/data/_next/static/chunks/{7f27ae6c-4ddea120696db611.js → 7f27ae6c-413f6b869a04183a.js} +1 -1
  17. recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js +1 -0
  18. recce/data/_next/static/chunks/{a30376cd-1ad5a3f522da896c.js → a30376cd-7d806e1602f2dc3a.js} +1 -1
  19. recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js +1 -0
  20. recce/data/_next/static/chunks/app/layout-9102e22cb73f74d6.js +1 -0
  21. recce/data/_next/static/chunks/app/page-635a088390dcb7ac.js +1 -0
  22. recce/data/_next/static/chunks/{b63b1b3f-fe714039749c1250.js → b63b1b3f-7395c74e11a14e95.js} +1 -1
  23. recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js +1 -0
  24. recce/data/_next/static/chunks/{c1ceaa8b-64142a5184f1b8b2.js → c1ceaa8b-a1e442154d23515e.js} +1 -1
  25. recce/data/_next/static/chunks/{cd9f8d63-543677b0ef49da87.js → cd9f8d63-cf0d5a7b0f7a92e8.js} +3 -3
  26. recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js +1 -0
  27. recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js +1 -0
  28. recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js +1 -0
  29. recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js +1 -0
  30. recce/data/_next/static/chunks/main-app-0225a2255968e566.js +1 -0
  31. recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js +1 -0
  32. recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js +1 -0
  33. recce/data/_next/static/chunks/{webpack-8a8709fe9d22c323.js → webpack-567d72f0bc0820d5.js} +1 -1
  34. recce/data/index.html +2 -2
  35. recce/data/index.txt +5 -5
  36. recce/models/types.py +10 -2
  37. recce/server.py +40 -1
  38. recce/state.py +6 -8
  39. recce/util/breaking.py +32 -35
  40. recce/util/recce_cloud.py +2 -0
  41. {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/METADATA +1 -1
  42. {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/RECORD +48 -48
  43. tests/test_core.py +1 -1
  44. recce/data/_next/static/chunks/269-83bbdbcbd0cc1ddb.js +0 -65
  45. recce/data/_next/static/chunks/36e1c10d-800596efe83e74a6.js +0 -1
  46. recce/data/_next/static/chunks/6dc81886-9871b611a22bd997.js +0 -1
  47. recce/data/_next/static/chunks/783-784ce10322400a48.js +0 -2
  48. recce/data/_next/static/chunks/9746af58-527fd8cbd2d17eee.js +0 -1
  49. recce/data/_next/static/chunks/app/_not-found/page-76f691066176b63a.js +0 -1
  50. recce/data/_next/static/chunks/app/layout-fdacc83a3bf974a3.js +0 -1
  51. recce/data/_next/static/chunks/app/page-35403e208468490c.js +0 -1
  52. recce/data/_next/static/chunks/c132bf7d-4cb4c4a123e27340.js +0 -1
  53. recce/data/_next/static/chunks/ce84277d-4bca7695ec1ada94.js +0 -1
  54. recce/data/_next/static/chunks/e24bf851-5db5db8459b0b291.js +0 -1
  55. recce/data/_next/static/chunks/fee69bc6-1df8306af9d11293.js +0 -1
  56. recce/data/_next/static/chunks/main-7183c49fe89a1f9b.js +0 -1
  57. recce/data/_next/static/chunks/main-app-cfd795a5fe58bf37.js +0 -1
  58. recce/data/_next/static/chunks/pages/_app-9f1049bbd7b90455.js +0 -1
  59. recce/data/_next/static/chunks/pages/_error-71ed60313c005df1.js +0 -1
  60. recce/data/_next/static/hD8g5-RYxHasL_ZuMPw1A/_buildManifest.js +0 -1
  61. /recce/data/_next/static/{hD8g5-RYxHasL_ZuMPw1A → -FZ7AfDqKYJ7K1mEhSe5l}/_ssgManifest.js +0 -0
  62. {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/WHEEL +0 -0
  63. {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/entry_points.txt +0 -0
  64. {recce_nightly-0.61.0.20250413.dist-info → recce_nightly-0.61.0.20250415.dist-info}/licenses/LICENSE +0 -0
  65. {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, cloud_options: Optional[Dict[str, str]] = None):
732
- self.cloud_options = cloud_options or {}
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.cloud_options.get('api_token') is None:
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) -> Union[str, None]:
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.cloud_options.get('api_token')).share_state(file_name, open(tmp.name, 'rb'))
753
- if response.get('status') != 'success':
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
- @dataclass
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, ChangeCategoryResult]
114
- ) -> ChangeCategoryResult:
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 = ChangeCategoryResult('non_breaking')
104
+ result = NodeChange(category='non_breaking')
119
105
 
120
- # check if the upstream scopes is the same and not breaking
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.changed_columns.get(column_name)
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.changed_columns = changed_columns
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, ChangeCategoryResult]
265
- ) -> ChangeCategoryResult:
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.changed_columns.items():
283
- result.changed_columns[column_name] = column_change_status
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
- ) -> ChangeCategoryResult:
292
+ ) -> NodeChange:
296
293
  if old_sql == new_sql:
297
- return ChangeCategoryResult('non_breaking')
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] = ChangeCategoryResult('non_breaking')
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 = ChangeCategoryResult('non_breaking', changed_columns={})
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: recce-nightly
3
- Version: 0.61.0.20250413
3
+ Version: 0.61.0.20250415
4
4
  Summary: Environment diff tool for dbt
5
5
  Home-page: https://github.com/InfuseAI/recce
6
6
  Author: InfuseAI Dev Team
@@ -1,7 +1,7 @@
1
- recce/VERSION,sha256=ATqr7dmhW0FY6iYXPWy8hd0aqv2ZtiV8e1g0t_rKPlo,16
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=Tsm4X-5KADwVeYuvvQzAkWIkIoWhpQvHsp9aCcp5caY,34251
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=tJ-DOFS0cXOUuqtShpyLB6Dk98JxhUawR_D8Srhhz9A,16862
14
- recce/state.py,sha256=UGxGXmeIMi2CA2t0FSwHFlRD2l6ESbnsNstfEjkRVrQ,30738
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=ngLCaHVTXfC1YFdImVYHmxhT-owVOa_hfAr8IuO6KeQ,50302
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=OE0AGW769Bzysa3DFb7deke1m9hGhUwTbkKBC0y50sg,6204
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=XRUgJC6fjPOmsUmc4DEOv3sVNdeg7tRxwakgzGPvPNc,38922
29
- recce/data/index.txt,sha256=sbmpq8ybTulXmh5tNZEqWJN_4W21A1HfG8WpkJPSkTk,3283
30
- recce/data/_next/static/chunks/269-83bbdbcbd0cc1ddb.js,sha256=UhRJXQY7HhZP1MVqjK8tt8UzhXWNABSlzugwDiaE5mg,1256384
31
- recce/data/_next/static/chunks/29e3cc0d-6e3b0cf904a6874d.js,sha256=coxMNraKHS7chq4l2N3jRs77qfhaOYkEn-wjYI52ej8,700
32
- recce/data/_next/static/chunks/36e1c10d-800596efe83e74a6.js,sha256=rC1wLoI7fYSVwOWQwrjC5-HQes_Kvprg-KDb_o9gls4,7796
33
- recce/data/_next/static/chunks/38610ee6-24a85e2dfb424ddb.js,sha256=mEmrCU-1NpDT0XKDae30AfimQ0ua5-U7hyvdQmvpFwo,172836
34
- recce/data/_next/static/chunks/3998a672-63fc54b2b517ee2b.js,sha256=FGCC56vbjLMXkSrmx1k1wem--JxkweNfHRB_M_g6KLs,9024
35
- recce/data/_next/static/chunks/450c323b-b36e745822edebe2.js,sha256=aDIo8U-PAUN39504YtNAen5msGfbDQ1IFN9WViKBuqE,2205
36
- recce/data/_next/static/chunks/47d8844f-0516cea2ef568380.js,sha256=oIJtmtG3T8dogjlQoaG8lDhD7_Y8UEdoRJAKNzwrXu0,697
37
- recce/data/_next/static/chunks/6dc81886-9871b611a22bd997.js,sha256=Z4UqYKZXMSuTq6Ly-0Jg7vXGoNNAn6YMf7l-ZKCiT0w,69732
38
- recce/data/_next/static/chunks/783-784ce10322400a48.js,sha256=cG4j70-k-lSv7BN298AqQf6ZGCPlwd9SUKY3Qj9WE_c,124091
39
- recce/data/_next/static/chunks/7a8a3e83-dd26fafa0a7421e5.js,sha256=qiAntgxDDU8LEm3bxNJ1TG2g73tpdZ2FZgIzqa7pSrE,1649
40
- recce/data/_next/static/chunks/7f27ae6c-4ddea120696db611.js,sha256=eD4uzPHhrX8977lBDyO4y9r8vFmN7xg1H14mfUX_uWc,779
41
- recce/data/_next/static/chunks/9746af58-527fd8cbd2d17eee.js,sha256=slDCTqyccJ8EXQIZdKdNkmnSXHk3mjINtcZ5z4KrCj8,3750
42
- recce/data/_next/static/chunks/a30376cd-1ad5a3f522da896c.js,sha256=dpQcsAUDJncgdUIlKxaMXgJL_azE_JMIO-8hfi_RieU,797
43
- recce/data/_next/static/chunks/b63b1b3f-fe714039749c1250.js,sha256=pHMYEkMTtaA8vXTSKvTeIiM7Z01je9inPVw83nzEA-A,572
44
- recce/data/_next/static/chunks/c132bf7d-4cb4c4a123e27340.js,sha256=shk0wJFp17xMk81uoSUrQ9W5ymq3CaQoNod16TGTgu0,198536
45
- recce/data/_next/static/chunks/c1ceaa8b-64142a5184f1b8b2.js,sha256=G0hHtxLicndWk7zxR76UwwA80NGYMtI1xqw5i8uAAUE,81302
46
- recce/data/_next/static/chunks/cd9f8d63-543677b0ef49da87.js,sha256=eeKaViA5oAwZ-bfMupkxJDEXdAIkepK5UFDuwK-J7IY,82990
47
- recce/data/_next/static/chunks/ce84277d-4bca7695ec1ada94.js,sha256=ipbXN7-qWpzS0OOmdKrX_zy6SaL6CEOfJM2BIlLhTmg,2561
48
- recce/data/_next/static/chunks/e24bf851-5db5db8459b0b291.js,sha256=pUz5WXv04hfwcJmZPUUKcGF1TtLyGstGOBhSsSL0OGA,154151
49
- recce/data/_next/static/chunks/fee69bc6-1df8306af9d11293.js,sha256=WC53uxlzNaWtKhKtfvoNvmQRl0_FUvBErvZSxYxxPlE,484
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-7183c49fe89a1f9b.js,sha256=hGO6KmYiFGYhX59umEXmjWAt_sGZInlKC7bG-8pw8Z4,111199
52
- recce/data/_next/static/chunks/main-app-cfd795a5fe58bf37.js,sha256=ji1fWdFmy_ChGWgo00HNECzRui_DQGJATPP-ZEvwKQw,469
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-8a8709fe9d22c323.js,sha256=Hgz4tNS0XeU76Qce3QHfiNSaNERCAfiEu79UCwJslGw,3839
55
- recce/data/_next/static/chunks/app/layout-fdacc83a3bf974a3.js,sha256=go2MltZrsYzysEjqkHYz1fA6ftmMaRYMTNyQ4I04KJk,161
56
- recce/data/_next/static/chunks/app/page-35403e208468490c.js,sha256=S1uDqRu9oy3L0ZyMrf-mV3EVj6CiNiV3EgOglBKTA7s,203016
57
- recce/data/_next/static/chunks/app/_not-found/page-76f691066176b63a.js,sha256=b4ZJguQA6vDfcWFaw2fXfL9fo0DZfirbeOlA4o7S0BM,1750
58
- recce/data/_next/static/chunks/pages/_app-9f1049bbd7b90455.js,sha256=3qJYhzjjCOPEx_LpkPPeUwsHVlK_m7fXhaY8MR-H2_U,283
59
- recce/data/_next/static/chunks/pages/_error-71ed60313c005df1.js,sha256=_4EzYhelkRLMqFXsYponnqJ0h47TCnyzV5SYROuaORw,250
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=SRWX06fdpxkWSCpyEv7JmlEZLTmCMl8cObds7WsP860,2936
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=jo3kkrzKSAcoaH_vs6Lc7hv1-QOnA8TXIAn1Kja8lyE,12489
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=pR0TrtK3s617vmHn-19pvA4jpRZz0k5YUuGlpFYoarE,7094
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.20250413.dist-info/licenses/LICENSE,sha256=CQjjMy9aYPhfe8xG_bcpIfKtNkdxLZ5IOb8oPygtUhY,11343
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=J75kZPY5B4LdT2T9o61ljiAb2QPk198qVhbh6l4MZJo,769
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.20250413.dist-info/METADATA,sha256=hid5zh-TqJnT2_nk4it9w6_Scb3taedtfkd_grA4dYw,13240
136
- recce_nightly-0.61.0.20250413.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
137
- recce_nightly-0.61.0.20250413.dist-info/entry_points.txt,sha256=oqoY_IiwIqXbgrIsPnlqUqao2eiIeP2dprowkOlmeyg,40
138
- recce_nightly-0.61.0.20250413.dist-info/top_level.txt,sha256=6PKGVpf75idP0C6KEaldDzzZUauIxNu1ZDstau1pI4I,12
139
- recce_nightly-0.61.0.20250413.dist-info/RECORD,,
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.change_category == 'non-breaking'
27
+ assert nodediff2 is not None and nodediff2.change_status == 'modified' and nodediff2.change.category == 'non_breaking'