recce-nightly 1.10.0.20250629__py3-none-any.whl → 1.25.0.20251112a2066__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.
- recce/VERSION +1 -1
- recce/__init__.py +5 -0
- recce/adapter/dbt_adapter/__init__.py +116 -74
- recce/artifact.py +76 -3
- recce/cli.py +665 -69
- recce/config.py +2 -2
- recce/connect_to_cloud.py +1 -1
- recce/core.py +3 -3
- recce/data/404.html +1 -22
- recce/data/__next.__PAGE__.txt +10 -0
- recce/data/__next._full.txt +23 -0
- recce/data/__next._index.txt +8 -0
- recce/data/__next._tree.txt +12 -0
- recce/data/_next/static/6LypcDXgyuSaiSCrsmUub/_buildManifest.js +11 -0
- recce/data/_next/static/6LypcDXgyuSaiSCrsmUub/_clientMiddlewareManifest.json +1 -0
- recce/data/_next/static/chunks/0a2b2dd4b57049c2.js +1 -0
- recce/data/_next/static/chunks/19c10d219a6a21ff.js +1 -0
- recce/data/_next/static/chunks/24fd885c7180a612.js +1 -0
- recce/data/_next/static/chunks/27e66b2eab4adc32.js +19 -0
- recce/data/_next/static/chunks/71f88fcc615bf282.js +1 -0
- recce/data/_next/static/chunks/917619ab62a32388.js +1 -0
- recce/data/_next/static/chunks/93ba5a62932b704f.js +4 -0
- recce/data/_next/static/chunks/a43a2a5e06d5a92b.js +1 -0
- recce/data/_next/static/chunks/a6c78b24bd8b84fc.js +1 -0
- recce/data/_next/static/chunks/b2610ba997ff8c4f.js +110 -0
- recce/data/_next/static/chunks/ba2d87265a68599d.css +2 -0
- recce/data/_next/static/chunks/c117fd1c1382dd83.js +11 -0
- recce/data/_next/static/chunks/c9425ca46eebdde9.js +1 -0
- recce/data/_next/static/chunks/cc8a9eadba012be0.css +6 -0
- recce/data/_next/static/chunks/e124bccf574a3361.css +1 -0
- recce/data/_next/static/chunks/e392ad92847c3e17.js +1 -0
- recce/data/_next/static/chunks/e4ce95efe88dae79.js +11 -0
- recce/data/_next/static/chunks/e69c777814fea6ed.js +2 -0
- recce/data/_next/static/chunks/turbopack-21cfd73037ff57ab.js +3 -0
- recce/data/_next/static/media/favicon.a8d38d84.ico +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.d80d830d.woff2 +0 -0
- recce/data/_next/static/media/{montserrat-cyrillic-800-normal.bd5c9f50.woff → montserrat-cyrillic-800-normal.f9d58125.woff} +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2 +0 -0
- recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2 +0 -0
- recce/data/_next/static/media/{montserrat-latin-800-normal.fc315020.woff → montserrat-latin-800-normal.d5761935.woff} +0 -0
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.40ec0659.woff2 +0 -0
- recce/data/_next/static/media/{montserrat-latin-ext-800-normal.2e5381b2.woff → montserrat-latin-ext-800-normal.b671449b.woff} +0 -0
- recce/data/_next/static/media/{montserrat-vietnamese-800-normal.20c545e6.woff → montserrat-vietnamese-800-normal.9f7b8541.woff} +0 -0
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.f9eb854e.woff2 +0 -0
- recce/data/_not-found/__next._full.txt +17 -0
- recce/data/_not-found/__next._index.txt +8 -0
- recce/data/_not-found/__next._not-found.__PAGE__.txt +5 -0
- recce/data/_not-found/__next._not-found.txt +4 -0
- recce/data/_not-found/__next._tree.txt +10 -0
- recce/data/_not-found.html +1 -0
- recce/data/_not-found.txt +17 -0
- recce/data/auth_callback.html +1 -1
- recce/data/index.html +1 -27
- recce/data/index.txt +23 -8
- recce/event/__init__.py +9 -8
- recce/event/collector.py +6 -2
- recce/event/track.py +10 -0
- recce/github.py +1 -1
- recce/mcp_server.py +632 -0
- recce/models/types.py +23 -2
- recce/pull_request.py +1 -1
- recce/run.py +23 -16
- recce/server.py +165 -11
- recce/state/__init__.py +31 -0
- recce/state/cloud.py +632 -0
- recce/state/const.py +26 -0
- recce/state/local.py +56 -0
- recce/state/state.py +119 -0
- recce/state/state_loader.py +174 -0
- recce/summary.py +2 -1
- recce/tasks/dataframe.py +59 -2
- recce/tasks/rowcount.py +4 -1
- recce/tasks/schema.py +4 -1
- recce/tasks/valuediff.py +1 -1
- recce/util/api_token.py +11 -2
- recce/util/breaking.py +9 -0
- recce/util/cll.py +1 -2
- recce/util/io.py +2 -2
- recce/util/lineage.py +14 -18
- recce/util/perf_tracking.py +85 -0
- recce/util/recce_cloud.py +229 -5
- recce/yaml/__init__.py +2 -2
- recce_cloud/__init__.py +15 -0
- recce_cloud/api/__init__.py +17 -0
- recce_cloud/api/base.py +104 -0
- recce_cloud/api/client.py +150 -0
- recce_cloud/api/exceptions.py +26 -0
- recce_cloud/api/factory.py +63 -0
- recce_cloud/api/github.py +72 -0
- recce_cloud/api/gitlab.py +78 -0
- recce_cloud/artifact.py +57 -0
- recce_cloud/ci_providers/__init__.py +9 -0
- recce_cloud/ci_providers/base.py +82 -0
- recce_cloud/ci_providers/detector.py +147 -0
- recce_cloud/ci_providers/github_actions.py +136 -0
- recce_cloud/ci_providers/gitlab_ci.py +130 -0
- recce_cloud/cli.py +303 -0
- recce_cloud/upload.py +213 -0
- {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/METADATA +31 -27
- recce_nightly-1.25.0.20251112a2066.dist-info/RECORD +178 -0
- {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/top_level.txt +1 -0
- tests/adapter/dbt_adapter/test_dbt_cll.py +68 -17
- tests/recce_cloud/__init__.py +0 -0
- tests/recce_cloud/test_ci_providers.py +351 -0
- tests/recce_cloud/test_cli.py +372 -0
- tests/recce_cloud/test_client.py +273 -0
- tests/recce_cloud/test_platform_clients.py +279 -0
- tests/test_cli.py +106 -3
- tests/test_cli_mcp_optional.py +45 -0
- tests/test_cloud_listing_cli.py +324 -0
- tests/test_core.py +147 -0
- tests/test_mcp_server.py +332 -0
- tests/test_server.py +6 -6
- tests/test_summary.py +14 -6
- recce/data/_next/static/Mrb9CZ3toH6Q8xrzNzCrg/_buildManifest.js +0 -1
- recce/data/_next/static/chunks/181-acc61ddada3bc0ca.js +0 -43
- recce/data/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js +0 -1
- recce/data/_next/static/chunks/217-879a84d70f7a907c.js +0 -2
- recce/data/_next/static/chunks/29e3cc0d-60045b2e47aa3916.js +0 -1
- recce/data/_next/static/chunks/36e1c10d-8e7be4a6c1f6ab2d.js +0 -1
- recce/data/_next/static/chunks/3998a672-03adacad07b346ac.js +0 -1
- recce/data/_next/static/chunks/3a92ee20-1081c360214f9602.js +0 -1
- recce/data/_next/static/chunks/41-f30276c289169376.js +0 -9
- recce/data/_next/static/chunks/450c323b-fd94e7ffaa4a5efa.js +0 -1
- recce/data/_next/static/chunks/47d8844f-929aed9b1c73a905.js +0 -1
- recce/data/_next/static/chunks/608-3b079b544e5d5f5e.js +0 -15
- recce/data/_next/static/chunks/6dc81886-adbfa45836061d79.js +0 -1
- recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js +0 -1
- recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js +0 -1
- recce/data/_next/static/chunks/86730205-cfb14e3f051bab35.js +0 -1
- recce/data/_next/static/chunks/8d700b6a.8bb140898499c512.js +0 -1
- recce/data/_next/static/chunks/92-68460b15fe448f33.js +0 -1
- recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js +0 -1
- recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js +0 -1
- recce/data/_next/static/chunks/app/_not-found/page-01ed58b7f971d311.js +0 -1
- recce/data/_next/static/chunks/app/layout-292f035bb0d2a98e.js +0 -1
- recce/data/_next/static/chunks/app/page-598f8acc82179d01.js +0 -1
- recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js +0 -1
- recce/data/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js +0 -1
- recce/data/_next/static/chunks/c132bf7d-08cb668a789d6afd.js +0 -1
- recce/data/_next/static/chunks/ce84277d-2e5d1d46910cf052.js +0 -1
- recce/data/_next/static/chunks/febdd86e-c6b525341634b860.js +0 -54
- recce/data/_next/static/chunks/fee69bc6-2dbccaf9b90474e6.js +0 -1
- recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -1
- recce/data/_next/static/chunks/main-app-39061b0166c47f55.js +0 -1
- recce/data/_next/static/chunks/main-b5b3ae20a1405261.js +0 -1
- recce/data/_next/static/chunks/pages/_app-437c455677d62394.js +0 -1
- recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js +0 -1
- recce/data/_next/static/chunks/webpack-7b49d5ba7e3a434d.js +0 -1
- recce/data/_next/static/css/17a96168e3a9db13.css +0 -1
- recce/data/_next/static/css/35c6679a098e1e34.css +0 -1
- recce/data/_next/static/css/951e2e0eea2d4a5b.css +0 -14
- recce/data/_next/static/css/a2b12b4ba4227f0a.css +0 -3
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
- recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
- recce/state.py +0 -786
- recce_nightly-1.10.0.20250629.dist-info/RECORD +0 -154
- tests/test_state.py +0 -134
- /recce/data/_next/static/{Mrb9CZ3toH6Q8xrzNzCrg → 6LypcDXgyuSaiSCrsmUub}/_ssgManifest.js +0 -0
- /recce/data/_next/static/chunks/{polyfills-42372ed130431b0a.js → a6dad97d9634a72d.js} +0 -0
- /recce/data/_next/static/media/{montserrat-cyrillic-ext-800-normal.e6e0d8d0.woff → montserrat-cyrillic-ext-800-normal.a4fa76b5.woff} +0 -0
- /recce/data/_next/static/media/{reload-image.79aabb7d.svg → reload-image.7aa931c7.svg} +0 -0
- {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/WHEEL +0 -0
- {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/entry_points.txt +0 -0
- {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/licenses/LICENSE +0 -0
{recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: recce-nightly
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.25.0.20251112a2066
|
|
4
4
|
Summary: Environment diff tool for dbt
|
|
5
5
|
Home-page: https://github.com/InfuseAI/recce
|
|
6
6
|
Author: InfuseAI Dev Team
|
|
@@ -21,7 +21,7 @@ Requires-Dist: boto3
|
|
|
21
21
|
Requires-Dist: requests>=2.28.1
|
|
22
22
|
Requires-Dist: ruamel.yaml>=0.18.6
|
|
23
23
|
Requires-Dist: click>=7.1
|
|
24
|
-
Requires-Dist: deepdiff<
|
|
24
|
+
Requires-Dist: deepdiff<9.0,>=7.0
|
|
25
25
|
Requires-Dist: portalocker
|
|
26
26
|
Requires-Dist: fastapi
|
|
27
27
|
Requires-Dist: itsdangerous
|
|
@@ -39,8 +39,13 @@ Requires-Dist: python-multipart
|
|
|
39
39
|
Requires-Dist: GitPython
|
|
40
40
|
Requires-Dist: PyGithub
|
|
41
41
|
Requires-Dist: sqlglot
|
|
42
|
+
Requires-Dist: pytz
|
|
43
|
+
Requires-Dist: packaging
|
|
44
|
+
Provides-Extra: mcp
|
|
45
|
+
Requires-Dist: mcp>=1.0.0; extra == "mcp"
|
|
42
46
|
Provides-Extra: dev
|
|
43
47
|
Requires-Dist: pytest>=4.6; extra == "dev"
|
|
48
|
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
44
49
|
Requires-Dist: pytest-flake8; extra == "dev"
|
|
45
50
|
Requires-Dist: black>=25.1.0; extra == "dev"
|
|
46
51
|
Requires-Dist: isort>=6.0.1; extra == "dev"
|
|
@@ -66,11 +71,11 @@ Dynamic: requires-python
|
|
|
66
71
|
Dynamic: summary
|
|
67
72
|
|
|
68
73
|
<p align="center">
|
|
69
|
-
<a href="https://
|
|
74
|
+
<a href="https://reccehq.com">
|
|
70
75
|
<picture>
|
|
71
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://
|
|
72
|
-
<source media="(prefers-color-scheme: light)" srcset="https://
|
|
73
|
-
<img alt="Recce: DataRecce.io" src="https://
|
|
76
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://reccehq.com/assets/images/recce-logo-stacked.avif">
|
|
77
|
+
<source media="(prefers-color-scheme: light)" srcset="https://reccehq.com/assets/images/recce-logo-stacked.avif">
|
|
78
|
+
<img alt="Recce: DataRecce.io" src="https://reccehq.com/assets/images/recce-logo-stacked.avif" width="200" style="display: block; margin: 0 auto 20px;">
|
|
74
79
|
</picture>
|
|
75
80
|
</a>
|
|
76
81
|
</p>
|
|
@@ -106,17 +111,17 @@ You can launch Recce in any dbt project in just two commands:
|
|
|
106
111
|
pip install -U recce
|
|
107
112
|
recce server
|
|
108
113
|
```
|
|
109
|
-
This starts Recce locally, where you can explore lineage and run queries. To unlock the full set of diffing tools, such as data comparisons and impact checks, you’ll need to prepare two environments to compare against. You can follow our [Getting Started](https://docs.
|
|
114
|
+
This starts Recce locally, where you can explore lineage and run queries. To unlock the full set of diffing tools, such as data comparisons and impact checks, you’ll need to prepare two environments to compare against. You can follow our [Getting Started](https://docs.reccehq.com/get-started/) and [5-minute Jaffle Shop tutorial](https://docs.reccehq.com/get-started-jaffle-shop/) to try it out step-by-step.
|
|
110
115
|
|
|
111
116
|
## What You Get
|
|
112
117
|
|
|
113
118
|
Recce gives you a clear, fast way to understand what your data changes are doing and why they matter. It helps you catch problems early, verify metrics, and share your findings with others, all as part of your normal workflow.
|
|
114
119
|
|
|
115
|
-
<a href="https://pr46.demo.
|
|
120
|
+
<a href="https://pr46.demo.reccehq.com/"><img width="1347" alt="readme" src="https://github.com/user-attachments/assets/773e4c3a-0a15-49e0-8d1b-38a55af17cb0" /></a>
|
|
116
121
|
|
|
117
|
-
<a href="https://
|
|
122
|
+
<a href="https://reccehq.com"><img src="https://docs.reccehq.com/assets/images/1-whats-recce/diff-readme2.png" style="width: 100%; max-width: 600px; display: block; margin: 0 auto 20px;" alt="Model and column level diff"/></a>
|
|
118
123
|
|
|
119
|
-
<a href="https://
|
|
124
|
+
<a href="https://reccehq.com"><img src="https://docs.reccehq.com/assets/images/1-whats-recce/checklist-readme3.png" style="width: 100%; max-width: 600px; display: block; margin: 0 auto 20px;" alt="Checklist for collaboration"/></a>
|
|
120
125
|
|
|
121
126
|
### Using Recce for Impact Assessment in dbt PR Review
|
|
122
127
|
|
|
@@ -127,18 +132,17 @@ Recce gives you a clear, fast way to understand what your data changes are doing
|
|
|
127
132
|
- (`Recce Cloud`) Automatically sync Check status between Recce Instances
|
|
128
133
|
- (`Recce Cloud`) Block PR merging until all Recce Checks have been approved
|
|
129
134
|
|
|
130
|
-
Read more about using
|
|
131
|
-
the Recce blog.
|
|
135
|
+
Read more about using Recce on our [blog](https://blog.reccehq.com).
|
|
132
136
|
|
|
133
137
|
### What’s Included
|
|
134
138
|
|
|
135
|
-
- [Lineage and impact mapping](https://docs.
|
|
136
|
-
- Metric and data comparisons: Use [Profile, Value, Top-K, and Histogram Diffs](https://docs.
|
|
137
|
-
- [Query diff](https://docs.
|
|
138
|
-
- [Checklist for reviews and approvals](https://docs.
|
|
139
|
-
- Secure by design: Recce is [SOC 2 compliant](https://trust.
|
|
139
|
+
- [Lineage and impact mapping](https://docs.reccehq.com/features/lineage/): Quickly see which models and columns are affected by a change. Navigate lineage down to the column level, and spot breaking changes with clear visual cues.
|
|
140
|
+
- Metric and data comparisons: Use [Profile, Value, Top-K, and Histogram Diffs](https://docs.reccehq.com/features/lineage/#node-details) to compare results before and after changes. Validate things like row counts, category distributions, and numeric ranges without writing extra SQL.
|
|
141
|
+
- [Query diff](https://docs.reccehq.com/features/query/): Write and compare any two queries side by side. This is helpful when validating fixes or reviewing changes with teammates.
|
|
142
|
+
- [Checklist for reviews and approvals](https://docs.reccehq.com/features/checklist/): Turn your validation steps into a checklist. Add notes, rerun checks, and share the results with reviewers or stakeholders. In Recce Cloud, checklists can sync automatically and even block PRs until checks are approved.
|
|
143
|
+
- Secure by design: Recce is [SOC 2 compliant](https://trust.reccehq.com/) to meet enterprise security standards. It runs locally or in your private environment, and your data stays in your warehouse.
|
|
140
144
|
|
|
141
|
-
👉 Want to dive deeper? Check out the [full documentation](https://docs.
|
|
145
|
+
👉 Want to dive deeper? Check out the [full documentation](https://docs.reccehq.com/).
|
|
142
146
|
|
|
143
147
|
## Recce Cloud
|
|
144
148
|
|
|
@@ -150,26 +154,26 @@ Ready to collaborate and move faster as a team? Recce Cloud adds real-time colla
|
|
|
150
154
|
- Launch demo links from your CI with full context
|
|
151
155
|
|
|
152
156
|
Recce Cloud is a hosted version of Recce that standardizes your workflow, keeps teams aligned, and reduces errors—so you can ship data changes with confidence.
|
|
153
|
-
👉 [View Pricing and Plans](https://
|
|
157
|
+
👉 [View Pricing and Plans](https://reccehq.com/pricing)
|
|
154
158
|
|
|
155
159
|
## Community & Support
|
|
156
160
|
|
|
157
|
-
Here's where you can get in touch with the Recce team and find support:
|
|
161
|
+
Here's where you can get in touch with the Recce team and find support, add a subscribe to our newsletter option as well:
|
|
158
162
|
|
|
159
|
-
- [
|
|
160
|
-
|
|
161
|
-
-
|
|
163
|
+
- [chat on our website](https://reccehq.com/). We welcome you to start a chat or drop us a note. Our team monitors the chat box and will follow up soon.
|
|
164
|
+
- [Our discord](https://discord.com/invite/VpwXRC34jz)
|
|
165
|
+
- [dbt Slack](https://www.getdbt.com/community/join-the-community) in the [#tools-recce](https://getdbt.slack.com/archives/C05C28V7CPP) channel
|
|
166
|
+
- Email us [help@reccehq.com](mailto:help@reccehq.com)
|
|
162
167
|
|
|
163
|
-
If you believe you have found a bug, or there is some missing functionality in Recce, please open
|
|
164
|
-
a [GitHub Issue](https://github.com/DataRecce/recce/issues).
|
|
168
|
+
If you believe you have found a bug on our open source, or there is some missing functionality in Recce, please open a [GitHub Issue](https://github.com/DataRecce/recce/issues).
|
|
165
169
|
|
|
166
170
|
## Recce on the web
|
|
167
171
|
|
|
168
172
|
You can follow along with news about Recce and blogs from our team in the following places:
|
|
169
173
|
|
|
170
|
-
- [
|
|
174
|
+
- [RecceHQ.com](https://reccehq.com/)
|
|
171
175
|
- [LinkedIn](https://www.linkedin.com/company/datarecce)
|
|
172
|
-
- [
|
|
176
|
+
- [Blog](https://blog.reccehq.com/)
|
|
173
177
|
- [@datarecce](https://x.com/DataRecce) on Twitter/X
|
|
174
178
|
- [@DataRecce@mastodon.social](https://mastodon.social/@DataRecce) on Mastodon
|
|
175
179
|
- [@datarecce.bsky.social](https://bsky.app/profile/datarecce.bsky.social) on BlueSky
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
recce/VERSION,sha256=yOEdv-w_6Drd_fli9SfUZI7yDVeGwPfUNEjkDCpyc0E,21
|
|
2
|
+
recce/__init__.py,sha256=gT5G7sJ78C1GHAWr4pna6UvVNxPKs29_EgFS_ia3DT4,2554
|
|
3
|
+
recce/artifact.py,sha256=zksgrKEONdMmBRgM59gzf6srsr0As_UADZTQrWfC2cE,9759
|
|
4
|
+
recce/cli.py,sha256=s1KXgjXzwaKh5YDHYOWcabObTSMQ_yf0d6wDe4bxNK4,59860
|
|
5
|
+
recce/config.py,sha256=noWimlOdGHAtBhNoApK5gRTQMwNPmUGAmZu39MV7szo,4697
|
|
6
|
+
recce/connect_to_cloud.py,sha256=CT7ELcVCTNa9ukSp_gMrJ0Av2UCUpF9H03tIk9y7U-4,4768
|
|
7
|
+
recce/core.py,sha256=Fph2kodFqzXy3cob80M9-nPVcv-Xxzme-E-bKFJ4cBQ,10754
|
|
8
|
+
recce/diff.py,sha256=L2_bzQ3__PO-0aeir8PHF8FvSOUmQ8WcDXgML1-mHdY,748
|
|
9
|
+
recce/exceptions.py,sha256=SclQ678GrHGjw7p_ZFJ3vZaL_yMU5xABeIAm2u_W2bk,592
|
|
10
|
+
recce/git.py,sha256=8Eg-6NzL-KjA3rT-ibbAyaCwGlzV0JqH3yGikrJNMDA,2344
|
|
11
|
+
recce/github.py,sha256=vIwHTpB8YWEUcHQlW0nToUUKmGGO0NcmB_Q5RvxQLLE,7438
|
|
12
|
+
recce/mcp_server.py,sha256=cs1wXtGjTyZsy7xyiRvMlkY78HmbQ2N8JzYfOvkREZ0,27236
|
|
13
|
+
recce/pull_request.py,sha256=dLHsdiMtL4NC6Vkwp8Mq4baJmnqbm19lfiDti9MREN0,3850
|
|
14
|
+
recce/run.py,sha256=ctp-K2FmrsGrS4xEZKDMbMtitNw2QKJ6Tq_0OvCWaaM,14080
|
|
15
|
+
recce/server.py,sha256=xQZzSzwFrZE4C8s441MeRW_mnHNkeM_lqesMpjaXDQk,27093
|
|
16
|
+
recce/summary.py,sha256=OZ0YY68ErlCown0XGxFhuFBetQB-kQOZcjxogBGQUyQ,19218
|
|
17
|
+
recce/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
recce/adapter/base.py,sha256=T_JNeLHgiHSaegw-DbrvHOaYjMyZcjj2Qtg5cWh_fco,3548
|
|
19
|
+
recce/adapter/sqlmesh_adapter.py,sha256=IU3N-F6ToDoO7_bV5vsG8pmTuDcbFtewTIuCxedTaRM,5046
|
|
20
|
+
recce/adapter/dbt_adapter/__init__.py,sha256=DdsxMKC-2OTttgx4dRK8u4_oW4ijxA_geJQAWB39Z4w,67239
|
|
21
|
+
recce/adapter/dbt_adapter/dbt_version.py,sha256=M7aedZIWslXnJsryK8Ki4OL_t2oAKxy4uE2pRwfWIkk,1228
|
|
22
|
+
recce/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
+
recce/apis/check_api.py,sha256=KMCXSMl1qqzx2jQgRqCrD4j_cY3EHBbM3H2-t-6saAU,6227
|
|
24
|
+
recce/apis/check_func.py,sha256=gktbCcyk3WGvWRJJ-wDnwv7NrIny2nTHWLl1-kdiVRo,4183
|
|
25
|
+
recce/apis/run_api.py,sha256=eOaxOxXDkH59uqGCd4blld7edavUx7JU_DCd2WAYrL8,3416
|
|
26
|
+
recce/apis/run_func.py,sha256=6wC8TDU-h7TLr2VZH7HNsWaUVlQ9HBN5N_dwqfi4lMY,7440
|
|
27
|
+
recce/data/404.html,sha256=2x6RXC1tACA9nsD2WzokGkgW3BeM2Ox8y5RTmOGHduU,59361
|
|
28
|
+
recce/data/__next.__PAGE__.txt,sha256=gVFBfABVE0N9lVs2LIxUnDPY7mSpq5rWBOMxR2Rd3FU,1208
|
|
29
|
+
recce/data/__next._full.txt,sha256=ANjvvTdO8ur2zKIaqCnB-l74LwSZTPtQj16DVtq4TYA,5168
|
|
30
|
+
recce/data/__next._index.txt,sha256=7BRJpJA6MnaNBb7IeZadSCv0p-1y-ckFtyToFPzxj_M,2441
|
|
31
|
+
recce/data/__next._tree.txt,sha256=ggWFSsabE_mb02kDd3tLFe89WTR5A6aqMZdTWvEu-F8,1512
|
|
32
|
+
recce/data/_not-found.html,sha256=2x6RXC1tACA9nsD2WzokGkgW3BeM2Ox8y5RTmOGHduU,59361
|
|
33
|
+
recce/data/_not-found.txt,sha256=XFDqPcWGpyWEcYSCSCM0gkkQ7LRqCToStuXEA_smBRM,5897
|
|
34
|
+
recce/data/auth_callback.html,sha256=H-XfdlAFiw5VU2RpKBVQbwh1AIqJrPHrFA0S09nNJZA,94779
|
|
35
|
+
recce/data/favicon.ico,sha256=B2mBumUOnzvUrXrqNkrc5QfdDXjzEXRcWkWur0fJ6sM,2565
|
|
36
|
+
recce/data/index.html,sha256=2Y51sCnTpGvhwBZP376wGzyDKQne73-5cCuu5rieS-Y,74305
|
|
37
|
+
recce/data/index.txt,sha256=ANjvvTdO8ur2zKIaqCnB-l74LwSZTPtQj16DVtq4TYA,5168
|
|
38
|
+
recce/data/_next/static/6LypcDXgyuSaiSCrsmUub/_buildManifest.js,sha256=lHbgr9P52mimTm7FhjEZH9PqymLJ9aN351F_6aieWeo,219
|
|
39
|
+
recce/data/_next/static/6LypcDXgyuSaiSCrsmUub/_clientMiddlewareManifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
|
|
40
|
+
recce/data/_next/static/6LypcDXgyuSaiSCrsmUub/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
|
41
|
+
recce/data/_next/static/chunks/0a2b2dd4b57049c2.js,sha256=Pu0sHoaerWbXCnbkMeTmbb9X11IWpAsEwN9ezpPzmSA,20110
|
|
42
|
+
recce/data/_next/static/chunks/19c10d219a6a21ff.js,sha256=ohhihO1BmJTnfQWLePPxbEs5Cr8sR3rCWAljeiy2mCc,178
|
|
43
|
+
recce/data/_next/static/chunks/24fd885c7180a612.js,sha256=wohv9qtxXaJBvMOiWy0ZbuckzgQBNpSGZXBlw2KLMWQ,174689
|
|
44
|
+
recce/data/_next/static/chunks/27e66b2eab4adc32.js,sha256=ZwKFx70eyCz1awk6oUOi2WZ60OWMBvjENkWh1XcCO2k,220769
|
|
45
|
+
recce/data/_next/static/chunks/71f88fcc615bf282.js,sha256=55RlXxwna_yDR1-s8uK-GZv1IUOVhCGB8rULcz75S3U,7218
|
|
46
|
+
recce/data/_next/static/chunks/917619ab62a32388.js,sha256=SOayxnQL-lT_gvqrVxm9gVrR_pf6JxTBS4ZtB3REsFw,1386
|
|
47
|
+
recce/data/_next/static/chunks/93ba5a62932b704f.js,sha256=0peG3GPnXAEPxPodRfpgXOKrsu9LSWKJdgRrvf60J_o,98320
|
|
48
|
+
recce/data/_next/static/chunks/a43a2a5e06d5a92b.js,sha256=SkmXZLNalUBIlElfXqH57-41l7emgRUEv--uPDlk5J4,119836
|
|
49
|
+
recce/data/_next/static/chunks/a6c78b24bd8b84fc.js,sha256=-9ubpiN6c-jyAcbuuuOhYhh1IABdrwRoPW357JNN7_E,27852
|
|
50
|
+
recce/data/_next/static/chunks/a6dad97d9634a72d.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
|
|
51
|
+
recce/data/_next/static/chunks/b2610ba997ff8c4f.js,sha256=C6LeK2FJj3aJ6E5UsIlbji1UgW2U-kujGkCOSQkqidg,802630
|
|
52
|
+
recce/data/_next/static/chunks/ba2d87265a68599d.css,sha256=7UwDTAlsoGfU5Pvt0Kr5NGwBXYoJwU3Pr81bIigwWLU,8282
|
|
53
|
+
recce/data/_next/static/chunks/c117fd1c1382dd83.js,sha256=ox8yTTv83DmzIgpdVIp0LL67SkeoTbYUZvUoDRzlxqM,1752021
|
|
54
|
+
recce/data/_next/static/chunks/c9425ca46eebdde9.js,sha256=nMJ5VTPD-Lo7gZHfampwKuILJiEXowBUYX3r9mvNUvs,282
|
|
55
|
+
recce/data/_next/static/chunks/cc8a9eadba012be0.css,sha256=qo4Yw3yDmvf5-j262j6M8AUrnNu2qMWVmpTyv6LEMfY,22061
|
|
56
|
+
recce/data/_next/static/chunks/e124bccf574a3361.css,sha256=6gXTy63dQt22HjYeSokfddLsIhwm0GU_JymzPrdHRm4,12679
|
|
57
|
+
recce/data/_next/static/chunks/e392ad92847c3e17.js,sha256=4VtLJijiJT-zA2pB0uKc5OwsH-v9HAepAcuwb-lsGkY,6860
|
|
58
|
+
recce/data/_next/static/chunks/e4ce95efe88dae79.js,sha256=TzFubDmu3diz6WlYwkEjjhK0iKny6d3zYvqdRy72UCM,43339
|
|
59
|
+
recce/data/_next/static/chunks/e69c777814fea6ed.js,sha256=IL52o9Dqzl6hjiae-uTQnubhF_y2lgjd7a0DffoPXWI,82578
|
|
60
|
+
recce/data/_next/static/chunks/turbopack-21cfd73037ff57ab.js,sha256=Td9iSmAtBm1NNWH72MP_3BTPtT23V3DC5wN-Dx3Rx_s,9909
|
|
61
|
+
recce/data/_next/static/media/favicon.a8d38d84.ico,sha256=B2mBumUOnzvUrXrqNkrc5QfdDXjzEXRcWkWur0fJ6sM,2565
|
|
62
|
+
recce/data/_next/static/media/montserrat-cyrillic-800-normal.d80d830d.woff2,sha256=6XlujeGVTucujV3iPSa7j1d9S5A6uuH-EduJBCeVFu8,11180
|
|
63
|
+
recce/data/_next/static/media/montserrat-cyrillic-800-normal.f9d58125.woff,sha256=XiXifLCW_CfSR4eNCIxDzi3Cg59f6L34ARTHrw-hoDA,10924
|
|
64
|
+
recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2,sha256=9hQT0vu2HmOb21Pk5Ht7bydZU7QIsY7rCyAPtm1VxM8,12144
|
|
65
|
+
recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.a4fa76b5.woff,sha256=lpODDPTBtDBAla5_gN_MO8RAFRT1bUJQ1XsBGNN3LHA,12036
|
|
66
|
+
recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2,sha256=uoJvuEwulhV4rfOgi1d4uHkF1EQ0RdHVbYT58VfV6ks,19012
|
|
67
|
+
recce/data/_next/static/media/montserrat-latin-800-normal.d5761935.woff,sha256=JvnmESYLcsQ0Z9Cgq09WxQaOxDHkHZ4wiPp0EXyghtg,20660
|
|
68
|
+
recce/data/_next/static/media/montserrat-latin-ext-800-normal.40ec0659.woff2,sha256=Wfbr63GhTGTtxTjrp4oBDBye9oCmalWew89LDRLbGos,33624
|
|
69
|
+
recce/data/_next/static/media/montserrat-latin-ext-800-normal.b671449b.woff,sha256=1UdAsVT5LZ__hVWZ8WuyQ16miAO5eVOIV0Qy1FCS17c,41688
|
|
70
|
+
recce/data/_next/static/media/montserrat-vietnamese-800-normal.9f7b8541.woff,sha256=IOzp6YFKpjBM18q3jyRJYrgPJpNGDnEehwa3vyleQ6s,7328
|
|
71
|
+
recce/data/_next/static/media/montserrat-vietnamese-800-normal.f9eb854e.woff2,sha256=JPFJw2_X2Eih976ylPgpqHZJJxgdMAL3sCAhKV51-P0,7900
|
|
72
|
+
recce/data/_next/static/media/reload-image.7aa931c7.svg,sha256=l-jdOsD0OBCpFrVYh1ubO8oajafPuPNs6MYnbanO7K0,840
|
|
73
|
+
recce/data/_not-found/__next._full.txt,sha256=XFDqPcWGpyWEcYSCSCM0gkkQ7LRqCToStuXEA_smBRM,5897
|
|
74
|
+
recce/data/_not-found/__next._index.txt,sha256=7BRJpJA6MnaNBb7IeZadSCv0p-1y-ckFtyToFPzxj_M,2441
|
|
75
|
+
recce/data/_not-found/__next._not-found.__PAGE__.txt,sha256=5tNQEkf-XkCrUbytkYqiuC9LGgZAJto4BFmw0poXVmM,1449
|
|
76
|
+
recce/data/_not-found/__next._not-found.txt,sha256=a9_cLB8pHuQZ5Si0ZKMlii1lnsMd4Khm-9-ke_zLQ2Q,431
|
|
77
|
+
recce/data/_not-found/__next._tree.txt,sha256=9w7mbg_jS1OvpHKZeVYd_I0ppZNlF9QYo3WFsv2k0aI,1628
|
|
78
|
+
recce/data/imgs/reload-image.svg,sha256=l-jdOsD0OBCpFrVYh1ubO8oajafPuPNs6MYnbanO7K0,840
|
|
79
|
+
recce/data/imgs/feedback/thumbs-down.png,sha256=q9KVIbaZku1TWkYHuleYlO-b6HsTApYh3St5xNHMGMg,10695
|
|
80
|
+
recce/data/imgs/feedback/thumbs-up.png,sha256=VF3BH8bmYEqcSsMDJO57xMqW4t6crCXUXaMlOPgI_OE,10556
|
|
81
|
+
recce/data/logo/recce-logo-white.png,sha256=y3re8iEucJnMUkAkRS2CjWHTlOydyvgWdWjuQKcXDbk,46923
|
|
82
|
+
recce/event/CONFIG,sha256=w8_AVcNu_JF-t8lNmjOqtsXbeOawMzpEhkISaMlm-iU,48
|
|
83
|
+
recce/event/SENTRY_DNS,sha256=nWXZevLC4qDScvNtjs329X13oxqvtFI_Kiu6cfCDOBA,83
|
|
84
|
+
recce/event/__init__.py,sha256=UKo0U0OZTkWsr7QBnCwXOHu7XtY0dhYPRTXuCsX8uIw,8847
|
|
85
|
+
recce/event/collector.py,sha256=6Vvcz9zejNNMytZ_K0HFV_kN6-S5B-SUOglBrlSPBo8,5884
|
|
86
|
+
recce/event/track.py,sha256=3wBzpB8l2gtnDzjh-wJatmLeBbtnP0q-BLQZQVQ23sM,5310
|
|
87
|
+
recce/models/__init__.py,sha256=F7cgALtdWnwv37R0eEgKZ_yBsMwxWnUfo3jAZ3u6qyU,209
|
|
88
|
+
recce/models/check.py,sha256=jjR1SGyczjrqyK-0Zas6ikLIGSgVp54lvfcQA19AniI,1588
|
|
89
|
+
recce/models/run.py,sha256=QK2gvOWvko9YYhd2NLs3BPt5l4MSCZGwpzTAiqx9zJw,1161
|
|
90
|
+
recce/models/types.py,sha256=L38laNWn0r7XxYOaJ05P4cWzZcwU20wf0QKo4MtmFx8,5105
|
|
91
|
+
recce/state/__init__.py,sha256=V1FRPTQJUz-uwI3Cn8wDa5Z9bueVs86MR_1Ti4RGfPc,650
|
|
92
|
+
recce/state/cloud.py,sha256=yWS9dhG7gFVhNDrdaFzDSVHMiC74UYeYQm19XkRNcVk,25523
|
|
93
|
+
recce/state/const.py,sha256=5XwGWEv4RhGucgl1RHWg_67gVY7fV0-jsbZPpfnOCTs,828
|
|
94
|
+
recce/state/local.py,sha256=bZIkl7cAfyYaGgYEr3uD_JLrtwlHBnu8_o1Qz2djQzw,1920
|
|
95
|
+
recce/state/state.py,sha256=EKx4h0unxjC-dt2EGYFUyjKijotKHbE_wdS5AWBEq1k,3645
|
|
96
|
+
recce/state/state_loader.py,sha256=IiGaFDm2y_0NMsv_YUZhSuDTsvWmdMrf9SXIv9w5sKE,5966
|
|
97
|
+
recce/tasks/__init__.py,sha256=b553AtDHjYROgmMePv_Hv_X3fjh4iEn11gzzpUJz6_o,610
|
|
98
|
+
recce/tasks/core.py,sha256=JFYa1CfgOiRPQ7KVTwMuxJjhMB-pvCwB-xezVt-h3RU,4080
|
|
99
|
+
recce/tasks/dataframe.py,sha256=_UZPmKDlZ_ei1crkM1obvaXvdjuwGIem98Hh0H70GPI,5638
|
|
100
|
+
recce/tasks/histogram.py,sha256=SMdSznzrBdAFvAbhsoUGAK9o0QUMYy00IVbamUVTpBk,13601
|
|
101
|
+
recce/tasks/lineage.py,sha256=_PbY0ZkDr620U8V2olqoX_T9XA0-G8ILt_6m1Q5TfBs,541
|
|
102
|
+
recce/tasks/profile.py,sha256=gMgms9qvdDsihh2aSC6LvCm9ggah4Oq3xjvmCh_exrU,11352
|
|
103
|
+
recce/tasks/query.py,sha256=k3y_IK1_3D2j4Scw-70ccDjVMa-Oe9jqxlDyLHfjagw,12790
|
|
104
|
+
recce/tasks/rowcount.py,sha256=WZ1vNI0YJ40G-DBgx2apjNAhoQg1bvzrtBpUZFou1Nc,9908
|
|
105
|
+
recce/tasks/schema.py,sha256=s7CsmUoKNDx-WM87X_cCOpKieKxqEZITFzQTEq3ZckU,2432
|
|
106
|
+
recce/tasks/top_k.py,sha256=vY3VCBmg61E8I4V-9-hJOv5RCYCmhxl6sHiKR9Zv7eE,5521
|
|
107
|
+
recce/tasks/valuediff.py,sha256=QLv0zgM9pWibvjyfZHjkpGopY9qqlpU0-WdFB109MUQ,16418
|
|
108
|
+
recce/util/__init__.py,sha256=cDvL3WT32cJR9CUPIJmibwJoyYcB3ZaKBFbOZDyvqP8,95
|
|
109
|
+
recce/util/api_token.py,sha256=iLS3VzLlsTfbXBLDoPPelmVlj6UdcEtGmfxdFQxXXSg,3223
|
|
110
|
+
recce/util/breaking.py,sha256=ajCOWMR8Qw492wCiuz5_DKqpI3uoj_qHuJjvelEoSkw,13068
|
|
111
|
+
recce/util/cache.py,sha256=QB6wzxe0M3jNTwP0M27Ys8F2hF-oda4-LyXXG9THuZQ,646
|
|
112
|
+
recce/util/cll.py,sha256=p8BrsG_1Lm-jXO8n4ulUgFw13C4mN0WjCXZbihDxQrs,13253
|
|
113
|
+
recce/util/io.py,sha256=UTUDncG4habAZZSZ1Y7i7Zpzu6FBtsfWI3y96k-0zkc,3495
|
|
114
|
+
recce/util/lineage.py,sha256=0XXOO05eJ3GPUNX9V9GBQS2iRFXxWZJoJbV7w-jQ0t8,2470
|
|
115
|
+
recce/util/logger.py,sha256=6UgLFkRiur9jJfu2ZRdo4LUvMw4f75V-l-1HT1-sgKo,747
|
|
116
|
+
recce/util/onboarding_state.py,sha256=kwFirKlfXdl5WFkR_nmilqGKFyELNcSPMqYq-by35fk,1991
|
|
117
|
+
recce/util/perf_tracking.py,sha256=FjhrdbbXIgybxS_oPpFsJ9VUDR93d7bUs8VNNqpXNxw,2483
|
|
118
|
+
recce/util/pydantic_model.py,sha256=KumKuyCjbTzEMsKLE4-b-eZfp0gLhYDdmVtw1-hxiJw,587
|
|
119
|
+
recce/util/recce_cloud.py,sha256=8gv0NQENekHEOrzGB4S3D2Gv8RkaT9CQFNF0_oa9nno,17905
|
|
120
|
+
recce/util/singleton.py,sha256=1cU99I0f9tjuMQLMJyLsK1oK3fZJMsO5-TbRHAMXqds,627
|
|
121
|
+
recce/yaml/__init__.py,sha256=PAym5akbtL24Ag7VR7EW8SS2VINNaJU06esbfe-ek-U,1328
|
|
122
|
+
recce_cloud/__init__.py,sha256=e_B01o0WY1giaa2CxvkpvxT-naRhM2dDXOH7eB5pHoE,432
|
|
123
|
+
recce_cloud/artifact.py,sha256=C6q1i8d0JdTIVLcJY1ZEmJJ0uBz-0g3zVZD8ss0K1iI,1458
|
|
124
|
+
recce_cloud/cli.py,sha256=qKpDlzrBiWYxDI8ue2k9LVKiXLWfsgN-7aPVA--FeJk,11547
|
|
125
|
+
recce_cloud/upload.py,sha256=wtg9m3483LNWgQOgRcLahqoWYkbD4NBu9PWrDJZlbOg,8300
|
|
126
|
+
recce_cloud/api/__init__.py,sha256=HrGOh7wp_U3G3gOXyGjJo1WoDXrMvhwjw8VGO2aKNTw,562
|
|
127
|
+
recce_cloud/api/base.py,sha256=Qkc8xpfT0j5LNt97aRvRMlQi6PlfwwgdS6MwYXWxhhQ,3383
|
|
128
|
+
recce_cloud/api/client.py,sha256=LByXcj2yr9jqpYQIt3zXM6So1dq46j_0FitssBSelHA,5422
|
|
129
|
+
recce_cloud/api/exceptions.py,sha256=BSfuh7dGZsx1qDkr2ZhRIAoPo_eXkAIhyho5PrUX2yo,634
|
|
130
|
+
recce_cloud/api/factory.py,sha256=0hdo2jTdTlvd8cU7YTZFJJ2q3ybSssA2JKLr0bO1QmQ,2081
|
|
131
|
+
recce_cloud/api/github.py,sha256=GXUIlTXGeURI0qJnf1RmMuUdb6mdFn7VzUFme6QcGhA,2175
|
|
132
|
+
recce_cloud/api/gitlab.py,sha256=Z1zn9JFNsMl3rL3v4vJfaVP4Xrz1-pUcBJRcds5YP7Y,2469
|
|
133
|
+
recce_cloud/ci_providers/__init__.py,sha256=cB2bydn4QOMurJVfWhIN9uTD9gIyiBcYOloN-0TvMW4,328
|
|
134
|
+
recce_cloud/ci_providers/base.py,sha256=v8P_eZdMwkgo3vCIHoyu1vBfetJICUNKz3z8ezOgwl0,2577
|
|
135
|
+
recce_cloud/ci_providers/detector.py,sha256=GvZuPo7Gq8eKCxsgYiYjQ3CYu3icPbi0moAYflnLDOk,5056
|
|
136
|
+
recce_cloud/ci_providers/github_actions.py,sha256=Vs4_YuqBsccjUeiT1a-wQBz-7sq5TnoGFwPJXniua_w,4311
|
|
137
|
+
recce_cloud/ci_providers/gitlab_ci.py,sha256=nQa2gZClXzLQ2soSqIhY5vul8RNQF-j_P-0bheD5U4s,4175
|
|
138
|
+
recce_nightly-1.25.0.20251112a2066.dist-info/licenses/LICENSE,sha256=CQjjMy9aYPhfe8xG_bcpIfKtNkdxLZ5IOb8oPygtUhY,11343
|
|
139
|
+
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
140
|
+
tests/test_cli.py,sha256=hT-KxF5PcVtNZ05HGsTrjec6WTDaD6vInCijJcCYiU8,9923
|
|
141
|
+
tests/test_cli_mcp_optional.py,sha256=w6Iwr22fheaOxw6vGXVZyvi0pw5uh8jDJKcdnd64-_o,1629
|
|
142
|
+
tests/test_cloud_listing_cli.py,sha256=77As9n0Sngdh53dfHkShmqDETMTOohlqw1xXO9cIago,14208
|
|
143
|
+
tests/test_config.py,sha256=ODDFe_XF6gphmSmmc422dGLBaCCmG-IjDzTkD5SJsJE,1557
|
|
144
|
+
tests/test_connect_to_cloud.py,sha256=b2fgV8L1iQBdEwh6RumMsIIyYg7GtMOMRz1dvE3WRPg,3059
|
|
145
|
+
tests/test_core.py,sha256=WgCFm8Au3YQI-V5UbZ6LA8irMNHRc7NWutIq2Mny0LE,6242
|
|
146
|
+
tests/test_dbt.py,sha256=VzXvdoJNwwEmKNhJJDNB1N_qZYwp1aoJQ1sLcoyRBmk,1316
|
|
147
|
+
tests/test_mcp_server.py,sha256=pXs2-ndezanGdDKj1fGp0lUFTmWipndBxKtsfbDRuDc,12365
|
|
148
|
+
tests/test_pull_request.py,sha256=HmZo5MoDaoKSgPwbLxJ3Ur3ajZ7IxhkzJxaOmhg6bwE,3562
|
|
149
|
+
tests/test_server.py,sha256=sq03awzG-kvLNJwHaZGDvVjd2uAs502XUKZ2nLNwvRQ,3391
|
|
150
|
+
tests/test_summary.py,sha256=oYhBbk2MJUERXXoWEQqn2AEQcteZk8_H9IrPexMAJsY,2971
|
|
151
|
+
tests/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
152
|
+
tests/adapter/dbt_adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
153
|
+
tests/adapter/dbt_adapter/conftest.py,sha256=WlMVytJcyfLJlMBeYhpk8Q-nyCDR9x_7qgsy6Uh9ECw,386
|
|
154
|
+
tests/adapter/dbt_adapter/dbt_test_helper.py,sha256=o_7m0cnVeGwPwEFXBCx3Me5QqLzQMOBR3dXD-MS2eaM,10406
|
|
155
|
+
tests/adapter/dbt_adapter/test_dbt_adapter.py,sha256=Y5TSlqkXGjJC6hC7YYs45bnRht5aou_KLjPMjpAGxNM,830
|
|
156
|
+
tests/adapter/dbt_adapter/test_dbt_cll.py,sha256=BHVyqpm-0YaajblcJHzMyjrkK1b9oEv0PwtDEv3EwuI,28656
|
|
157
|
+
tests/adapter/dbt_adapter/test_selector.py,sha256=uKFm0QxrxG-xyUEXGobCMueCRUssgnZMyo-S1Nlk3_s,6856
|
|
158
|
+
tests/recce_cloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
159
|
+
tests/recce_cloud/test_ci_providers.py,sha256=dYjRJIE-YQtYH2W4sDoLkTGG_PY5dqEjDtPPp3KVGKs,14692
|
|
160
|
+
tests/recce_cloud/test_cli.py,sha256=JUT_aEA4bRoD0LIMlgs_sITY9i1uea5roQ_X_4QLrYk,13991
|
|
161
|
+
tests/recce_cloud/test_client.py,sha256=qYsmUZrvwfuVLVcTx6NoGiUlBEzFi89yHrl1E6q4yws,11231
|
|
162
|
+
tests/recce_cloud/test_platform_clients.py,sha256=32vnFNr6x8rqU-c6fJkQ554YnOXorlP4f_Nbb8VTiB4,11526
|
|
163
|
+
tests/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
164
|
+
tests/tasks/conftest.py,sha256=lyZFx4jEY3To3xVhfMQ-G45egYOCttKN2lxeyExACkY,157
|
|
165
|
+
tests/tasks/test_histogram.py,sha256=g69R2Ljvcd8RQTnq7EMZEa93_1vVWNe4ZLg990rWuyA,4088
|
|
166
|
+
tests/tasks/test_lineage.py,sha256=HODSP2_uSu98e4jV-t9TIOSrln_5mXd-6baKv9aEmws,1095
|
|
167
|
+
tests/tasks/test_preset_checks.py,sha256=fAro5kAv67YiXgRFj7hDAgZEd8fVSHW_VTapVDq4G04,1457
|
|
168
|
+
tests/tasks/test_profile.py,sha256=yDavc2-8AneOtkkPGCHJM0QUEYq6S8lJpQbQsJVfa_k,10233
|
|
169
|
+
tests/tasks/test_query.py,sha256=EkldbvckZkTOlm9b3y9zLzGIhlo1RShSsv-ycCjDHrg,4218
|
|
170
|
+
tests/tasks/test_row_count.py,sha256=21PaP2aq-x8-pqwzWHRT1sixhQ8g3CQNRWOZTTmbK0s,3151
|
|
171
|
+
tests/tasks/test_schema.py,sha256=7ds4Vx8ixaiIWDR49Lvjem4xlPkRP1cXazDRY3roUak,3121
|
|
172
|
+
tests/tasks/test_top_k.py,sha256=YR_GS__DJsbDlQVaEEdJvNQ3fh1VmV5Nb3G7lb0r6YM,1779
|
|
173
|
+
tests/tasks/test_valuediff.py,sha256=_xQJGgxsXoy2NYk_Z6Hsw2FlVh6zk2nN_iUueyRN1e8,2046
|
|
174
|
+
recce_nightly-1.25.0.20251112a2066.dist-info/METADATA,sha256=FtiL_-_AascbnENZIILZYWnJD_wnGjS5J-kmiFyKsSM,9629
|
|
175
|
+
recce_nightly-1.25.0.20251112a2066.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
176
|
+
recce_nightly-1.25.0.20251112a2066.dist-info/entry_points.txt,sha256=oqoY_IiwIqXbgrIsPnlqUqao2eiIeP2dprowkOlmeyg,40
|
|
177
|
+
recce_nightly-1.25.0.20251112a2066.dist-info/top_level.txt,sha256=93B6jXmAPRijPPNsN8mzzVPP9M_lFQynyEuh8HDoFXg,24
|
|
178
|
+
recce_nightly-1.25.0.20251112a2066.dist-info/RECORD,,
|
|
@@ -46,6 +46,7 @@ def assert_model(
|
|
|
46
46
|
result: CllData,
|
|
47
47
|
node_id,
|
|
48
48
|
change_category=None,
|
|
49
|
+
impacted=None,
|
|
49
50
|
parents=None,
|
|
50
51
|
):
|
|
51
52
|
entry = result.nodes.get(node_id)
|
|
@@ -56,6 +57,10 @@ def assert_model(
|
|
|
56
57
|
entry.change_category == change_category
|
|
57
58
|
), f"Node {node_id} change category mismatch: expected {change_category}, got {entry.change_category}"
|
|
58
59
|
|
|
60
|
+
assert (
|
|
61
|
+
entry.impacted == impacted
|
|
62
|
+
), f"Node {node_id} impacted status mismatch: expected {impacted}, got {entry.impacted}"
|
|
63
|
+
|
|
59
64
|
|
|
60
65
|
def assert_cll_contain_nodes(cll_data: CllData, nodes):
|
|
61
66
|
assert len(nodes) == len(cll_data.nodes), "Model count mismatch"
|
|
@@ -391,13 +396,14 @@ def test_impact_radius_with_change_analysis_no_cll(dbt_test_helper):
|
|
|
391
396
|
# breaking
|
|
392
397
|
result = adapter.get_cll(change_analysis=True, no_cll=True, no_upstream=True)
|
|
393
398
|
assert_cll_contain_nodes(result, ["model.model1", "model.model2", "model.model3", "model.model4"])
|
|
394
|
-
assert_model(result, "model.model1", parents=[], change_category="non_breaking")
|
|
395
|
-
assert_model(result, "model.model2", parents=[], change_category="breaking")
|
|
396
|
-
assert_model(result, "model.model3", parents=["model.model2"], change_category=None)
|
|
397
|
-
assert_model(result, "model.model4", parents=["model.model2"], change_category="partial_breaking")
|
|
399
|
+
assert_model(result, "model.model1", parents=[], change_category="non_breaking", impacted=False)
|
|
400
|
+
assert_model(result, "model.model2", parents=[], change_category="breaking", impacted=True)
|
|
401
|
+
assert_model(result, "model.model3", parents=["model.model2"], change_category=None, impacted=True)
|
|
402
|
+
assert_model(result, "model.model4", parents=["model.model2"], change_category="partial_breaking", impacted=True)
|
|
398
403
|
|
|
399
404
|
|
|
400
405
|
def test_impact_radius_with_change_analysis_no_cll_2(dbt_test_helper):
|
|
406
|
+
# partial breaking
|
|
401
407
|
dbt_test_helper.create_model(
|
|
402
408
|
"model1",
|
|
403
409
|
unique_id="model.model1",
|
|
@@ -406,6 +412,7 @@ def test_impact_radius_with_change_analysis_no_cll_2(dbt_test_helper):
|
|
|
406
412
|
curr_columns={"c": "int"},
|
|
407
413
|
base_columns={"c": "int"},
|
|
408
414
|
)
|
|
415
|
+
# breaking
|
|
409
416
|
dbt_test_helper.create_model(
|
|
410
417
|
"model2",
|
|
411
418
|
unique_id="model.model2",
|
|
@@ -415,6 +422,7 @@ def test_impact_radius_with_change_analysis_no_cll_2(dbt_test_helper):
|
|
|
415
422
|
base_columns={"c": "int", "y": "int"},
|
|
416
423
|
depends_on=["model.model1"],
|
|
417
424
|
)
|
|
425
|
+
# no change
|
|
418
426
|
dbt_test_helper.create_model(
|
|
419
427
|
"model3",
|
|
420
428
|
unique_id="model.model3",
|
|
@@ -424,6 +432,7 @@ def test_impact_radius_with_change_analysis_no_cll_2(dbt_test_helper):
|
|
|
424
432
|
base_columns={"c": "int"},
|
|
425
433
|
depends_on=["model.model2"],
|
|
426
434
|
)
|
|
435
|
+
# partial breaking
|
|
427
436
|
dbt_test_helper.create_model(
|
|
428
437
|
"model4",
|
|
429
438
|
unique_id="model.model4",
|
|
@@ -433,6 +442,7 @@ def test_impact_radius_with_change_analysis_no_cll_2(dbt_test_helper):
|
|
|
433
442
|
base_columns={"year": "int"},
|
|
434
443
|
depends_on=["model.model2"],
|
|
435
444
|
)
|
|
445
|
+
# no change
|
|
436
446
|
dbt_test_helper.create_model(
|
|
437
447
|
"model5",
|
|
438
448
|
unique_id="model.model5",
|
|
@@ -448,11 +458,11 @@ def test_impact_radius_with_change_analysis_no_cll_2(dbt_test_helper):
|
|
|
448
458
|
# breaking
|
|
449
459
|
result = adapter.get_cll(change_analysis=True, no_cll=True, no_upstream=True)
|
|
450
460
|
assert_cll_contain_nodes(result, ["model.model1", "model.model2", "model.model3", "model.model4", "model.model5"])
|
|
451
|
-
assert_model(result, "model.model1", parents=[], change_category="partial_breaking")
|
|
452
|
-
assert_model(result, "model.model2", parents=["model.model1"], change_category="breaking")
|
|
453
|
-
assert_model(result, "model.model3", parents=["model.model2"], change_category=None)
|
|
454
|
-
assert_model(result, "model.model4", parents=["model.model2"], change_category="partial_breaking")
|
|
455
|
-
assert_model(result, "model.model5", parents=["model.model1"])
|
|
461
|
+
assert_model(result, "model.model1", parents=[], change_category="partial_breaking", impacted=True)
|
|
462
|
+
assert_model(result, "model.model2", parents=["model.model1"], change_category="breaking", impacted=True)
|
|
463
|
+
assert_model(result, "model.model3", parents=["model.model2"], change_category=None, impacted=True)
|
|
464
|
+
assert_model(result, "model.model4", parents=["model.model2"], change_category="partial_breaking", impacted=True)
|
|
465
|
+
assert_model(result, "model.model5", parents=["model.model1"], impacted=True)
|
|
456
466
|
|
|
457
467
|
|
|
458
468
|
def test_impact_radius_with_change_analysis_with_cll(dbt_test_helper):
|
|
@@ -506,10 +516,49 @@ def test_impact_radius_with_change_analysis_with_cll(dbt_test_helper):
|
|
|
506
516
|
result = adapter.get_cll(change_analysis=True, no_upstream=True)
|
|
507
517
|
assert_cll_contain_nodes(result, ["model.model1", "model.model2", "model.model3", "model.model4"])
|
|
508
518
|
assert_cll_contain_columns(result, [("model.model4", "year")])
|
|
509
|
-
assert_model(result, "model.model1", parents=[], change_category="non_breaking")
|
|
510
|
-
assert_model(result, "model.model2", parents=[], change_category="breaking")
|
|
511
|
-
assert_model(result, "model.model3", parents=["model.model2"], change_category=None)
|
|
512
|
-
assert_model(result, "model.model4", parents=["model.model2"], change_category="partial_breaking")
|
|
519
|
+
assert_model(result, "model.model1", parents=[], change_category="non_breaking", impacted=False)
|
|
520
|
+
assert_model(result, "model.model2", parents=[], change_category="breaking", impacted=True)
|
|
521
|
+
assert_model(result, "model.model3", parents=["model.model2"], change_category=None, impacted=True)
|
|
522
|
+
assert_model(result, "model.model4", parents=["model.model2"], change_category="partial_breaking", impacted=True)
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
def test_impact_radius_with_change_analysis_with_cll_added_removed(dbt_test_helper):
|
|
526
|
+
# rename model
|
|
527
|
+
dbt_test_helper.create_model(
|
|
528
|
+
"model1",
|
|
529
|
+
unique_id="model.model1",
|
|
530
|
+
base_sql="select 1 as c",
|
|
531
|
+
base_columns={"c": "int"},
|
|
532
|
+
)
|
|
533
|
+
dbt_test_helper.create_model(
|
|
534
|
+
"model1_v2",
|
|
535
|
+
unique_id="model.model1_v2",
|
|
536
|
+
curr_sql="select 1 as c",
|
|
537
|
+
curr_columns={"c": "int"},
|
|
538
|
+
)
|
|
539
|
+
# change upstream
|
|
540
|
+
dbt_test_helper.create_model(
|
|
541
|
+
"model2",
|
|
542
|
+
unique_id="model.model2",
|
|
543
|
+
base_sql='select c from {{ ref("model1") }}',
|
|
544
|
+
base_columns={"c": "int"},
|
|
545
|
+
depends_on=["model.model1"],
|
|
546
|
+
)
|
|
547
|
+
dbt_test_helper.create_model(
|
|
548
|
+
"model2",
|
|
549
|
+
unique_id="model.model2",
|
|
550
|
+
curr_sql='select c from {{ ref("model1_v2") }}',
|
|
551
|
+
curr_columns={"c": "int"},
|
|
552
|
+
depends_on=["model.model1_v2"],
|
|
553
|
+
)
|
|
554
|
+
|
|
555
|
+
adapter: DbtAdapter = dbt_test_helper.context.adapter
|
|
556
|
+
result = adapter.get_cll(change_analysis=True, no_upstream=True)
|
|
557
|
+
assert_model(result, "model.model1_v2", parents=[], impacted=True)
|
|
558
|
+
assert_column(result, "model.model1_v2", "c", transformation_type="source", change_status="added", parents=[])
|
|
559
|
+
assert_model(result, "model.model2", parents=["model.model1_v2"], change_category="breaking", impacted=True)
|
|
560
|
+
assert_cll_contain_nodes(result, ["model.model1_v2", "model.model2"])
|
|
561
|
+
assert_cll_contain_columns(result, [("model.model1_v2", "c"), ("model.model2", "c")])
|
|
513
562
|
|
|
514
563
|
|
|
515
564
|
def test_impact_radius_by_node_no_cll(dbt_test_helper):
|
|
@@ -604,7 +653,8 @@ def test_impact_radius_by_node_with_cll(dbt_test_helper):
|
|
|
604
653
|
adapter: DbtAdapter = dbt_test_helper.context.adapter
|
|
605
654
|
|
|
606
655
|
result = adapter.get_cll(node_id="model.model2", change_analysis=True, no_upstream=True)
|
|
607
|
-
assert_model(result, "model.model2", parents=[], change_category="partial_breaking")
|
|
656
|
+
assert_model(result, "model.model2", parents=[], change_category="partial_breaking", impacted=False)
|
|
657
|
+
assert_model(result, "model.model3", parents=[("model.model2", "y")], impacted=True)
|
|
608
658
|
assert_column(result, "model.model2", "y", transformation_type="source", parents=[], change_status="modified")
|
|
609
659
|
assert_cll_contain_nodes(result, ["model.model2", "model.model3"])
|
|
610
660
|
assert_cll_contain_columns(result, [("model.model2", "y"), ("model.model4", "y")])
|
|
@@ -612,7 +662,7 @@ def test_impact_radius_by_node_with_cll(dbt_test_helper):
|
|
|
612
662
|
result = adapter.get_cll(node_id="model.model1", change_analysis=True, no_upstream=True)
|
|
613
663
|
assert_cll_contain_nodes(result, ["model.model1"])
|
|
614
664
|
assert_cll_contain_columns(result, [("model.model1", "d")])
|
|
615
|
-
assert_model(result, "model.model1", parents=[], change_category="non_breaking")
|
|
665
|
+
assert_model(result, "model.model1", parents=[], change_category="non_breaking", impacted=False)
|
|
616
666
|
assert_column(result, "model.model1", "d", transformation_type="source", parents=[], change_status="added")
|
|
617
667
|
|
|
618
668
|
|
|
@@ -658,9 +708,10 @@ def test_impact_radius_by_node_with_cll_2(dbt_test_helper):
|
|
|
658
708
|
adapter: DbtAdapter = dbt_test_helper.context.adapter
|
|
659
709
|
|
|
660
710
|
result = adapter.get_cll(node_id="model.model2", change_analysis=True, no_upstream=True)
|
|
661
|
-
assert_model(result, "model.model2", parents=[], change_category="breaking")
|
|
711
|
+
assert_model(result, "model.model2", parents=[], change_category="breaking", impacted=True)
|
|
662
712
|
assert_column(result, "model.model2", "y", transformation_type="source", parents=[], change_status="modified")
|
|
663
|
-
assert_model(result, "model.model3", parents=["model.model2", ("model.model2", "y")])
|
|
713
|
+
assert_model(result, "model.model3", parents=["model.model2", ("model.model2", "y")], impacted=True)
|
|
714
|
+
assert_model(result, "model.model4", parents=["model.model2"], impacted=True)
|
|
664
715
|
assert_column(result, "model.model4", "y", transformation_type="passthrough", parents=[("model.model2", "y")])
|
|
665
716
|
assert_cll_contain_nodes(result, ["model.model2", "model.model3", "model.model4"])
|
|
666
717
|
assert_cll_contain_columns(result, [("model.model2", "d"), ("model.model2", "y"), ("model.model4", "y")])
|
|
File without changes
|