recce-nightly 0.62.0.20250417__py3-none-any.whl → 1.30.0.20251221__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 (245) hide show
  1. recce/VERSION +1 -1
  2. recce/__init__.py +27 -22
  3. recce/adapter/base.py +11 -14
  4. recce/adapter/dbt_adapter/__init__.py +845 -461
  5. recce/adapter/dbt_adapter/dbt_version.py +3 -0
  6. recce/adapter/sqlmesh_adapter.py +24 -35
  7. recce/apis/check_api.py +59 -42
  8. recce/apis/check_events_api.py +353 -0
  9. recce/apis/check_func.py +41 -35
  10. recce/apis/run_api.py +25 -19
  11. recce/apis/run_func.py +64 -25
  12. recce/artifact.py +119 -51
  13. recce/cli.py +1301 -324
  14. recce/config.py +43 -34
  15. recce/connect_to_cloud.py +138 -0
  16. recce/core.py +55 -47
  17. recce/data/404/index.html +2 -0
  18. recce/data/404.html +2 -1
  19. recce/data/__next.@lineage.!KHNsb3Qp.__PAGE__.txt +7 -0
  20. recce/data/__next.@lineage.!KHNsb3Qp.txt +4 -0
  21. recce/data/__next.__PAGE__.txt +6 -0
  22. recce/data/__next._full.txt +32 -0
  23. recce/data/__next._head.txt +8 -0
  24. recce/data/__next._index.txt +14 -0
  25. recce/data/__next._tree.txt +8 -0
  26. recce/data/_next/static/chunks/025a7e3e3f9f40ae.js +1 -0
  27. recce/data/_next/static/chunks/0ce56d67ef5779ca.js +4 -0
  28. recce/data/_next/static/chunks/1a6a78780155dac7.js +48 -0
  29. recce/data/_next/static/chunks/1de8485918b9182a.css +2 -0
  30. recce/data/_next/static/chunks/1e4b1b50d1e34993.js +1 -0
  31. recce/data/_next/static/chunks/206d5d181e4c738e.js +1 -0
  32. recce/data/_next/static/chunks/2c357efc34c5b859.js +25 -0
  33. recce/data/_next/static/chunks/2e9d95d2d48c479c.js +1 -0
  34. recce/data/_next/static/chunks/2f016dc4a3edad2e.js +2 -0
  35. recce/data/_next/static/chunks/313251962d698f7c.js +1 -0
  36. recce/data/_next/static/chunks/3a9f021f38eb5574.css +1 -0
  37. recce/data/_next/static/chunks/40079da8d2b8f651.js +1 -0
  38. recce/data/_next/static/chunks/4599182bffb64661.js +38 -0
  39. recce/data/_next/static/chunks/4e62f6e184173580.js +1 -0
  40. recce/data/_next/static/chunks/5c4dfb0d09eaa401.js +1 -0
  41. recce/data/_next/static/chunks/69e4f06ccfdfc3ac.js +1 -0
  42. recce/data/_next/static/chunks/6b206cb4707d6bee.js +1 -0
  43. recce/data/_next/static/chunks/6d8557f062aa4386.css +1 -0
  44. recce/data/_next/static/chunks/7fbe3650bd83b6b5.js +1 -0
  45. recce/data/_next/static/chunks/83fa823a825674f6.js +1 -0
  46. recce/data/_next/static/chunks/848a6c9b5f55f7ed.js +1 -0
  47. recce/data/_next/static/chunks/859462b0858aef88.css +2 -0
  48. recce/data/_next/static/chunks/923964f18c87d0f1.css +1 -0
  49. recce/data/_next/static/chunks/939390f911895d7c.js +48 -0
  50. recce/data/_next/static/chunks/99a9817237a07f43.js +1 -0
  51. recce/data/_next/static/chunks/9fed8b4b2b924054.js +5 -0
  52. recce/data/_next/static/chunks/b6949f6c5892110c.js +1 -0
  53. recce/data/_next/static/chunks/b851a1d3f8149828.js +1 -0
  54. recce/data/_next/static/chunks/c734f9ad957de0b4.js +1 -0
  55. recce/data/_next/static/chunks/cdde321b0ec75717.js +2 -0
  56. recce/data/_next/static/chunks/d0f91117d77ff844.css +1 -0
  57. recce/data/_next/static/chunks/d6c8667911c2500f.js +1 -0
  58. recce/data/_next/static/chunks/da8dab68c02752cf.js +74 -0
  59. recce/data/_next/static/chunks/dc074049c9d12d97.js +109 -0
  60. recce/data/_next/static/chunks/ee7f1a8227342421.js +1 -0
  61. recce/data/_next/static/chunks/fa2f4e56c2fccc73.js +1 -0
  62. recce/data/_next/static/chunks/turbopack-1fad664f62979b93.js +3 -0
  63. recce/data/_next/static/media/favicon.a8d38d84.ico +0 -0
  64. recce/data/_next/static/media/montserrat-cyrillic-800-normal.d80d830d.woff2 +0 -0
  65. recce/data/_next/static/media/montserrat-cyrillic-800-normal.f9d58125.woff +0 -0
  66. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2 +0 -0
  67. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.a4fa76b5.woff +0 -0
  68. recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2 +0 -0
  69. recce/data/_next/static/media/montserrat-latin-800-normal.d5761935.woff +0 -0
  70. recce/data/_next/static/media/montserrat-latin-ext-800-normal.40ec0659.woff2 +0 -0
  71. recce/data/_next/static/media/montserrat-latin-ext-800-normal.b671449b.woff +0 -0
  72. recce/data/_next/static/media/montserrat-vietnamese-800-normal.9f7b8541.woff +0 -0
  73. recce/data/_next/static/media/montserrat-vietnamese-800-normal.f9eb854e.woff2 +0 -0
  74. recce/data/_next/static/nX-Uz0AH6Tc6hIQUFGqaB/_buildManifest.js +11 -0
  75. recce/data/_next/static/nX-Uz0AH6Tc6hIQUFGqaB/_clientMiddlewareManifest.json +1 -0
  76. recce/data/_not-found/__next._full.txt +24 -0
  77. recce/data/_not-found/__next._head.txt +8 -0
  78. recce/data/_not-found/__next._index.txt +13 -0
  79. recce/data/_not-found/__next._not-found.__PAGE__.txt +5 -0
  80. recce/data/_not-found/__next._not-found.txt +4 -0
  81. recce/data/_not-found/__next._tree.txt +6 -0
  82. recce/data/_not-found/index.html +2 -0
  83. recce/data/_not-found/index.txt +24 -0
  84. recce/data/auth_callback.html +68 -0
  85. recce/data/checks/__next.@lineage.__DEFAULT__.txt +7 -0
  86. recce/data/checks/__next._full.txt +39 -0
  87. recce/data/checks/__next._head.txt +8 -0
  88. recce/data/checks/__next._index.txt +14 -0
  89. recce/data/checks/__next._tree.txt +8 -0
  90. recce/data/checks/__next.checks.__PAGE__.txt +10 -0
  91. recce/data/checks/__next.checks.txt +4 -0
  92. recce/data/checks/index.html +2 -0
  93. recce/data/checks/index.txt +39 -0
  94. recce/data/imgs/reload-image.svg +4 -0
  95. recce/data/index.html +2 -27
  96. recce/data/index.txt +32 -7
  97. recce/data/lineage/__next.@lineage.__DEFAULT__.txt +7 -0
  98. recce/data/lineage/__next._full.txt +39 -0
  99. recce/data/lineage/__next._head.txt +8 -0
  100. recce/data/lineage/__next._index.txt +14 -0
  101. recce/data/lineage/__next._tree.txt +8 -0
  102. recce/data/lineage/__next.lineage.__PAGE__.txt +10 -0
  103. recce/data/lineage/__next.lineage.txt +4 -0
  104. recce/data/lineage/index.html +2 -0
  105. recce/data/lineage/index.txt +39 -0
  106. recce/data/query/__next.@lineage.__DEFAULT__.txt +7 -0
  107. recce/data/query/__next._full.txt +37 -0
  108. recce/data/query/__next._head.txt +8 -0
  109. recce/data/query/__next._index.txt +14 -0
  110. recce/data/query/__next._tree.txt +8 -0
  111. recce/data/query/__next.query.__PAGE__.txt +9 -0
  112. recce/data/query/__next.query.txt +4 -0
  113. recce/data/query/index.html +2 -0
  114. recce/data/query/index.txt +37 -0
  115. recce/diff.py +6 -12
  116. recce/event/CONFIG.bak +1 -0
  117. recce/event/__init__.py +86 -74
  118. recce/event/collector.py +33 -22
  119. recce/event/track.py +49 -27
  120. recce/exceptions.py +1 -1
  121. recce/git.py +7 -7
  122. recce/github.py +57 -53
  123. recce/mcp_server.py +725 -0
  124. recce/models/__init__.py +4 -1
  125. recce/models/check.py +438 -21
  126. recce/models/run.py +1 -0
  127. recce/models/types.py +134 -28
  128. recce/pull_request.py +27 -25
  129. recce/run.py +179 -122
  130. recce/server.py +394 -104
  131. recce/state/__init__.py +31 -0
  132. recce/state/cloud.py +644 -0
  133. recce/state/const.py +26 -0
  134. recce/state/local.py +56 -0
  135. recce/state/state.py +119 -0
  136. recce/state/state_loader.py +174 -0
  137. recce/summary.py +196 -149
  138. recce/tasks/__init__.py +19 -3
  139. recce/tasks/core.py +11 -13
  140. recce/tasks/dataframe.py +82 -18
  141. recce/tasks/histogram.py +69 -34
  142. recce/tasks/lineage.py +2 -2
  143. recce/tasks/profile.py +152 -86
  144. recce/tasks/query.py +180 -89
  145. recce/tasks/rowcount.py +37 -31
  146. recce/tasks/schema.py +18 -15
  147. recce/tasks/top_k.py +35 -35
  148. recce/tasks/utils.py +147 -0
  149. recce/tasks/valuediff.py +247 -155
  150. recce/util/__init__.py +3 -0
  151. recce/util/api_token.py +80 -0
  152. recce/util/breaking.py +105 -100
  153. recce/util/cll.py +274 -219
  154. recce/util/cloud/__init__.py +15 -0
  155. recce/util/cloud/base.py +115 -0
  156. recce/util/cloud/check_events.py +190 -0
  157. recce/util/cloud/checks.py +242 -0
  158. recce/util/io.py +22 -17
  159. recce/util/lineage.py +65 -16
  160. recce/util/logger.py +1 -1
  161. recce/util/onboarding_state.py +45 -0
  162. recce/util/perf_tracking.py +85 -0
  163. recce/util/recce_cloud.py +347 -72
  164. recce/util/singleton.py +4 -4
  165. recce/util/startup_perf.py +121 -0
  166. recce/yaml/__init__.py +7 -10
  167. recce_nightly-1.30.0.20251221.dist-info/METADATA +195 -0
  168. recce_nightly-1.30.0.20251221.dist-info/RECORD +183 -0
  169. {recce_nightly-0.62.0.20250417.dist-info → recce_nightly-1.30.0.20251221.dist-info}/WHEEL +1 -2
  170. recce/data/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js +0 -1
  171. recce/data/_next/static/chunks/29e3cc0d-8c150e37dff9631b.js +0 -1
  172. recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js +0 -1
  173. recce/data/_next/static/chunks/3998a672-eaad84bdd88cc73e.js +0 -1
  174. recce/data/_next/static/chunks/450c323b-1bb5db526e54435a.js +0 -1
  175. recce/data/_next/static/chunks/47d8844f-79a1b53c66a7d7ec.js +0 -1
  176. recce/data/_next/static/chunks/500-e51c92a025a51234.js +0 -65
  177. recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js +0 -1
  178. recce/data/_next/static/chunks/700-3b65fc3666820d00.js +0 -2
  179. recce/data/_next/static/chunks/7a8a3e83-d7fa409d97b38b2b.js +0 -1
  180. recce/data/_next/static/chunks/7f27ae6c-413f6b869a04183a.js +0 -1
  181. recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js +0 -1
  182. recce/data/_next/static/chunks/a30376cd-7d806e1602f2dc3a.js +0 -1
  183. recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js +0 -1
  184. recce/data/_next/static/chunks/app/layout-9102e22cb73f74d6.js +0 -1
  185. recce/data/_next/static/chunks/app/page-9adc25782272ed2e.js +0 -1
  186. recce/data/_next/static/chunks/b63b1b3f-7395c74e11a14e95.js +0 -1
  187. recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js +0 -1
  188. recce/data/_next/static/chunks/c1ceaa8b-a1e442154d23515e.js +0 -1
  189. recce/data/_next/static/chunks/cd9f8d63-cf0d5a7b0f7a92e8.js +0 -54
  190. recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js +0 -1
  191. recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js +0 -1
  192. recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js +0 -1
  193. recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -1
  194. recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js +0 -1
  195. recce/data/_next/static/chunks/main-app-0225a2255968e566.js +0 -1
  196. recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js +0 -1
  197. recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js +0 -1
  198. recce/data/_next/static/chunks/webpack-567d72f0bc0820d5.js +0 -1
  199. recce/data/_next/static/css/c9ecb46a4b21c126.css +0 -14
  200. recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
  201. recce/data/_next/static/media/montserrat-cyrillic-800-normal.31d693bb.woff +0 -0
  202. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.7e2c1e62.woff +0 -0
  203. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
  204. recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
  205. recce/data/_next/static/media/montserrat-latin-800-normal.97e20d5e.woff +0 -0
  206. recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
  207. recce/data/_next/static/media/montserrat-latin-ext-800-normal.aff52ab0.woff +0 -0
  208. recce/data/_next/static/media/montserrat-vietnamese-800-normal.5f21869b.woff +0 -0
  209. recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
  210. recce/data/_next/static/qiyFlux77VkhxiceAJe_F/_buildManifest.js +0 -1
  211. recce/state.py +0 -753
  212. recce_nightly-0.62.0.20250417.dist-info/METADATA +0 -311
  213. recce_nightly-0.62.0.20250417.dist-info/RECORD +0 -139
  214. recce_nightly-0.62.0.20250417.dist-info/top_level.txt +0 -2
  215. tests/__init__.py +0 -0
  216. tests/adapter/__init__.py +0 -0
  217. tests/adapter/dbt_adapter/__init__.py +0 -0
  218. tests/adapter/dbt_adapter/conftest.py +0 -13
  219. tests/adapter/dbt_adapter/dbt_test_helper.py +0 -283
  220. tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -40
  221. tests/adapter/dbt_adapter/test_dbt_cll.py +0 -102
  222. tests/adapter/dbt_adapter/test_selector.py +0 -177
  223. tests/tasks/__init__.py +0 -0
  224. tests/tasks/conftest.py +0 -4
  225. tests/tasks/test_histogram.py +0 -137
  226. tests/tasks/test_lineage.py +0 -42
  227. tests/tasks/test_preset_checks.py +0 -50
  228. tests/tasks/test_profile.py +0 -73
  229. tests/tasks/test_query.py +0 -151
  230. tests/tasks/test_row_count.py +0 -116
  231. tests/tasks/test_schema.py +0 -99
  232. tests/tasks/test_top_k.py +0 -73
  233. tests/tasks/test_valuediff.py +0 -74
  234. tests/test_cli.py +0 -122
  235. tests/test_config.py +0 -45
  236. tests/test_core.py +0 -27
  237. tests/test_dbt.py +0 -36
  238. tests/test_pull_request.py +0 -130
  239. tests/test_server.py +0 -98
  240. tests/test_state.py +0 -123
  241. tests/test_summary.py +0 -57
  242. /recce/data/_next/static/chunks/{polyfills-42372ed130431b0a.js → a6dad97d9634a72d.js} +0 -0
  243. /recce/data/_next/static/{qiyFlux77VkhxiceAJe_F → nX-Uz0AH6Tc6hIQUFGqaB}/_ssgManifest.js +0 -0
  244. {recce_nightly-0.62.0.20250417.dist-info → recce_nightly-1.30.0.20251221.dist-info}/entry_points.txt +0 -0
  245. {recce_nightly-0.62.0.20250417.dist-info → recce_nightly-1.30.0.20251221.dist-info}/licenses/LICENSE +0 -0
@@ -1,311 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: recce-nightly
3
- Version: 0.62.0.20250417
4
- Summary: Environment diff tool for dbt
5
- Home-page: https://github.com/InfuseAI/recce
6
- Author: InfuseAI Dev Team
7
- Author-email: dev@infuseai.io
8
- Project-URL: Bug Tracker, https://github.com/InfuseAI/recce/issues
9
- Classifier: Programming Language :: Python :: 3.9
10
- Classifier: Programming Language :: Python :: 3.10
11
- Classifier: Programming Language :: Python :: 3.11
12
- Classifier: License :: OSI Approved :: Apache Software License
13
- Classifier: Operating System :: OS Independent
14
- Classifier: Development Status :: 4 - Beta
15
- Requires-Python: >=3.9
16
- Description-Content-Type: text/markdown
17
- License-File: LICENSE
18
- Requires-Dist: boto3
19
- Requires-Dist: requests>=2.28.1
20
- Requires-Dist: ruamel.yaml>=0.18.6
21
- Requires-Dist: click>=7.1
22
- Requires-Dist: deepdiff<8.0,>=7.0
23
- Requires-Dist: portalocker
24
- Requires-Dist: fastapi
25
- Requires-Dist: itsdangerous
26
- Requires-Dist: uvicorn
27
- Requires-Dist: pydantic
28
- Requires-Dist: jinja2
29
- Requires-Dist: requests>=2.28.1
30
- Requires-Dist: rich>=12.0.0
31
- Requires-Dist: sentry-sdk
32
- Requires-Dist: watchdog
33
- Requires-Dist: websockets
34
- Requires-Dist: py-markdown-table
35
- Requires-Dist: python-dateutil
36
- Requires-Dist: python-multipart
37
- Requires-Dist: GitPython
38
- Requires-Dist: PyGithub
39
- Requires-Dist: sqlglot
40
- Provides-Extra: dev
41
- Requires-Dist: pytest>=4.6; extra == "dev"
42
- Requires-Dist: pytest-flake8; extra == "dev"
43
- Requires-Dist: flake8==3.9.2; extra == "dev"
44
- Requires-Dist: pytest-mypy; extra == "dev"
45
- Requires-Dist: pytest-cov; extra == "dev"
46
- Requires-Dist: twine; extra == "dev"
47
- Requires-Dist: tox; extra == "dev"
48
- Requires-Dist: pandas; extra == "dev"
49
- Requires-Dist: httpx; extra == "dev"
50
- Dynamic: author
51
- Dynamic: author-email
52
- Dynamic: classifier
53
- Dynamic: description
54
- Dynamic: description-content-type
55
- Dynamic: home-page
56
- Dynamic: license-file
57
- Dynamic: project-url
58
- Dynamic: provides-extra
59
- Dynamic: requires-dist
60
- Dynamic: requires-python
61
- Dynamic: summary
62
-
63
- <p align="center">
64
- <a href="https://datarecce.io">
65
- <picture>
66
- <source media="(prefers-color-scheme: dark)" srcset="https://datarecce.io/assets/images/recce-logo-stacked.png">
67
- <source media="(prefers-color-scheme: light)" srcset="https://datarecce.io/assets/images/recce-logo-stacked.png">
68
- <img alt="Recce: DataRecce.io" src="https://datarecce.io/assets/images/recce-logo-stacked.png" width="200" style="width: 100%; max-width: 200px; display: block; margin: 0 auto 20px;">
69
- </picture>
70
- </a>
71
- </p>
72
-
73
- <h3 align="center">The&nbsp;data&nbsp;validation&nbsp;toolkit<br />for teams that care about building better data</h3>
74
-
75
- <p align="center">
76
- <a href="https://pypi.org/project/recce/"><img src="https://img.shields.io/badge/pip_install-recce-006DAD?style=flat-square" alt="install"></a> &nbsp;
77
- <a href="https://pypi.org/project/recce/"><img src="https://img.shields.io/pypi/v/recce?style=flat-square" alt="pipy"></a> &nbsp;
78
- <a href="https://pypi.org/project/recce/"><img src="https://img.shields.io/pypi/pyversions/recce?style=flat-square" alt="Python"></a> &nbsp;
79
- <a href="https://pypi.org/project/recce/#files"><img src="https://img.shields.io/pypi/dw/recce?style=flat-square" alt="downloads"></a> &nbsp;
80
- <a href="https://github.com/DataRecce/recce/blob/main/LICENSE"><img src="https://img.shields.io/github/license/DataRecce/recce?style=flat-square" alt="license"></a> &nbsp;
81
- <a href="https://getdbt.slack.com/archives/C05C28V7CPP"><img src="https://img.shields.io/badge/Slack-4A154B?style=flat-square&amp;logo=slack&amp;logoColor=white" alt="Slack"></a> &nbsp;
82
- <a href="https://discord.com/invite/5zb2aK9KBV"><img src="https://img.shields.io/discord/664381609771925514?color=%237289DA&amp;label=chat&amp;logo=discord&amp;logoColor=white&amp;style=flat-square" alt="InfuseAI Discord Invite"></a> &nbsp;
83
- </p>
84
-
85
- <p align="center">
86
- <a href="https://cal.com/team/recce/chat?utm_source=banner&utm_campaign=oss">
87
- <img alt="Book us with Cal.com" src="https://cal.com/book-with-cal-light.svg" />
88
- </a>
89
- </p>
90
-
91
- ## Introduction
92
-
93
- `Recce` is data validation toolkit for pull request (PR) review in dbt projects. Get enhanced visibility into how your
94
- team’s dbt modeling changes impact data by comparing your dev branch with stable production data. Run manual data checks
95
- during development, and automate checks in CI for PR review.
96
-
97
- ## Quick Start
98
-
99
- You can launch Recce in any dbt project in just two commands:
100
-
101
- ```Bash
102
- # cd into your dbt project
103
- pip install -U recce
104
- recce server
105
- ```
106
-
107
- To use the full suite of diffing tools in Recce, please prepare two environments to compare against. Follow
108
- our [5-minute Jaffle Shop tutorial](https://datarecce.io/docs/get-started-jaffle-shop/) to try it out for yourself.
109
-
110
- ## What you get
111
-
112
- `recce server` launches a web UI that shows you the area of your lineage that is impacted by the branch changes.
113
-
114
- <a href="https://datarecce.io"><img src="https://datarecce.io/assets/images/readme/recce-overview-screenshot.png" style="width: 100%; max-width: 600px; display: block; margin: 0 auto 20px;" /></a>
115
-
116
- ### Using Recce for Impact Assessment in dbt PR Review
117
-
118
- - Select nodes in the lineage to perform Checks (diffs) as part of your impact assessment during development or PR
119
- review.
120
- - Add Checks to your Checklist to note observed impacts.
121
- - Share your Checklist with the PR reviewer.
122
- - (`Recce Cloud`) Automatically sync Check status between Recce Instances
123
- - (`Recce Cloud`) Block PR merging until all Recce Checks have been approved
124
-
125
- Read more about using [Recce for Impact Assessment](https://datarecce.io/blog/hands-on-data-impact-analysis-recce/) on
126
- the Recce blog.
127
-
128
- ## Try the Online Demo
129
-
130
- We provide three online Recce demos (based on Jaffle Shop), each is related to a specific pull request. Use these demos
131
- to inspect the data impact caused by the modeling changes in the PR.
132
-
133
- For each demo, review the following:
134
-
135
- - The pull request comment
136
- - The code changes
137
- - How the lineage and data has changed in `Recce`
138
-
139
- This will enable you to validate if the intention of the PR has been successfully implemented without unintended impact.
140
-
141
- > [!TIP]
142
- > Don't forget to click the Checks tab to view the Recce Checklist, and perform your own Checks for further
143
- > investigation.
144
- >
145
-
146
- ### Demo 1: Calculation logic change
147
-
148
- This pull request adjusts the **logic** for how customer lifetime value is calculated:
149
-
150
- - [Demo #1](https://pr1.demo.datarecce.io/)
151
- - [Pull request #1](https://github.com/DataRecce/jaffle_shop_duckdb/pull/1)
152
-
153
- ### Demo 2: Refactoring
154
-
155
- This pull request performs some **refactoring** on the customers model by turning two CTEs into intermediate models,
156
- enhancing readability and maintainability:
157
-
158
- - [Demo #2](https://pr2.demo.datarecce.io/)
159
- - [Pull request #2](https://github.com/DataRecce/jaffle_shop_duckdb/pull/2)
160
-
161
- ### Demo 3: Analysis
162
-
163
- This pull request introduces a new Rounding Effect **Analysis** feature, aimed at analyzing and reporting the impacts of
164
- rounding in our data processing.
165
-
166
- - [Demo #3](https://pr3.demo.datarecce.io/)
167
- - [Pull request #3](https://github.com/DataRecce/jaffle_shop_duckdb/pull/3)
168
-
169
- ### Demo 4: Enhancing the existing model
170
-
171
- This pull request **enhances** the existing `customers` model by categorizing whether a customer has placed an order as
172
- part of a promotion.
173
-
174
- - [Demo #4](https://pr44.demo.datarecce.io/)
175
- - [Pull request #44](https://github.com/DataRecce/jaffle_shop_duckdb/pull/44)
176
-
177
- ## Why `Recce`
178
-
179
- [dbt](https://www.getdbt.com/) has brought many software best practices to data projects, such as:
180
-
181
- - Version controlled code
182
- - Modular SQL
183
- - Reproducible pipelines
184
-
185
- Even so, 'bad merges' still happen and erroneous data and silent errors make their way into prod data. As self-serve
186
- analytics opens dbt projects to many roles, and the size of dbt projects increase, the job of reviewing data modeling
187
- changes is even more critical.
188
-
189
- The only way to understand the impact of code changes on data is to compare the data before-and-after the changes.
190
-
191
- ## Features
192
-
193
- `Recce` provides a data review environment for data teams to check their work during development, and then again as part
194
- of PR review. The suite of tools and diffs in Recce are specifically geared towards surfacing, understanding, and
195
- recording data impact from code changes.
196
-
197
- ### Lineage Diff
198
-
199
- [Lineage Diff](https://datarecce.io/docs/features/lineage/) is the main interface to `Recce` and shows which nodes in
200
- the lineage have been added, removed, or modified.
201
-
202
- ### Structural Diffs
203
-
204
- - [Schema Diff](https://datarecce.io/docs/features/lineage/#schema-diff) - Show the struture of the table including
205
- added or removed columns
206
- - [Row Count Diff](https://datarecce.io/docs/features/lineage/#row-count-diff) - Compares the row count for tables
207
-
208
- ### Statistical Diffs
209
-
210
- Advanced Diffs provide high level statistics about data change:
211
-
212
- - [Profile Diff](https://datarecce.io/docs/features/lineage/#profile-diff): Compares stats such as count, distinct
213
- count, min, max, average.
214
- - [Value Diff](https://datarecce.io/docs/features/lineage/#value-diff): The matched count and percentage for each column
215
- in the table.
216
- - [Top-K Diff](https://datarecce.io/docs/features/lineage/#top-k-diff): Compares the distribution of a categorical
217
- column.
218
- - [Histogram Diff](https://datarecce.io/docs/features/lineage/#histogram-diff): Compares the distribution of a numeric
219
- column in an overlay histogram chart.
220
-
221
- ### Query Diff
222
-
223
- [Query Diff](https://datarecce.io/docs/features/query/) compares the results of any ad-hoc query, and supports the use
224
- of dbt macros.
225
-
226
- ### Checklist
227
-
228
- The [checklist](https://datarecce.io/docs/features/checklist/) provides a way to record the results of your data
229
- validation process.
230
-
231
- - Save the results of checks
232
- - Re-run checks
233
- - Annotate checks to add context
234
- - Share the results of checks
235
- - (`Recce Cloud`) Sync checks and check results across Recce instances
236
- - (`Recce Cloud`) Block PR merging until checks have been approved
237
-
238
- ## Who's using `Recce`?
239
-
240
- `Recce` is useful for validating your own work or the work of others, and can also be used to share data impact with
241
- non-technical stakeholders to approve data checks.
242
-
243
- - **Data engineers** can use `Recce` to ensure the structural integrity of the data and understand the scope of impact
244
- before merging.
245
- - **Analysts** can use `Recce` to self-review and understand how data modeling changes have changed the data.
246
- - **Stakeholders** can use `Recce` to sign-off on data after updates have been made
247
-
248
- ## Documentation / How to use `Recce`
249
-
250
- The [Recce Documentation](https://datarecce.io/docs/) covers everything you need to get started.
251
-
252
- We’d advise first following the [5-minute tutorial](https://datarecce.io/docs/get-started-jaffle-shop/) that uses Jaffle
253
- Shop and then [trying out Recce](https://datarecce.io/docs/get-started/) in your own project.
254
-
255
- For advice on best practices in preparing dbt environments to enable effective PR review, check
256
- out [Best Practices for Preparing Environments](https://datarecce.io/docs/guides/best-practices-prep-env/).
257
-
258
- ## Recce Cloud
259
-
260
- `Recce Cloud` provides a backbone of supporting services that make Recce usage more suitable for teams reviewing
261
- multiple pull requests.
262
-
263
- With `Recce Cloud`:
264
-
265
- - `Recce` Instances can be launched **directly from a PR**
266
- - **Checks** are automatically **synced** across `Recce` Instances
267
- - **Blocked merging** until all checks are approved
268
-
269
- [Recce Cloud](https://datarecce.io/cloud) is currently in early-access private beta.
270
-
271
- To find out how you can get access
272
- please [book an appointment](https://cal.com/team/recce/chat?utm_source=banner&utm_campaign=oss) for a short meeting.
273
-
274
- <a href="https://cal.com/team/recce/chat?utm_source=banner&utm_campaign=oss">
275
- <img alt="Book us with [Cal.com](http://cal.com/)" src="https://cal.com/book-with-cal-light.svg" />
276
- </a>
277
-
278
- ## Data Security
279
-
280
- `Recce` consists of a local server application that you run on your own device or compute services.
281
-
282
- - Diffs or queries that are performed by `Recce` happen either in your data warehouse, or in the browser itself.
283
- - `Recce` does not store your data.
284
-
285
- For `Recce Cloud` users:
286
-
287
- - An encrypted version of your `Recce` [state file](https://datarecce.io/docs/features/state-file/) is storedon
288
- `Recce Cloud`. This file is encrypted *before* transmission.
289
-
290
- ## Community & Support
291
-
292
- Here's where you can get in touch with the `Recce` team and find support:
293
-
294
- - [dbt Slack](https://www.getdbt.com/community/join-the-community) in
295
- the [#tools-recce](https://getdbt.slack.com/archives/C05C28V7CPP) channel
296
- - [Recce Discord](https://discord.gg/VpwXRC34jz)
297
- - Email us [product@datarecce.io](mailto:product@datarecce.io)
298
-
299
- If you believe you have found a bug, or there is some missing functionality in Recce, please open
300
- a [GitHub Issue](https://github.com/DataRecce/recce/issues).
301
-
302
- ## Recce on the web
303
-
304
- You can follow along with news about `Recce` and blogs from our team in the following places:
305
-
306
- - [DataRecce.io](https://DataRecce.io)
307
- - [LinkedIn](https://www.linkedin.com/company/datarecce)
308
- - [Medium blog](https://medium.com/inthepipeline)
309
- - [@datarecce](https://x.com/DataRecce) on Twitter/X
310
- - [@DataRecce@mastodon.social](https://mastodon.social/@DataRecce) on Mastodon
311
- - [@datarecce.bsky.social](https://bsky.app/profile/datarecce.bsky.social) on BlueSky
@@ -1,139 +0,0 @@
1
- recce/VERSION,sha256=_yJw44mCUkyeAabamkWnSOJ9tGVVg8rgx2srGuU7ScY,16
2
- recce/__init__.py,sha256=e0lFWHcmyw6LDA9ZVRJUToPe7ApnJjPTCylw4aBowto,2392
3
- recce/artifact.py,sha256=a7P1cXd6lglEZF2OYeNvsEg9ME-ocJo5oPU4VZVeaz0,6586
4
- recce/cli.py,sha256=Z7yJZcBScNjDrL-MqOTTw3YSMkiS2LNTzAMCbjKjFuk,34877
5
- recce/config.py,sha256=76_tIycylWqIWLpdYJOuqffXn6q1sCJN57eH98gOEz4,4665
6
- recce/core.py,sha256=aMNHWi8bhwPrUCVYp2KyAkoR20NHD7pMJPxFUZ-XHes,10679
7
- recce/diff.py,sha256=xLcBt4sW4sJCJ9tTCIpnV4SUHtYvMfYB1kX136iQbc0,794
8
- recce/exceptions.py,sha256=FNxafrJVEsu0TMu9xM5bW-PeKPsc4TKPJMTipRz-iaw,592
9
- recce/git.py,sha256=uig5sh347jZJKTD2Ml5b0lySSGJhdQ4VCIZqdgKH_y4,2344
10
- recce/github.py,sha256=cQBNCtloeLpem06RDhUGb4tR7PoptP1pkZYCM1z2qUQ,7369
11
- recce/pull_request.py,sha256=d-9c9KLzQGY_1erotORdm8lTHqFZKjNN9-BfI-hbGJ8,3853
12
- recce/run.py,sha256=g0lAjKuihL5s4zi_qVlczXxlvAcJSq6n0rAilKqjIgc,13006
13
- recce/server.py,sha256=aR-VoY59fqMQHVzhERGaBMwbOmKX0iXOdnjCcv4-A_8,18030
14
- recce/state.py,sha256=YlT6iEO3xplKX8t7z_EYTYN_vzZd6jkF0elN6fS5V88,30564
15
- recce/summary.py,sha256=yPAaGCkOmfhLjwF2rGpS66XR88TjyNG6GI3T6lsRIeg,18809
16
- recce/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- recce/adapter/base.py,sha256=2IwK18bIn8myCoz98I1PA--FdAzZ-GBI9ZCGyYr-B-4,3582
18
- recce/adapter/sqlmesh_adapter.py,sha256=_nnWHhd46p1MIW5-riQFYMf638OlSdwugIKgTwYiRYM,5160
19
- recce/adapter/dbt_adapter/__init__.py,sha256=PixMHlCw4bsSPCXXMq62q0wdh1YvvDH69kX5m4kuVU0,53111
20
- recce/adapter/dbt_adapter/dbt_version.py,sha256=CwsOEu101fzMUwUYD3Y7btDPAALQNwA7J6C4Auc_wzM,1225
21
- recce/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- recce/apis/check_api.py,sha256=S4OYx3vR5iezo1vnWpk56JUZiprAr9UgYcz-HEIsROs,6211
23
- recce/apis/check_func.py,sha256=onhGppZ7LDrVmipHaXZI-WaTVRFZDwb2oQhbYe0tSXY,4316
24
- recce/apis/run_api.py,sha256=FdNFWt7JrPbCv2CQkswbsaw5gZNGesjQBi749jbQtK0,3326
25
- recce/apis/run_func.py,sha256=zxxRo9_VdvSMeDbzQnBgVo5_msOmauiVF4XJTe-hvOg,7179
26
- recce/data/404.html,sha256=8bqNvrl3ilmdfv7BVOd-GcAC2wd_A1GE0bhI080Adko,6206
27
- recce/data/favicon.ico,sha256=B2mBumUOnzvUrXrqNkrc5QfdDXjzEXRcWkWur0fJ6sM,2565
28
- recce/data/index.html,sha256=nekvVDzZADL8OG3deCvnub4sxHiNZW_4ohxX68qBw14,38924
29
- recce/data/index.txt,sha256=yhcgl5yeXpJoEpY1h9jpp19Uky8wA9QnRtwPI3UgqQM,3283
30
- recce/data/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js,sha256=NvhILR-yLwIu-WlvwD9Hkr2H_I7ZK64vwYvR6c84wC0,172836
31
- recce/data/_next/static/chunks/29e3cc0d-8c150e37dff9631b.js,sha256=4ZQR-OYMhGWnYPNwUjG5FpsTVzVTPEAf6T0v0E5g-4o,700
32
- recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js,sha256=SkfIoUJXsrjEoql4hRRcWKtW2vMfHOAHUm4NE6eaho4,7797
33
- recce/data/_next/static/chunks/3998a672-eaad84bdd88cc73e.js,sha256=7FRm86VFsyXQL6M4J0qFq7e4cvhs48uKJF2Qp0tYraM,9024
34
- recce/data/_next/static/chunks/450c323b-1bb5db526e54435a.js,sha256=3M8dU9CapPo-oey7uyaRBaSrnwoPHUQb671T-_Nv7bs,2205
35
- recce/data/_next/static/chunks/47d8844f-79a1b53c66a7d7ec.js,sha256=WwhEczkWeoHd3z0pTrh4u_XwBoUxePZ7rjEMPjajmx8,697
36
- recce/data/_next/static/chunks/500-e51c92a025a51234.js,sha256=MxXlCvIbimURCzZompSCWqtSOeve8ZdZ5wR1A7Cq5jE,1257314
37
- recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js,sha256=xIxqOzAWk07uQb5pgQGMv0O4CHereLF86Fwm2wX0Mmo,69733
38
- recce/data/_next/static/chunks/700-3b65fc3666820d00.js,sha256=JokVG7hi66aCWFukVWlzc2vIBKa7EFW7JrSGW9F_2tU,124133
39
- recce/data/_next/static/chunks/7a8a3e83-d7fa409d97b38b2b.js,sha256=MmsF3qQgQXqSPGhUHQbIqAtVz7Maa_O3rWErEq0N3gY,1649
40
- recce/data/_next/static/chunks/7f27ae6c-413f6b869a04183a.js,sha256=8Hs6bhtsCfZiOFrX3_IBxLZKPsdqhkLzikrACS1Pe0M,779
41
- recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js,sha256=9MwsjNv8XMd92eUpXYeA32Ahk8ORP_oWMXnpTYOQQ-c,4177
42
- recce/data/_next/static/chunks/a30376cd-7d806e1602f2dc3a.js,sha256=cvkpSEaZn5Johnsf3DT_x-hKNlNIhYFb6CZcMqpXpTE,797
43
- recce/data/_next/static/chunks/b63b1b3f-7395c74e11a14e95.js,sha256=g2ArwRSeMZ-o6dODDGh3orC0iRkyxjXTk4NgyVk1nBw,572
44
- recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js,sha256=CSRe9MSZI7ohCFzU6umTdDDkw2aBiLhA0HLurQwrjUY,198537
45
- recce/data/_next/static/chunks/c1ceaa8b-a1e442154d23515e.js,sha256=mL85IeBYKB6YBgKlDs2n5lA7iLaxU8nTEtE8jduhGRI,81302
46
- recce/data/_next/static/chunks/cd9f8d63-cf0d5a7b0f7a92e8.js,sha256=QqsQqnIVC7xADuujk3GhMZIUZCGiWwe_fqVh_2iSEV0,82989
47
- recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js,sha256=4FzO_5dSRNQKZHQ2EmZW0iau4yBguMBJ324J0e70UXQ,2562
48
- recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js,sha256=aaPLADhg4KN7KoE09dpPiE831gBYqepVrIJj6Qh2amk,154153
49
- recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js,sha256=r51nWC424b7AoD-Y68JLMXDDpS_n-IUL3zcJNStzOLA,483
50
- recce/data/_next/static/chunks/framework-ded83d71b51ce901.js,sha256=0Xsxxnmw5fjRHz8ni6vlaF9tQjfjNGZcZv2oMy7A_T4,140000
51
- recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js,sha256=nTSd5jisBq_nX5_3Yf1JMakSk9Rq5IQEhtzeFU0VRyY,111204
52
- recce/data/_next/static/chunks/main-app-0225a2255968e566.js,sha256=zVNui79GYFi-pNlmSB_zwxzps-uRW9L1-HZXXBUFj-Y,471
53
- recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
54
- recce/data/_next/static/chunks/webpack-567d72f0bc0820d5.js,sha256=8boCnz01og_Qj7lbDux_TTNcPnNFuefZdgpC8-Pb_XU,3839
55
- recce/data/_next/static/chunks/app/layout-9102e22cb73f74d6.js,sha256=dXobUGeQ7wXuAkSTFzSJ7mqKKKsZD2sud0xqn3YEv3Y,161
56
- recce/data/_next/static/chunks/app/page-9adc25782272ed2e.js,sha256=lEYUKCWlczeVJEf6yAbtz_Bk42mZaJeGDoCxoV9mxuE,210735
57
- recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js,sha256=T5MBvLNarbZQll8vwvggCZWFzcNwqe6LlL0hGI9YPXA,1751
58
- recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js,sha256=UcYdHJMmCNfuMevCyY_iFfFwMGbxcEkLGRbBnEx_cCU,284
59
- recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js,sha256=o_MwN3cYfszhI-hy_wkB0XAyTgcEcXt43rrzk-oKIe0,250
60
- recce/data/_next/static/css/c9ecb46a4b21c126.css,sha256=JbGypR8aDNuZavNvH6dhPtSbMVSCsy0ycPrz_6XkiVc,21925
61
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2,sha256=P5Sx5PNkdTlDYzAdulW_OPRfMokDLi6XTpmS8KJSRoI,11148
62
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.31d693bb.woff,sha256=ITxULbMzWscxwUi_v3GpzTSYVWlwq_z9fpEvAkEvHJw,11020
63
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.7e2c1e62.woff,sha256=6J3PqBk_hOFVM8PpfZeSfwZQumQd6LTPPjnaVha2KQ0,12672
64
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2,sha256=qHQDcPj9VkK-6sE5nxIKvejtNLo5RwBULzyH9nZsEwo,12052
65
- recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2,sha256=Tyiv8SvOCaTmT_S2FaOZ5FuZz52F1aVV9hzIfrI7sEI,19036
66
- recce/data/_next/static/media/montserrat-latin-800-normal.97e20d5e.woff,sha256=O3hUbMaqKvL7tlGscLIlvxQbLpHgOmCRLfwQ6RjJvE0,20784
67
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2,sha256=tOnyR2cgiUm1cKtlrN9CY6FzD2yAMBe90slHKC0cBms,33776
68
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.aff52ab0.woff,sha256=IaGLu1tg0bPED9SLQjsK_VdkG3_RCq82GBmSP56xNFU,41956
69
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.5f21869b.woff,sha256=9ke3AivSl-ihV218s2s9NyJS8t0ETKDdqIK4rJWiPl0,7544
70
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2,sha256=bnmP7vEVe-4gLSDBsmKqD-SATv6-Pg-pxnTpSj7BCeI,7948
71
- recce/data/_next/static/qiyFlux77VkhxiceAJe_F/_buildManifest.js,sha256=gZrGHi2LPMw1gkjYWs13MYkJyb5aOtihBRSJ1w0E6QA,224
72
- recce/data/_next/static/qiyFlux77VkhxiceAJe_F/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
73
- recce/data/imgs/feedback/thumbs-down.png,sha256=q9KVIbaZku1TWkYHuleYlO-b6HsTApYh3St5xNHMGMg,10695
74
- recce/data/imgs/feedback/thumbs-up.png,sha256=VF3BH8bmYEqcSsMDJO57xMqW4t6crCXUXaMlOPgI_OE,10556
75
- recce/data/logo/recce-logo-white.png,sha256=y3re8iEucJnMUkAkRS2CjWHTlOydyvgWdWjuQKcXDbk,46923
76
- recce/event/CONFIG,sha256=w8_AVcNu_JF-t8lNmjOqtsXbeOawMzpEhkISaMlm-iU,48
77
- recce/event/SENTRY_DNS,sha256=nWXZevLC4qDScvNtjs329X13oxqvtFI_Kiu6cfCDOBA,83
78
- recce/event/__init__.py,sha256=zcVm28UljfLVwOzWpAz0M94GAsZ-6xeYKTEPQQOWS1c,8429
79
- recce/event/collector.py,sha256=c3ySWQ3Zab49Tz0BbSItPlA-pq0JxUPyWMjr-XBtwz4,5627
80
- recce/event/track.py,sha256=5Md5im5c4ZRZg6FOtBshEN7KFA8xeP6QfxNZhrgWMZ8,4691
81
- recce/models/__init__.py,sha256=m2N3rgyTeXYhgQUx5a8CNUeCykFT-luIHpN-gXfrOsM,104
82
- recce/models/check.py,sha256=LP98PSF7BdifI4IGnFGjSI2mzElIy9B7tKRwa8to7Es,1620
83
- recce/models/run.py,sha256=H47fydFSpiq_qC4kNldBnoQ2OghIq4RDGUyrhVNzUyo,1160
84
- recce/models/types.py,sha256=hCdfEiFlb81178dtP4bplRHBCghAd854JdI2pldIdAU,3130
85
- recce/tasks/__init__.py,sha256=P8BnsFisakA-EpYA3DK2vDfqtYpJExeVU945Jh8aN_o,316
86
- recce/tasks/core.py,sha256=BM8LCyRaOJ_YEgeng0qpJkhEJm654pe7U-epJr6a9hg,4115
87
- recce/tasks/dataframe.py,sha256=ppOUanqNT0PdCg2PZoo4uk_L3vzfRxS0uU5aXlE7bIQ,3648
88
- recce/tasks/histogram.py,sha256=OY3hzFmlhzRvgYbw2LEV9R63Pl3RdJZp81s5AbKS4KQ,13444
89
- recce/tasks/lineage.py,sha256=0my9cyB93IYIUFgVQrLd_7VoQAlkcHrCv_dMDYVnqrc,541
90
- recce/tasks/profile.py,sha256=i5LNBGChfAlfBO5kc8mIPPYZTLNf8fi8oKdmlqcl4tQ,10144
91
- recce/tasks/query.py,sha256=kBCITSpgShSfHRsRur0glKKHa7jCwFivtFChYXdwu7Y,12139
92
- recce/tasks/rowcount.py,sha256=cxQaEU1K_wp6EcCiNXuQxtSDvJXyC82CX5csjiB7eFs,9747
93
- recce/tasks/schema.py,sha256=28mmZni0AU1bLfptt7Np3ddKhQ5XZsrtYINonQ2OQOo,2274
94
- recce/tasks/top_k.py,sha256=E-V2p2St2W1RXa4cQMUYagHpja5rWj_mcPLtvJ3fKfI,5522
95
- recce/tasks/valuediff.py,sha256=7GcSy7emPSLXjqcJomJ5aK9V8Eamo864ln-iOyNnW5A,15118
96
- recce/util/__init__.py,sha256=0lcJectK7Z7k9h0EaYCcv4Bgw2PN03OdJoxb3tbV5j8,37
97
- recce/util/breaking.py,sha256=VcJNBqmn0jzie9vSoc66c4xdZROr9vMVFLb50eH59JY,12136
98
- recce/util/cache.py,sha256=QB6wzxe0M3jNTwP0M27Ys8F2hF-oda4-LyXXG9THuZQ,646
99
- recce/util/cll.py,sha256=fEh13utsobam6fEqyDRXvtxUqXfqZRN-rlTxXXK7NDI,12206
100
- recce/util/io.py,sha256=uMBpJBKKOUPHTBgntkVkuaVUkY8grDIlA8ORCtFLE5E,3372
101
- recce/util/lineage.py,sha256=C-jNqRARgwAEQoicO5t7D0XGBkcVs6SyxLzfzCAqkPQ,707
102
- recce/util/logger.py,sha256=Vmd2PuyzBkML7zvPmJKe3yNfELFjRZqX7abA23wquzg,746
103
- recce/util/pydantic_model.py,sha256=KumKuyCjbTzEMsKLE4-b-eZfp0gLhYDdmVtw1-hxiJw,587
104
- recce/util/recce_cloud.py,sha256=6Nq5MFGsV6AziUHSuON9cPkVpS6bpybuOmqTQbFLhks,7215
105
- recce/util/singleton.py,sha256=l2Q31ulDNCMJCuzUIGNXuvniHdGg6EMg80mrW48-97w,643
106
- recce/yaml/__init__.py,sha256=489WHH9pAPf68gx04qifA0AmexIopJona3EPWxGxa-Y,1296
107
- recce_nightly-0.62.0.20250417.dist-info/licenses/LICENSE,sha256=CQjjMy9aYPhfe8xG_bcpIfKtNkdxLZ5IOb8oPygtUhY,11343
108
- tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
- tests/test_cli.py,sha256=tEQJVT8TbrAOPkIqkVJR6e2k-4dGJZMQVdsYC4DSQAE,5613
110
- tests/test_config.py,sha256=FM55tG0Yaqu8x9l6EiJtFJDUu6F2n96vW4_xbX3O7DY,1579
111
- tests/test_core.py,sha256=1gdyHLU-7fOLPiFSYUevFRFcbTJzDuWK4t_mMojPlz8,769
112
- tests/test_dbt.py,sha256=5F0mBFy9hLs3Cd5LMZb2TPiail-ROJDeaZLoM5pOOac,1323
113
- tests/test_pull_request.py,sha256=DJl4NIxDiNfcskSuRf2qFgWDb7CSVoCB3EzzUwvRn-o,3562
114
- tests/test_server.py,sha256=TgHjn3J1GGqgEpx2FEaf0IIdCIipiSjt97Kt_ISgjgc,3377
115
- tests/test_state.py,sha256=bKMjJ9Cq9rXDIEkWeZMNbdTZzwcVpTSiKlztJQO-ajY,4951
116
- tests/test_summary.py,sha256=d8V7dhJuQHsEkEOGq7nCiV_a0m2uEEoFwhlH7atBHE0,2735
117
- tests/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
- tests/adapter/dbt_adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
- tests/adapter/dbt_adapter/conftest.py,sha256=xLt7XJctbPqY4KtAkD1fcxhoAk0v0QUFNzAyJiGunkA,271
120
- tests/adapter/dbt_adapter/dbt_test_helper.py,sha256=TFz2ETjmmwyHmpz08wnBBYRMbXL-mvoCnqNP5oioX0M,9973
121
- tests/adapter/dbt_adapter/test_dbt_adapter.py,sha256=ZksKGGEo2rIziPjVG-dAh3xaj8YDBbHg_D5q2GPQRR8,1520
122
- tests/adapter/dbt_adapter/test_dbt_cll.py,sha256=X7xbTnDZolwP6BIiL5iVl2yRI4-_z4NaeGBD1LW2QT4,4338
123
- tests/adapter/dbt_adapter/test_selector.py,sha256=z6mStaj31d4BuNjvfpoMq4QbWZKLyo4rTFYL0rQvMK0,6255
124
- tests/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
- tests/tasks/conftest.py,sha256=UefgbNfJufLOmgHLiEFXIjOVmu8-58GbS6m5-NcEu20,143
126
- tests/tasks/test_histogram.py,sha256=F-FwgVuNpkcz_u7GsJ_xaMDaaSlay9nnHKBYt4sLV1I,4119
127
- tests/tasks/test_lineage.py,sha256=UxiG7gNjbfT8UIsdgM5TFfwl69xSIZ0WhNOLVw41VkQ,918
128
- tests/tasks/test_preset_checks.py,sha256=BQWwlo1_C9trrkuiTF4opXjAApgU7TvNbx9EzWXc8u0,1263
129
- tests/tasks/test_profile.py,sha256=1CCAEKdgbXCPQUzD85iEbuH5IN9BEBtLpfg4tGy8Y_E,1953
130
- tests/tasks/test_query.py,sha256=aLbMw6O9hMkbT0wol_Q447a6X1MEwWJYZtwJjHmm0bs,4177
131
- tests/tasks/test_row_count.py,sha256=hjrKP1u2aZ9V0EWb0WGXDz4-V2kYaiNeiJ_Mqin8BPg,2920
132
- tests/tasks/test_schema.py,sha256=02guW2UXwUW3Ts8x27KjdL6V9fVatGlx8XFEEcVq3bU,2810
133
- tests/tasks/test_top_k.py,sha256=hqYWSd9xE1GU0wgvpgKeLHbPVd5CABYcTJvgA49JRyA,1707
134
- tests/tasks/test_valuediff.py,sha256=_z1Ci4ba4lFSWwbj7cbKBRtWqLgV_1HIZGqQlEFl61o,1863
135
- recce_nightly-0.62.0.20250417.dist-info/METADATA,sha256=VhchOuPBndFWpg5-jqQdJrcQPCwx_JvOoUcs_A8wjdw,13240
136
- recce_nightly-0.62.0.20250417.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
137
- recce_nightly-0.62.0.20250417.dist-info/entry_points.txt,sha256=oqoY_IiwIqXbgrIsPnlqUqao2eiIeP2dprowkOlmeyg,40
138
- recce_nightly-0.62.0.20250417.dist-info/top_level.txt,sha256=6PKGVpf75idP0C6KEaldDzzZUauIxNu1ZDstau1pI4I,12
139
- recce_nightly-0.62.0.20250417.dist-info/RECORD,,
@@ -1,2 +0,0 @@
1
- recce
2
- tests
tests/__init__.py DELETED
File without changes
tests/adapter/__init__.py DELETED
File without changes
File without changes
@@ -1,13 +0,0 @@
1
- import pytest
2
-
3
- from recce.core import set_default_context
4
- from .dbt_test_helper import DbtTestHelper
5
-
6
-
7
- @pytest.fixture
8
- def dbt_test_helper():
9
- helper = DbtTestHelper()
10
- context = helper.context
11
- set_default_context(context)
12
- yield helper
13
- helper.cleanup()