recce-nightly 0.60.0.20250401__py3-none-any.whl → 0.61.0.20250402__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 +3 -0
- recce/apis/run_func.py +1 -1
- recce/cli.py +37 -1
- recce/core.py +6 -2
- recce/data/404.html +1 -1
- recce/data/_next/static/chunks/app/page-35403e208468490c.js +1 -0
- recce/data/index.html +2 -2
- recce/data/index.txt +2 -2
- recce/server.py +15 -0
- {recce_nightly-0.60.0.20250401.dist-info → recce_nightly-0.61.0.20250402.dist-info}/METADATA +1 -1
- {recce_nightly-0.60.0.20250401.dist-info → recce_nightly-0.61.0.20250402.dist-info}/RECORD +19 -19
- recce/data/_next/static/chunks/app/page-83e2b669452cc10f.js +0 -1
- /recce/data/_next/static/{oiHvtE6fCoTL40AK4TRG4 → 6s0VXEhZ8lCaqRJRBRHag}/_buildManifest.js +0 -0
- /recce/data/_next/static/{oiHvtE6fCoTL40AK4TRG4 → 6s0VXEhZ8lCaqRJRBRHag}/_ssgManifest.js +0 -0
- /recce/data/_next/static/chunks/{269-9a6f1447f09759ef.js → 269-83bbdbcbd0cc1ddb.js} +0 -0
- {recce_nightly-0.60.0.20250401.dist-info → recce_nightly-0.61.0.20250402.dist-info}/WHEEL +0 -0
- {recce_nightly-0.60.0.20250401.dist-info → recce_nightly-0.61.0.20250402.dist-info}/entry_points.txt +0 -0
- {recce_nightly-0.60.0.20250401.dist-info → recce_nightly-0.61.0.20250402.dist-info}/licenses/LICENSE +0 -0
- {recce_nightly-0.60.0.20250401.dist-info → recce_nightly-0.61.0.20250402.dist-info}/top_level.txt +0 -0
recce/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.61.0.20250402
|
|
@@ -901,6 +901,9 @@ class DbtAdapter(BaseAdapter):
|
|
|
901
901
|
# provide a manifest to speedup and not pollute the manifest
|
|
902
902
|
compiled_sql = self.generate_sql(raw_code, base=base, context=jinja_context, provided_manifest=manifest)
|
|
903
903
|
dialect = self.adapter.type()
|
|
904
|
+
# find adapter type from the manifest, otherwise we use the adapter type from the adapter
|
|
905
|
+
if self.get_manifest(base).metadata.adapter_type is not None:
|
|
906
|
+
dialect = self.get_manifest(base).metadata.adapter_type
|
|
904
907
|
column_lineage = cll(compiled_sql, schema=schema, dialect=dialect)
|
|
905
908
|
except RecceException:
|
|
906
909
|
# TODO: provide parsing error message if needed
|
recce/apis/run_func.py
CHANGED
|
@@ -180,7 +180,7 @@ def materialize_run_results(runs: List[Run], nodes: List[str] = None):
|
|
|
180
180
|
|
|
181
181
|
context = default_context()
|
|
182
182
|
if context:
|
|
183
|
-
mame_to_unique_id = context.build_name_to_unique_id_index()
|
|
183
|
+
mame_to_unique_id = context.build_name_to_unique_id_index(excluded_types={'semantic_model', 'metric'})
|
|
184
184
|
else:
|
|
185
185
|
mame_to_unique_id = {}
|
|
186
186
|
|
recce/cli.py
CHANGED
|
@@ -15,7 +15,7 @@ from recce.state import RecceStateLoader, RecceCloudStateManager
|
|
|
15
15
|
from recce.summary import generate_markdown_summary
|
|
16
16
|
from recce.util.logger import CustomFormatter
|
|
17
17
|
from recce.util.recce_cloud import RecceCloudException, get_recce_cloud_onboarding_state
|
|
18
|
-
from .core import RecceContext
|
|
18
|
+
from .core import RecceContext, set_default_context
|
|
19
19
|
from .event.track import TrackCommand
|
|
20
20
|
|
|
21
21
|
event.init()
|
|
@@ -751,5 +751,41 @@ def artifact(**kwargs):
|
|
|
751
751
|
return recce_ci_artifact(**kwargs)
|
|
752
752
|
|
|
753
753
|
|
|
754
|
+
@cli.command(hidden=True, cls=TrackCommand)
|
|
755
|
+
@click.argument('state_file', required=True)
|
|
756
|
+
@click.option('--host', default='localhost', show_default=True, help='The host to bind to.')
|
|
757
|
+
@click.option('--port', default=8000, show_default=True, help='The port to bind to.', type=int)
|
|
758
|
+
def read_only(host, port, state_file=None, **kwargs):
|
|
759
|
+
|
|
760
|
+
from .server import app, AppState
|
|
761
|
+
from rich.console import Console
|
|
762
|
+
|
|
763
|
+
console = Console()
|
|
764
|
+
handle_debug_flag(**kwargs)
|
|
765
|
+
is_review = True
|
|
766
|
+
is_cloud = False
|
|
767
|
+
cloud_options = None
|
|
768
|
+
flag = {
|
|
769
|
+
'read_only': True,
|
|
770
|
+
}
|
|
771
|
+
state_loader = create_state_loader(is_review, is_cloud, state_file, cloud_options)
|
|
772
|
+
|
|
773
|
+
if not state_loader.verify():
|
|
774
|
+
error, hint = state_loader.error_and_hint
|
|
775
|
+
console.print(f"[[red]Error[/red]] {error}")
|
|
776
|
+
console.print(f"{hint}")
|
|
777
|
+
exit(1)
|
|
778
|
+
|
|
779
|
+
result, message = RecceContext.verify_required_artifacts(**kwargs, review=is_review)
|
|
780
|
+
if not result:
|
|
781
|
+
console.print(f"[[red]Error[/red]] {message}")
|
|
782
|
+
exit(1)
|
|
783
|
+
|
|
784
|
+
app.state = AppState(state_loader=state_loader, kwargs=kwargs, flag=flag)
|
|
785
|
+
set_default_context(RecceContext.load(**kwargs, review=is_review, state_loader=state_loader))
|
|
786
|
+
|
|
787
|
+
uvicorn.run(app, host=host, port=port, lifespan='off')
|
|
788
|
+
|
|
789
|
+
|
|
754
790
|
if __name__ == "__main__":
|
|
755
791
|
cli()
|
recce/core.py
CHANGED
|
@@ -3,7 +3,7 @@ import json
|
|
|
3
3
|
import logging
|
|
4
4
|
import os
|
|
5
5
|
from dataclasses import dataclass, field
|
|
6
|
-
from typing import Callable, Dict, Optional, List, Tuple
|
|
6
|
+
from typing import Callable, Dict, Optional, List, Tuple, Set
|
|
7
7
|
|
|
8
8
|
from recce.adapter.base import BaseAdapter
|
|
9
9
|
from recce.models import Check, Run
|
|
@@ -71,14 +71,18 @@ class RecceContext:
|
|
|
71
71
|
def get_lineage_diff(self) -> LineageDiff:
|
|
72
72
|
return self.adapter.get_lineage_diff()
|
|
73
73
|
|
|
74
|
-
def build_name_to_unique_id_index(self) -> Dict[str, str]:
|
|
74
|
+
def build_name_to_unique_id_index(self, excluded_types: Set = None) -> Dict[str, str]:
|
|
75
75
|
name_to_unique_id = {}
|
|
76
76
|
curr = self.get_lineage(base=False)
|
|
77
77
|
base = self.get_lineage(base=True)
|
|
78
78
|
|
|
79
79
|
for unique_id, node in curr['nodes'].items():
|
|
80
|
+
if excluded_types and node.get('resource_type') in excluded_types:
|
|
81
|
+
continue
|
|
80
82
|
name_to_unique_id[node['name']] = unique_id
|
|
81
83
|
for unique_id, node in base['nodes'].items():
|
|
84
|
+
if excluded_types and node.get('resource_type') in excluded_types:
|
|
85
|
+
continue
|
|
82
86
|
name_to_unique_id[node['name']] = unique_id
|
|
83
87
|
return name_to_unique_id
|
|
84
88
|
|
recce/data/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-8a8709fe9d22c323.js"/><script src="/_next/static/chunks/38610ee6-24a85e2dfb424ddb.js" async=""></script><script src="/_next/static/chunks/783-784ce10322400a48.js" async=""></script><script src="/_next/static/chunks/main-app-cfd795a5fe58bf37.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>recce</title><meta name="description" content="Recce: Data validation toolkit for comprehensive PR review"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-8a8709fe9d22c323.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:I[83798,[],\"\"]\n3:I[26375,[],\"\"]\n4:I[22587,[],\"\"]\na:I[114,[],\"\"]\n5:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n6:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n7:{\"display\":\"inline-block\"}\n8:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nb:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L1\",null,{\"buildId\":\"
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-8a8709fe9d22c323.js"/><script src="/_next/static/chunks/38610ee6-24a85e2dfb424ddb.js" async=""></script><script src="/_next/static/chunks/783-784ce10322400a48.js" async=""></script><script src="/_next/static/chunks/main-app-cfd795a5fe58bf37.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>recce</title><meta name="description" content="Recce: Data validation toolkit for comprehensive PR review"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-8a8709fe9d22c323.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:I[83798,[],\"\"]\n3:I[26375,[],\"\"]\n4:I[22587,[],\"\"]\na:I[114,[],\"\"]\n5:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n6:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n7:{\"display\":\"inline-block\"}\n8:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nb:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L1\",null,{\"buildId\":\"6s0VXEhZ8lCaqRJRBRHag\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L2\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$5\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$6\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$7\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$8\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$L9\"],\"globalErrorComponent\":\"$a\",\"missingSlots\":\"$Wb\"}]\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"recce\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Recce: Data validation toolkit for comprehensive PR review\"}]]\n2:null\n"])</script></body></html>
|